php - проблема при обновлении БД
Я работаю над обновлением текста до SQL. Я сталкиваюсь с проблемой в моем коде ниже, не обновляя БД, но когда я изменяю where pid='$data[pid]'
заявление к некоторому индексу, как where pid='3'
, оно работает.
Я новичок в программировании. можешь объяснить почему? Благодарю.
<?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>
3 ответа
Если вы используете массивы внутри интерполяции строк, вам нужно {}
Например
"where pid = '{$data['pid']}'"
Кроме того, похоже, что вы не цитируете свои ключи массива. $data[key]
должно быть либо $data["key"]
или же $data['key']
если вы не используете переменную, как в $data[$key]
Я так чувствую $data['pid']
может быть не прав. Рассматривать:
$datapos=$data[datapos];
$datanet=$data[datanet];
$dataneg=$data[dataneg];
$dataid=$data[pid];
...Вот $data
это нормально, я полагаю...
while ($data=mysql_fetch_array($hasil)){
... вот вам цикл $data
и так выйти, когда $data
нулевой...
<td><input type='submit' name='btsubmit' value='Train' /></td>
</form></tr>");}
^---
Здесь вы закрыли цикл (я бы использовал HERE-документ на вашем месте, кстати), и так с этого момента $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, если он находится в том же файле, должен быть включен в подходящую проверку, что 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());
}
Попробуйте этот запрос на изменение обновления, как этот
mysql_query("update trainklasifier set datapos='".$inputpos."',datanet='".$inputnet."',dataneg='".$inputneg."' where pid='".$data[pid]."' ");