用于更新单个MySQL记录的PHP表单无法正常工作

时间:2014-04-05 09:06:40

标签: php html mysql

这是我通常在命令提示符下执行的操作:

UPDATE saleslog SET Status='Closed' Where FileNumber='142840';

该表包含大约15个左右的列,如ID,FileNumber,地址,价格,状态等,但我感兴趣的是只更新不同记录的Status列中的值。

我想要做的是php表单,我可以在同一列中更改记录中的字段,但是对于不同时间的不同记录中的一个,即更改Status列中的字段from let say “待定”至“已关闭”

更具体地说,我想要包含两个字段的表单,其中一个我可以通过FileNumber引用记录,而单击时按钮会将Status字段中的值更改为“闭合”。

Before Update

ID   FileNumber   Address         Price   Status

234  142840       123 N Park Ave  235.00  Pending

After Update

ID   FileNumber   Address         Price   Status

234  142840       123 N Park Ave  235.00  Closed

我用Google搜索并在某个地方找到了这个表单并将其更改为我的情况。但是,每次单击“更新”按钮,我都会收到有关“未知列状态”的错误消息。但是,如果我键入其他内容并单击“更新”,则会显示“已成功更新数据”,但“状态”字段中没有更新任何记录,该记录由该特定记录的FileNumber列中的类型值引用。

所以,这是代码:

<html>
<head>
</head>
<body>

<?php
if(isset($_POST['update']))
{
$dbhost = 'localhost';
$dbuser = 'jack';
$dbpass = 'somepassword';
$myDBname = 'mydatabase';
$conn = mysql_connect($dbhost, $dbuser, $dbpass, $myDBname);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}

$FileNumber = $_POST['FileNumber'];
$Status = $_POST['Status'];

$sql = "UPDATE saleslog ".
       "SET Status = $Status ".
   "WHERE FileNumber = $FileNumber" ;

mysql_select_db('mydatabase');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not update data: ' . mysql_error());
}
echo "Updated data successfully\n";
mysql_close($conn);
}
else
{
?>
<form method="post" action="<?php $_PHP_SELF ?>">
<table width="400" border="0" cellspacing="1" cellpadding="2">
<tr>
<td width="100">File Number</td>
<td><input name="FileNumber" type="text" id="FileNumber"></td>
</tr>
<tr>
<td width="100">Status</td>
<td><input name="Status" type="text" id="Status"></td>
</tr>
<tr>
<td width="100"> </td>
<td> </td>
</tr>
<tr>
<td width="100"> </td>
<td>
<input name="update" type="submit" id="update" value="Update">
</td>
</tr>
</table>
</form>
<?php
}
?>
</body>
</html>    

2 个答案:

答案 0 :(得分:4)

更改

$sql = "UPDATE saleslog ".
       "SET Status = $Status ".
   "WHERE FileNumber = $FileNumber" ;

$sql = "UPDATE saleslog 
       SET Status = '$Status'
       WHERE FileNumber = '$FileNumber'" ;

注意:您正在使用已弃用的mysql_*函数 - 切换到mysqli_PDO,而且您很容易受到SQL注入攻击。

或者至少:

$FileNumber = mysql_real_escape_string($_POST['FileNumber']);
$Status = mysql_real_escape_string($_POST['Status']);

答案 1 :(得分:1)

更改查询:

$sql = "UPDATE saleslog ". "SET Status = $Status ". "WHERE FileNumber = $FileNumber" ;

$sql = "UPDATE saleslog SET Status = '".$Status."' WHERE FileNumber = '".$FileNumber."'";