【问题标题】:PHP Insert into MySQL with buttonPHP 使用按钮插入 MySQL
【发布时间】:2013-12-27 16:33:50
【问题描述】:

我有一个表单,它有两个不同的动作,一个是删除相应的 MySQL 行,另一个是保存到另一个数据库。删除功能工作正常,但保存功能不行。我有点不知所措到底出了什么问题,感谢任何帮助!

这是保存/删除代码:

if (isset($_POST['save'])) {
    include('publishmod.php');
} elseif (isset($_POST['delete'])) {
    include('deleterequest.php');
} else {
}

while ($row = mysqli_fetch_assoc($result)) {

如果语句被省略,问题不重要。这是表格:

echo "<form name=\"editmod\" id=\"editmod\" method=\"post\">";
   echo "<tr class='modlist'>";
   echo "<td>".$row['id']."</td>";
   echo "<td><div class=\"edit\" id=\"div_1\">".$row['title']."</div></td>";
   echo "<td><div class=\"edit\" id=\"div_2\"><a href=".$row['mod_url'].">".$row['mod_url']."</a></div></td>";
   echo "<td><div class=\"edit\" id=\"div_3\">".$row['developer']."</div></td>";
   echo "<td><div class=\"edit\" id=\"div_4\">".$row['type']."</div></td>";
   echo "<td><div class=\"edit\" id=\"div_5\">".$v162."$nbsp".$v164."$nbsp".$v172."</div></td>";
   echo "<td><div class=\"edit\" id=\"div_6\">".$row['title'].",$nbsp".$row['developer']."</div></td>";
   echo "<td><input type=\"submit\" name=\"save\" value=\"Save\" id=\"save\"></td>";
   echo "<td><input type=\"submit\" name=\"delete\" value=\"Delete\" id=\"delete\"></td>";
   echo "</tr>";
   echo '<input type="hidden" name="title" value="', htmlspecialchars($row['title'], ENT_QUOTES, 'UTF-8'), '" />';
   echo '<input type="hidden" name="mod_url" value="', htmlspecialchars($row['mod_url'], ENT_QUOTES, 'UTF-8'), '" />';
   echo '<input type="hidden" name="developer" value="', htmlspecialchars($row['developer'], ENT_QUOTES, 'UTF-8'), '" />';
   echo '<input type="hidden" name="type" value="', htmlspecialchars($row['type'], ENT_QUOTES, 'UTF-8'), '" />';
   echo '<input type="hidden" name="v162" value="', htmlspecialchars($row['v162'], ENT_QUOTES, 'UTF-8'), '" />';
   echo '<input type="hidden" name="v164" value="', htmlspecialchars($row['v164'], ENT_QUOTES, 'UTF-8'), '" />';
   echo '<input type="hidden" name="v172" value="', htmlspecialchars($row['v172'], ENT_QUOTES, 'UTF-8'), '" />';
   echo '<input type="hidden" name="id" value="', htmlspecialchars($row['id'], ENT_QUOTES, 'UTF-8'), '" />';
   echo "</form>";

是的,我知道它存在一些 HTML 标记问题,稍后会处理。

publishmod.php(保存页面)代码:

$title = $_POST['title'];
$desc = "HowToInstallMods.com installation tutorial for '.$title.'";
$url = ereg("^[A-Za-z_\-]+$", $title) + ".php";
$keywords = "'.$title.','.$_POST['developer'].'";

// Query

省略了简单的 MySQLi 连接和错误检查。

$stmt = $mysqli->prepare("INSERT INTO search (title, description, url, keywords, type, mod_url, developer, v162, v164, v172) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("sssssssiii", $_POST['title'], $desc, $url, $keywords, $_POST['type'], $_POST['mod_url'], $_POST['developer'], $_POST['v162'], $_POST['v164'], $_POST['v172']);
$stmt->execute();
$stmt->close();

先谢谢了。

更新:

尚未找到解决方案,但以下是迄今为止人们的修复/建议所做的更改:

  • 修复了不匹配的 $_POST 值(感谢 gfrobenius
  • 修复了之前代码中的错误,即 if 语句,并转换 到常规变量(感谢Arian
  • 在查询中的值之间添加了缺少的单引号(感谢 damok6

【问题讨论】:

  • 尝试使用 print_r($mysqli->errorInfo());在执行之后查看pdo语句是否产生错误。
  • @ssergei 补充说$stmt-&gt;execute();之前没有报错,单独$stmt-&gt;close();之后依旧没有报错。我仍然不排除该语句由于某种原因没有运行,但据我所见,该语句似乎正在执行。
  • 在执行后关闭前添加。
  • @ssergei 是的,先尝试过,没有打印任何错误。
  • 如果您没有看到错误并且没有看到插入的记录,那么确保甚至可以访问代码似乎是合乎逻辑的。放一个 var_dump($_POST);死();在您的 $mysqli->prepare... 之前立即告诉我们您是否看到任何内容。然后尝试我在下面更新的答案中的建议。

标签: php html mysql forms mysqli


【解决方案1】:

我可以很快看到的一个问题是这条线

$stmt->bind_param("sssssssiii", $_POST[title], $desc, $url, $keywords, $_POST[type], $_POST[mod_url], $_POST[developer], $_POST[v162], $_POST[v164], $_POST[v172]);

缺少 $_POST 变量中键的所有必要引号,应为:

$stmt->bind_param("sssssssiii", $_POST['title'], $desc, $url, $keywords, $_POST['type'], $_POST['mod_url'], $_POST['developer'], $_POST['v162'], $_POST['v164'], $_POST['v172']);

另一个问题是准备好的语句

$stmt = $mysqli->prepare(...)

有 10 个'?',在 bind_param(...) 语句中有 11 个参数。

【讨论】:

  • 已解决,谢谢,但仍然没有解决方案。
  • 酷。您是否介意使用该修复程序修改原始问题,以防止其他人向我提供类似的冗余答案。 :)
  • 所有部分我都数 10。
【解决方案2】:

您的准备​​语句末尾似乎有一个额外的) {,它应该只是一个;

 VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")) {
                                          ^ what is going on here?

【讨论】:

  • 当我从 if 语句中更改它时错过了它,谢谢,但仍然没有保存的运气。
  • 您真的应该将代码发布到您的文件中,而不是在将其发布到此处之前对其进行更改...如果您要更改许多内容以将其发布到 SO 上,我们将找不到该错误
  • 我很难相信,因为同样,您的准备语句末尾有两个括号));,这会产生一个很容易看到的 php 错误。
【解决方案3】:

不确定您是否修剪了表单以保持问题简短,但我没有看到您尝试插入的任何 $_POST 变量。所以它可能会出错,因为这些 $_POST 变量不存在,并且根据您的错误设置,您可能看不到错误。

--已更新-- 让我们一次排除一件小事。请尽快用这个替换你的$stmt-&gt;bind_param 行,然后试试看是否有任何东西进入。

$stmt->bind_param("sssssssiii", 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 1, 2, 3);

【讨论】:

  • 添加了表格的其余部分,现在应该更清楚了。
  • 是否有其他代码将这些 div 转换为字段?因为我仍然看不到您尝试插入的 $_POST 变量。我建议做 var_dump($_POST);死();就在您插入之前,并确保它们都存在。示例:您正在尝试插入“开发者”,但您的隐藏名称为“开发者”。
  • 好的,更新了一些不匹配的内容,如果您看到其他内容,请告诉我。
  • 好吧,换行了,仍然没有创建行,我也让它打印任何错误,它没有。
猜你喜欢
  • 2013-08-01
  • 2015-01-18
  • 2014-03-18
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
  • 2014-02-25
相关资源
最近更新 更多