[英]PHP Mysql update table using form will not update
好的,所以我尝试获取表单来更新表格以编辑联系人,但是由于某些原因(错误为0),它不会更新,而且我也无法弄清楚为什么,因为这一切对我来说都很不错。
这是编辑联系人脚本
// Connect to database
$dbc = mysql_connect("localhost", "root");
if (!$dbc)
die("Could not connect: " . mysql_error());
// Select database
$db_select = mysql_select_db( "contactmanager", $dbc );
if (!$db_select)
die("Could not select DB: " . mysql_error());
// Build update function for form
if(isset($_POST['update'])){
mysql_query("UPDATE contacts SET Name='$_POST[name]', Address='$_POST[address]', Phone='$_POST[phone]', Mobile='$_POST[mobile]', Email='$_POST[email]' WHERE ContactID = $contactID") or trigger_error(mysql_error());
echo 'Update has been pushed and fucntion has run';
} else {
echo 'Update has not been pushed.';
}
// initialize form control values
$name = '';
$address = '';
$phone = '';
$mobile = '';
$email = '';
// Get ID of contact selected for editing
$contactID = $_GET['id'];
// build sql select statement
$query = "SELECT * FROM contacts WHERE ContactID = '$contactID'";
// Run sql statement against database
$result = mysql_query($query, $dbc);
if ($result) {
$row = mysql_fetch_assoc($result);
$name = $row["Name"];
$address = $row["Address"];
$phone = $row["Phone"];
$mobile = $row["Mobile"];
$email = $row["Email"];
}
else {
// If there is an error display message
echo '<p><b class="error">Error with $rst: ' . mysql_error($dbc) . '</b></p>';
}
?>
<form name="editcontact" method="post" action="edit-contact.php" id="editcontact">
<fieldset>
<dl>
<dt><label for="name">Name</label></dt>
<dd><input name="name" type="text" value="<?php echo $name; ?>" size="33" maxlength="50" tabindex="1" /></dd>
</dl>
<dl>
<dt><label for="address">Address</label></dt>
<dd><textarea name="address" cols="33" rows="5" tabindex="2"><?php echo $address; ?></textarea></dd>
</dl>
<dl>
<dt><label for="phone">Phone</label></dt>
<dd><input name="phone" value="<?php echo $phone; ?>" type="text" size="33" maxlength="50" tabindex="3" /></dd>
</dl>
<dl>
<dt><label for="mobile">Mobile</label></dt>
<dd><input name="mobile" value="<?php echo $mobile; ?>" type="text" size="33" maxlength="50" tabindex="4" /></dd>
</dl>
<dl>
<dt><label for="Email">Email</label></dt>
<dd><input name="email" value="<?php echo $email; ?>" type="text" size="33" maxlength="50" tabindex="5" /></dd>
</dl>
<dl>
<dt></dt>
<dd><input type="submit" value="Update" name="update" tabindex="6" style="margin-left:7.3%;" /></dd>
<dd><a href="list-contacts.php" alt="Contacts List"><p style="margin-left:7.3%;">Back to contacts list</p></a></dd>
</dl>
</fieldset>
</form>
<?php
?>
if(isset($_POST['update'])){...}
条件语句之外的所有内容在提交时都会被忽略,这就是您的$contactID = $_GET['id'];
目前位于。
将其放在条件语句中。
<?php
...
if(isset($_POST['update'])){
// $contactID = $_GET['id']; // original
$contactID = intval($_GET['id']); // recommended for (INT) type
$name = mysql_real_escape_string($_POST['name']); // etc.
...
}
旁注:您当前的代码可以进行SQL注入 。 使用mysqli_*
函数。 (我建议您将其与预处理语句或PDO一起使用 )
您应该更改:
$name = $_POST['name'];
至:
$name = mysql_real_escape_string($_POST['name']);
暂时,其余的都遵循相同的约定。
然后执行SET Name='$name'
等,其他操作相同。 在您熟悉准备好的语句或PDO之前,这将为您提供一定的安全性。
mysql_*
函数弃用通知:
http://www.php.net/manual/zh/intro.mysql.php
自PHP 5.5.0起不推荐使用该扩展,不建议编写新代码,因为将来会删除该扩展。 相反,应使用mysqli或PDO_MySQL扩展名。 另请参见MySQL API概述,以获取选择MySQL API时的更多帮助。
这些功能使您可以访问MySQL数据库服务器。 有关MySQL的更多信息,请参见» http://www.mysql.com/ 。
可以在» http://dev.mysql.com/doc/中找到MySQL的文档。
这里有一些关于准备好的语句的教程,您可以研究和尝试:
以下是有关PDO的一些教程:
id或contactID永远不会使其通过表单进入代码的处理部分。 在表单中最后一组<dl>
标记之前,您可以添加一个隐藏的输入,以将ID通过表单传递到$ _POST数组中:
<dl>
<dt></dt>
<dd><input name="contactID" value="<?php echo $contactID; ?>" type="hidden" /> </dd>
</dl>
然后在处理部分,您可以添加一行以再次获取值:
if(isset($_POST['update'])){
$id = mysql_real_escape_string($_POST['contactID']);
$name = mysql_real_escape_string($_POST['name']);
$address = mysql_real_escape_string($_POST['address']);
$phone = mysql_real_escape_string($_POST['phone']);
$mobile = mysql_real_escape_string($_POST['[mobile']);
$email = mysql_real_escape_string($_POST['email']);
mysql_query("UPDATE contacts SET Name='$name', Address='$address', Phone='$phone', Mobile='$mobile', Email='$email' WHERE ContactID = $id") or trigger_error(mysql_error());
echo 'Update has been pushed and function has run';
} else {//as before...
另外,请认真看一下有关使用@ Fred-ii-中的mysqli的评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.