【问题标题】:PHP code not updating form values to databasePHP代码没有将表单值更新到数据库
【发布时间】:2015-06-26 12:16:16
【问题描述】:

我的数据库中有一个示例数据,我试图在表单提交中用我的数据覆盖,主键 PageID 设置为 0,据我所知,我的查询是正确的,提交时我没有错误,只是没有数据进入数据库。这是整个 PHP 文档。

<?php
if(isset($_POST['update'])){
  $pageid = 0; 

 $dbc = @mysqli_connect ('localhost', 'elinksw_ju1ez', '*******', 'elinksw_ju1ez') OR die ('<p class="error">Cannot connect to the database.</body></html>');

 $q = "UPDATE tblContent SET PageHeading='$_POST[PageHeading]' ,SubHeading='$_POST[SubHeading]' ,Content='$_POST[Content]' ,PageTitle='$_POST[PageTitle]' ,MetaDescription='$_POST[MetaDescription]' ,MetaKeywords='$_POST[MetaKeywords]'  WHERE PageID='$pageid'";
 $r = mysqli_query($dbc, $q);
mysqli_close($dbc);

 }
?>
<html>
<head>
<link rel="stylesheet" type="text/css" href="./includes/adminStyle.css">
<title>Administration - Edit content</title>
</head>

<body>
<header>
<h1>Edit Content</h1>
<h2>Welcome Administrator</h2>
</header>

<nav>
<a href="admin.php" class="myButton">Manage Homepage</a><br>
<a href="admin.php" class="myButton">Manage Products</a><br>
<a href="admin.php" class="myButton">Manage Contacts</a><br>
</nav>

<section>
<h2>Manage Homepage</h2>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

<table width="300" cellpadding="2" cellspacing="2">
    <tr>
    </tr>
    <tr>
        <td>Page Heading:</td>
        <td><input type="text" name="PageHeading"></td> </tr>
    <tr>
        <td>Sub Heading:</td>
        <td><input type="text" name="SubHeading"></td>  </tr>
    <tr>
        <td>Page Title:</td>
        <td><input type="text" name="PageTitle"></td>   </tr>
    <tr>
        <td>MetaDescription:</td>
        <td><textarea style="width:300px;" cols="55" rows="5" name="MetaDescription"></textarea></td>   </tr>
    <tr>
        <td>MetaKeywords:</td>
        <td><input type="text" name="MetaKeywords"></td>    </tr>
    <tr>
        <td>Content:</td>
        <td><textarea style="width:300px;" cols="55" rows="5" name="Content"></textarea></td>   </tr>
    <tr>
        <td><input type="submit" name="update" value = "Update Database"></td>  </tr>

</section>
</form>
</body> 
</html>

这是数据库中的表

【问题讨论】:

  • 您是否尝试过回显任何错误 - 即。 $r = mysqli_query($dbc, $q) or die(mysqli_error($dbc));?
  • 您应该使用$_POST['PageHeading'] 而不是$_POST[PageHeading]。此外,您的查询容易受到 sql 注入的影响。
  • 我检查了错误并回显了结果,没有任何显示。所以我认为这可能是一个连接问题,如果连接读取成功,则连接已建立并且确实如此。就像没有数据输出或读取到该数据库一样。
  • 如果您的任何$_POST 值包含单引号',那么您的查询将失败。至少你想使用mysqli_real_escape_string(),最好是使用准备好的语句php.net/manual/en/mysqli.quickstart.prepared-statements.php
  • @kidA 如果 OP 添加了单引号,他们还需要添加括号 {},因为它们会在双引号内出现语法错误 - {$_POST['PageHeading']}

标签: php html mysqli


【解决方案1】:

首先,您的代码很危险,容易受到注入攻击,您必须过滤和转义您的 $_POST 变量 (http://corpocrat.com/2009/07/28/filtering-escaping-post-data-from-injection-attacks)

掌握正在发生的事情的快速而肮脏的解决方案将涉及:

$PageHeading = mysqli_real_escape_string($dbc, $_POST['PageHeading']);
$subHeading = mysqli_real_escape_string($dbc, $_POST['SubHeading']);
$Content = mysqli_real_escape_string($dbc, $_POST['Content']);
$PageTitle = mysqli_real_escape_string($dbc, $_POST['PageTitle']);
$MetaDescription = mysqli_real_escape_string($dbc, $_POST['MetaDescription']);
$MetaKeywords = mysqli_real_escape_string($dbc, $_POST['MetaKeywords']);
$q = "UPDATE tblContent SET PageHeading='$PageHeading' ,SubHeading='$SubHeading' ,Content='$Content' ,PageTitle='$PageTitle' ,MetaDescription='$MetaDescription' ,MetaKeywords='$MetaKeywords'  WHERE PageID='$pageid'";
$r = mysqli_query($dbc, $q) or die(mysqli_error($dbc)); //remove this on production

【讨论】:

  • OP 的 mysqli_* 与您的 mysql_*/mysql_real_escape_string() 不匹配。
  • mysqli_real_escape_string() 需要 db 链接作为第一个参数 - mysqli_real_escape_string($dbc, $_POST['PageHeading']);mysql_real_escape_string php.net/manual/en/mysqli.real-escape-string.php 相对应
  • 哎哟....太习惯了OO版本 $dbc->real_escape_string($string); :(再次感谢
  • 我仍然想知道这是否是解决她问题的实际解决方案。即使输入的字符串不带引号,这是否可行?
  • 我一直在努力尝试修复查询,但我并没有真正解决其余的问题,而忽略了一个简单的问题。试图让它保持简单,直到我让它插入值,这样我就知道什么是行不通的。但是我对此进行了测试,并且效果很好,非常感谢。我的查询是单引号。 PageHeading='$_POST[PageHeading]' 应该是 PageHeading=$_POST['PageHeading']。多看几遍。泰泰
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
相关资源
最近更新 更多