0

我正在将文本更新为 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>
4

3 回答 3

2

如果您在字符串插值中使用数组,则需要换行{}

例如

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

此外,您似乎没有引用您的数组键。$data[key]应该是$data["key"]或者$data['key']除非您使用变量,如$data[$key]

于 2013-05-23T13:38:13.867 回答
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>");}
                ^---

在这里你已经关闭了循环(如果我是你,我会使用 HERE 文档,顺便说一句),所以从现在开始$data是 NULL。

$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());
}
于 2013-05-23T13:50:04.443 回答
0

尝试这样的更改更新查询

mysql_query("update trainklasifier set datapos='".$inputpos."',datanet='".$inputnet."',dataneg='".$inputneg."' where pid='".$data[pid]."' ");
于 2013-05-23T13:42:15.287 回答