【问题标题】:SQL Database - Update Record via PHP Form. No Errors, but no update.SQL 数据库 - 通过 PHP 表单更新记录。没有错误,但没有更新。
【发布时间】:2013-03-06 07:45:46
【问题描述】:

希望这是放置它的正确区域。目前我正在做一个有趣的小项目,同时尝试自学一些 PHP。我创建了一个与我的网站相关联的小“审核”页面,允许我将新数据输入到预先存在的 SQL 数据库、搜索该数据并更新该数据。现在,添加和搜索可以顺利进行。唯一的问题是“更新”功能没有......它没有出错(实际上它表明它是成功的)并且它都按照它应该的方式工作,除了它没有“实际上”更新表中的信息。

在过去的 2-3 天里,我一直在阅读 StackOverflow、教程指南、论坛,并且我自己只是在玩部分代码,其中没有一个甚至提供了“远程”答案。

我有2个相关的页面,'update.php'页面和'update_ac.php'页面在表单上点击'提交'后运行脚本,代码如下:

更新.php

<?php
$host="localhost"; // Host name 
$username="member2"; // Mysql username 
$password="********"; // Mysql password 
$db_name="audits"; // Database name 
$tbl_name="data"; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// get value of id that sent from address bar
$id=$_GET['id'];

// Retrieve data from database 
$sql="SELECT * FROM $tbl_name WHERE id='$id'";
$result=mysql_query($sql);

$rows=mysql_fetch_array($result);
?>

<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<form name="form1" method="post" action="update_ac.php">
<td>
<table width="100%" border="0" cellspacing="1" cellpadding="0">
<tr>
<td>&nbsp;</td>
<td colspan="3"><strong>Update data in mysql</strong> </td>
</tr>
<tr>
<td align="center">&nbsp;</td>
<td align="center">&nbsp;</td>
<td align="center">&nbsp;</td>
<td align="center">&nbsp;</td>
<td align="center">&nbsp;</td>
<td align="center">&nbsp;</td> 
</tr>
<tr>
<td align="center">&nbsp;</td>
<td align="center"><strong>Barcode</strong></td>
<td align="center"><strong>Product</strong></td>
<td align="center"><strong>Category</strong></td>
<td align="center"><strong>Assigned</strong></td>
<td align="center"><strong>Notes</strong></td> 
</tr>
<tr>
<td>&nbsp;</td>
<td align="center">
<input name="barcode" type="text" id="barcode" value="<? echo $rows['barcode']; ?>">
</td>
<td align="center">
<input name="product" type="text" id="product" value="<? echo $rows['product']; ?>" size="15">
</td>
<td align="center">
<select name="category" id="category" value="<? echo $rows['category']; ?>">
<option value="Hardware">Hardware</option>
<option value="Software">Software</option>
<option value="Furniture">Furniture</option>
</select>
</td>  
<td align="center">
<select name="assigned" id="assigned" value="<? echo $rows['assigned']; ?>">
<option value="name1">Name 1</option>
<option value="name1">Name 2</option>
<option value="name1">Name 3</option>
<option value="name1">Name 4</option>
</select>
</td>
<td align="center">
<input name="notes" type="text" id="notes" value="<? echo $rows['notes']; ?>" size="15">
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input name="id" type="hidden" id="id" value="<? echo $rows['id']; ?>">
</td>
<td align="center">
<input type="submit" name="Submit" value="Submit">
</td>
<td>&nbsp;</td>
</tr>
</table>
</td>
</form>
</tr>
</table>

<?php
// close connection 
mysql_close();
?>

update_ac.php

<?php
$host="localhost"; // Host name 
$username="member2"; // Mysql username 
$password="********"; // Mysql password 
$db_name="audits"; // Database name 
$tbl_name="data"; // Table name 

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// update data in mysql database 
$sql="UPDATE $tbl_name SET barcode='$barcode', product='$product', category='$category', assigned='$assigned', notes='$notes' WHERE id='$id'";
$result=mysql_query($sql);

// if successfully updated. 
if($result){
echo "Successful";
echo "<BR>";
echo "<a href='assets.php'>View Changes</a>";
echo "<BR>";
echo "<a href='login-home.php'>Home</a>";
}

else {
echo "ERROR";
}

?> 

现在,我确实从older site 中提取了这个,并且为了满足我自己的需要而进行了某种“更改”,但无济于事。我什至完整地复制/粘贴了他们的教程(包括他们的数据库),即使这样也没有用,这似乎表明某处的代码有问题。提前致谢。

【问题讨论】:

  • 你做了什么调试?我认为您可以将其分解为更简单的用例。如果您需要发布这么多代码,我怀疑您可以做更多的事情来解决这个问题。
  • 你在看什么让你认为记录没有更新?
  • 嗯,我没看到你在哪里设置 $barcode、$product 和其他变量。
  • 嗨丹,不是我的实际 assets.php 页面以及在 phpMyAdmin 中检查时的表格。如下所示,我认为错误在于缺少变量,我即将对其进行测试。

标签: php sql forms phpmyadmin


【解决方案1】:

我在设置这些变量的第二个脚本中看不到任何内容。表单值不会自动传递到变量中,您必须从 $_POST 数组变量中检索它们,这就是为什么您在第一页的表单中使用“post”方法的原因。你这样做:

if (isset($_POST['barcode']) && $_POST['barcode'] != "") {
    $barcode = $_POST['barcode'];
} else {
    echo "'barcode' input is not set.";
}

您实际上并不需要 if 语句,但它对于故障排除和一般错误预防很有用。它只是确保该字段既已设置又不为空。

(我会解释数组,但似乎您已经根据带有 $rows 变量的循环掌握了它们。如果您需要那里的帮助,请告诉我,我会给出一个简短的解释并链接您到教程。)

【讨论】:

  • 这很可能是答案。请注意没有人将id 设置为' OR '1'='1 或更糟! (由于您在此代码示例中进行错误检查,有人可能会认为这是完整的并尝试照原样复制和使用它!)
  • 这很公平,尽管我从未声称它是完整的。实际上,如果您想安全起见,而不是建议业余爱好者手动清理他们的数据,负责任的路线将推荐通过 PDO 准备好的语句。我只是没有打扰,因为 OP 是一个爱好者,听起来他们无意公开他们的脚本。
  • 同意 200%。我主要是为下一个出现的人发表评论,看到这个问题和答案,并且在不知道甚至可能存在安全问题的情况下继续前进。
  • 很公平,我真的应该在发帖时考虑到这一点。
  • 这似乎是正确的,在发布这个之后我追捕了更多,似乎情况可能是这样。我正要测试,会回来的。非常感谢:)
【解决方案2】:

要更新您的值,您应该在 update_ac.php 中使用 $_POST[NAME of SELECT]

<?php
$host="localhost"; // Host name 
$username="member2"; // Mysql username 
$password="********"; // Mysql password 
$db_name="audits"; // Database name 
$tbl_name="data"; // Table name 

// Connect to server and select database.
$con=mysqli_connect("$host","$username","$password","$db_name") or die("cannot connect"); 

if (mysqli_connect_errno()) 
{
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}   

$sql="SELECT * FROM questions";
$result =mysqli_query($con,$sql) or die(mysqli_error($con));
mysqli_query($con,"UPDATE  SET barcode='$_POST[barcode]' ,product='$_POST[product]' ,category='$_POST[category]' ,assigned='$_POST[assigned]' ,notes='$_POST[notes]' WHERE id='$_POST[id]' ");
mysqli_close($con);

?>

此代码只需将其复制并粘贴到 update_ac.php 即可工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    相关资源
    最近更新 更多