这是我通常在命令提示符下执行的操作,它有效:
UPDATE saleslog SET Status='Closed' Where FileNumber='142840';
该表有大约 15 个左右的列,例如 ID、文件编号、地址、价格、状态等,但我只对更新不同记录的"状态"列中的字段中的值感兴趣。
我试图制作的是 php 形式,我可以在同一列中更改记录中的字段,但对于在不同时间的不同记录中一次一个,即将状态列中的字段从"待处理"更改为"关闭"
更具体地说,我希望表单包含两个字段,其中一个字段中我可以按FileNumber
引用记录,然后单击该按钮时,Status
字段中的值将更改为"CLOSED"。
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
我已经在谷歌上搜索并在某处找到了此表格,并将其更改为我的情况。但是,每次单击"更新"按钮时,都会收到有关"未知列状态"的错误。但是,如果我键入其他内容并单击"更新",则会显示"已成功更新数据",但是在该特定记录的"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>
更改
$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']);
更改查询:
$sql = "UPDATE saleslog ". "SET Status = $Status ". "WHERE FileNumber = $FileNumber" ;
自
$sql = "UPDATE saleslog SET Status = '".$Status."' WHERE FileNumber = '".$FileNumber."'";