2013-05-23 4 views
0

Я работаю над обновлением текста до sql. Я столкнулся с проблемой в моем коде ниже, не обновляя db, но когда я меняю оператор where pid='$data[pid]' на какой-то индекс, например where pid='3', он работает.php - проблема при обновлении db

Я новичок в программировании. можете ли вы объяснить, почему? спасибо.

<?php 
//include "koneksi.php"; 
$host="localhost";//nama server 
$user="root";//username 
$pass="";//password 
$dbnama="skripsi";//nama database yang dipilih 
mysql_connect($host, $user, $pass) or die ("Database tidak dapat di akses");//koneksi ke database 
mysql_select_db($dbnama); //database yang dipilih 
?> 
<?php 
$query="select pid, username, user, datapos, datanet, dataneg, status from trainklasifier"; 
$hasil=mysql_query($query); 
?> 
<html> 
<head> 
</head> 
<body> 
<table border="1" align="center"> 
<tr> 
    <td >ID</td> 
    <td >Model Klasifikasi</td> 
    <td >Creator</td> 
    <td width="300px">Data Positif</td> 
    <td width="300px">Data Netral</td> 
    <td width="300px">Data Negatif</td> 
    <td width="100px">Status</td> 
    <td width="100px">Aksi</td> 
</tr> 
<?php 
$datapos=$data[datapos]; 
$datanet=$data[datanet]; 
$dataneg=$data[dataneg]; 
$dataid=$data[pid]; 

while ($data=mysql_fetch_array($hasil)){ 
    echo ("<tr><form id='form1' action='' method='post'> 
<td><textarea rows='1' cols='1' name='taid' value='$dataid' disabled>$data[pid]</textarea></td>  
<td>$data[username]</td> 
<td>$data[user]</td> 
<td><textarea rows='4' cols='35' name='tapos' >$data[datapos]</textarea></td> 
<td><textarea rows='4' cols='35' name='tanet' value='$datanet'>$data[datanet]</textarea></td> 
<td><textarea rows='4' cols='35' name='taneg' value='$dataneg'>$data[dataneg]</textarea></td> 
<td>$data[status]</td> 
<td><input type='submit' name='btsubmit' value='Train' /></td> 
    </form></tr>");} 
?> 
<?php 
$inputpos=$_POST['tapos']; 
$inputnet=$_POST['tanet']; 
$inputneg=$_POST['taneg']; 
$id=$_POST['taid']; 

if (isset($_POST['btsubmit'])){ 
    mysql_connect("localhost", "root", "") or die(mysql_error()); 
    mysql_select_db("skripsi") or die(mysql_error()); 
    mysql_query("update trainklasifier set datapos='$inputpos',datanet='$inputnet',dataneg='$inputneg' where pid='$data[pid]'"); 
    } 
    echo $inputpos; 
    ?> 
    </table> 
    </body> 
    </html> 
+0

В чем ошибка? Добавьте 'die (mysql_error());' после вашего запроса на обновление. – Rikesh

+0

Вместо использования '$ data [pid]' вам нужно процитировать ключ как '$ data ['pid']' для обоих, когда вы его установите, и получить его – naththedeveloper

+0

Привет, мои коды не запускают ошибку, но не обновляют to db – user2413763

ответ

2

При использовании массивов внутри интерполяции строк нужно обернуть затем в {}

Например

"where pid = '{$data['pid']}'" 

Кроме того, в этом случае вы не процитировать ключи массива. $data[key] должны быть $data["key"] или $data['key'], если вы не используете переменную, как в $data[$key]

+0

Привет. Спасибо за помощь. я попробую – user2413763

+0

+1 для ловли ключей без кавычек. – naththedeveloper

+0

Это действительно лучше (яснее), но он не нуждается в этом. PHP все равно расширил бы его. – LSerni

0

Попробуйте это обновление изменить запрос, как этот

mysql_query("update trainklasifier set datapos='".$inputpos."',datanet='".$inputnet."',dataneg='".$inputneg."' where pid='".$data[pid]."' "); 
+0

@fullybaked hi, я просто изменяю код, как указано выше, но он не обновляет db – user2413763

+0

mysql_query (" update trainklasifier set datapos = '". $ Inputpos."', Datanet = '". $ Inputnet."' , dataneg = '". $ inputneg."' где pid = '". $ data [' pid ']."' "); –

+0

попробуйте выполнить исправленный запрос, он будет работать –

1

Я чувствую, что $data['pid'] может быть неправильным. Рассмотрим:

$datapos=$data[datapos]; 
$datanet=$data[datanet]; 
$dataneg=$data[dataneg]; 
$dataid=$data[pid]; 

... здесь $data хорошо, я полагаю ...

while ($data=mysql_fetch_array($hasil)){ 

... здесь цикл $data, и поэтому выход, когда $data является NULL ...

<td><input type='submit' name='btsubmit' value='Train' /></td> 
</form></tr>");} 
       ^--- 

Здесь вы закрыли цикл (я бы использовал ЗДЕСЬ-документ, если бы я был вам, BTW), и поэтому с этого момента $data нулевой.

$id=$_POST['taid']; 

Здесь вы нашли $id.

if (isset($_POST['btsubmit'])){ 
    mysql_connect("localhost", "root", "") or die(mysql_error()); 
    mysql_select_db("skripsi") or die(mysql_error()); 
    mysql_query("update trainklasifier set  datapos='$inputpos',datanet='$inputnet',dataneg='$inputneg' where pid='$data[pid]'"); 

И здесь вы используете $data[pid], который не существует. Синтаксис действительно будет работать, это не слишком понятно ({$data['pid']} было бы лучше), но проблема в том, что $data больше не является массивом здесь.

Вы, вероятно, хотите использовать $id вместо:

$query = <<<QUERY1 
update trainklasifier 
    set datapos='$inputpos',datanet='$inputnet',dataneg='$inputneg' 
    where pid='$id'; 
QUERY1; 
mysql_query($query); 

Проверка _POST

POST-код проверки, если он находится в том же файле, должен быть заключен в пригодном проверки, что сообщение было действительно возникли:

<?php 
    $need = array('tapos','tanet','taneg','taid','btsubmit'); 
    $haveAll = true; 
    foreach($need as $fld) 
     if (!isset($_POST[$fld])) 
      $haveAll = false; 
    if ($haveAll) { 
     // Now we can proceed with POST. 
     $inputpos=$_POST['tapos']; 
     $inputnet=$_POST['tanet']; 
     $inputneg=$_POST['taneg']; 
     $id=$_POST['taid']; 

     mysql_connect("localhost", "root", "") or die(mysql_error()); 
     mysql_select_db("skripsi") or die(mysql_error()); 

// This is a here-document. Things to check: no two identifiers in the 
// same PHP file (use QUERY1, QUERY2, ...). No spaces around the first 
// opening tag ("<<<QUERY"). The closing tag and the semicolon must be 
// the only thing on the closing line, no spaces, nothing: "QUERY1;" 
// (These conditions are more restrictive than necessary: to be safe). 

     $query = <<<QUERY1 
update trainklasifier 
    set datapos='$inputpos',datanet='$inputnet',dataneg='$inputneg' 
    where pid='$id'; 
QUERY1; 
     mysql_query($query) or die(mysql_error()); 
} 
+0

спасибо. позвольте мне попробовать :) – user2413763

+0

Я добавил пример ЗДЕСЬ-документа (здесь называется QUERY1), он позволяет проще включать текст. – LSerni

+0

Какие мои коды должны выглядеть? я очень новичок и явно не понимаю ваши объяснения. извините до – user2413763

Смежные вопросы