【问题标题】:Updating data using PHP Edit form help needed使用 PHP 更新数据需要编辑表单帮助
【发布时间】:2012-01-06 12:59:57
【问题描述】:

我正在尝试使用链接到以下 ID 的正确信息更新我的表格。我会把代码贴出来让大家看看。

这是我的问题:一旦我提交了包含从数据库收到的所有详细信息的表单,一切都会成功。但是当我单击提交时,它会重定向到我的另一个名为 update_ac.php 的页面。一切正常,除了 mysql 表中的数据没有更新。

我想知道是否有人可以查看代码以了解他们的想法:非常感谢,反馈会很棒。 PS我不是最好的PHP程序员,还在学习中!

所以这里是edit.php - 用户在其中编辑他们的信息:

<?php
session_start();
$UserName = $_SESSION['UserName'];
require("checkLoginSession.php");
$adminid = $_GET['id'];

//CONNECTION CODE WAS HERE

// 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");


echo("Logged In As: $UserName");
echo "<br />";
echo("We are editing Data for ID: $adminid");
echo "<br />";
echo "<a href=test.php>Go back to panel</a>";

$id=$_GET['id'];
// Retrieve data from database 
$sql="SELECT * FROM admin WHERE id='$id'";
$result=mysql_query($sql) or die(mysql_error());

$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>
</tr>
<tr>
<td align="center">&nbsp;</td>
<td align="center"><strong>Name</strong></td>
<td align="center"><strong>Main Content</strong></td>
</tr>
<tr>
<td>&nbsp;</td>
<td align="center"><input name="name" type="text" id="name" value="<? echo $rows['name']; ?>"></td>
<td align="center"><input name="mainContent" type="text" id="mainContent" value="<? echo $rows['mainContent']; ?>" 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>

<?
mysql_close();
 ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Edit Page</title>
</head>

<body>
<h2>Edit Page (<?php echo ("$adminid"); ?>)</h2>
</body>
</html>

这里是update_ac.php:

// 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 

$firstName = $_POST["name"];
$mainText = $_POST["mainContent"];

$sql="UPDATE admin SET name='$firstName', mainContent='$mainText' WHERE id='$id'";
$result=mysql_query($sql) or die(mysql_error());;

// if successfully updated. 
if($result){
echo "Successful";
echo "<BR>";
echo "<a href='test.php'>Back to panel</a>";
}

else {
echo "ERROR";
}

?>

好的,伙计们在这里编辑:

如果在 Update_ac.php 中,如果我将以下行更改为:

$sql="UPDATE admin SET name='$firstName', mainContent='$mainText' WHERE id='1'";

信息现在得到更新,因此意味着我的 ID 变量出了问题

【问题讨论】:

  • 您还没有在update_ac.php 中定义$id。我强烈建议您阅读有关在代码中防止 SQL 注入的内容,将变量直接插入查询而不事先以某种方式转义是不安全的。
  • ...在阅读了有关 SQL 注入的内容后,请阅读准备好的 SQL 语句:php.net/manual/en/pdo.prepared-statements.php
  • 谢谢你的帮助,会看看!
  • Jonathon,你确定文件 update_ac.php 中的变量不为空吗?您确定,表单中的数据已移至文件 update_ac.php 吗?

标签: php mysql database


【解决方案1】:

看起来像是数据库转义的典型遗漏。您需要在您在 sql 查询中连接的 any 字符串上应用 mysql_real_escape_string

懒惰的版本是:

$_POST = array_map("mysql_real_escape_string", $_POST);
$firstName = $_POST["name"];
$mainText = $_POST["mainContent"];

否则您经常会收到无效的语法错误。在查询后使用print mysql_error(); 找出您的情况出了什么问题。

另请参阅String escaping for each database 或阅读 以了解不那么繁琐的数据库交互。

【讨论】:

    【解决方案2】:

    乍一看,这是因为您使用的是变量而不是 $_POST 变量

    $sql="UPDATE admin SET name='$firstName', mainContent='$mainText' WHERE id='$id'";
    

    应该是带有表单字段名称的 post 变量

    $sql="UPDATE admin SET name='$_POST['firstName'], mainContent='$_POST['mainText']' WHERE id='$_POST['id']'";
    

    如果您随后将 $id 变量放在表单中的隐藏输入字段中,该文件也会将其拾取。

    只是一个快速的回答,因为我出去吃午饭了。

    【讨论】:

    • 嗨,我已经在我的代码中尝试过这个,但似乎没有在 Dreamweaver 中执行。代码中的某处似乎有错误。
    • 对不起,我很着急。我刚刚意识到您已将 $_POST 分配给 sql 上方的两个变量,但是您最好转义这些值。也正如其他人所说,你有两个;
    • 嗨,Ashley,是的,我确实有两个 POST 变量,您能想到其他修复方法吗?我使用了 mysql 转义,没有任何区别,只是没有更新我的数据库。
    • 阿什利,我还有另一个问题,您似乎在帮助我:当我将行更改为:$sql="UPDATE admin SET name='$firstName', mainContent='$mainText' WHERE id='1'"; id为1,信息立即更新..
    【解决方案3】:

    这只是update_ac.php中的语法错误

    您在以下行中使用了 2 个分号

    $result=mysql_query($sql) or die(mysql_error());;
    

    【讨论】:

    • 谢谢你,从来没有注意到它!不幸的是,提交时我没有收到错误,它根本不会更新我在 SQL 中的表,不过感谢您的提醒!
    • 由于页面是空的,感觉只是语法错误。尝试添加一个标签,看看是否有效。如果无效,您可以确认脚本中的错误。我不知道为什么不显示错误。
    • 我已经修复了这两个错误,但不幸的是仍然无法正常工作,我需要做的就是使用 Update sql 方法更新数据库
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 2013-12-06
    • 2016-04-27
    • 1970-01-01
    • 2017-08-09
    相关资源
    最近更新 更多