【发布时间】: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->execute();之前没有报错,单独$stmt->close();之后依旧没有报错。我仍然不排除该语句由于某种原因没有运行,但据我所见,该语句似乎正在执行。 -
在执行后关闭前添加。
-
@ssergei 是的,先尝试过,没有打印任何错误。
-
如果您没有看到错误并且没有看到插入的记录,那么确保甚至可以访问代码似乎是合乎逻辑的。放一个 var_dump($_POST);死();在您的 $mysqli->prepare... 之前立即告诉我们您是否看到任何内容。然后尝试我在下面更新的答案中的建议。
标签: php html mysql forms mysqli