SQL数据库 - 通过PHP表单更新记录。没有错误,但没有更新。

时间:2013-03-18 02:35:40

标签: php sql forms phpmyadmin

希望这是正确的选择。目前,我正在开展一个有趣的小项目,同时尝试自学一些PHP。我创建了一个小小的“审计”。与我的网站相关联的页面,允许我将新数据输入到预先存在的SQL数据库,搜索该数据并更新该数据。现在,添加和搜索工作没有故障。唯一的问题是'更新'函数没有...它没有错误(实际上它说它是成功的)并且它都应该如何工作,除了它实际上并没有#39;更新表中的信息。

我在过去的2-3天里一直在阅读StackOverflow,教程指南,论坛以及自己玩部分代码,其中没有一部分甚至提供了一个遥控器'回答。

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

update.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中取出了这个&#39;更改了&#39;为了满足自己的需要而无济于事。我甚至完成了他们的教程(包括他们的数据库)的完整复制/粘贴,甚至没有用,这似乎表明某些地方的代码有问题。提前谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

(我会解释数组,但看起来你已经掌握了它们基于你的循环和$ rows变量。如果你需要帮助,请告诉我,我会给你一个简短的解释并链接你到教程。)

答案 1 :(得分:0)

要更新您的值,您应该在update_ac.php中使用$ _POST [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