使用按钮将PHP插入MySQL

使用按钮将PHP插入MySQL,php,html,mysql,forms,mysqli,Php,Html,Mysql,Forms,Mysqli,我有一个表单,它有两个不同的操作,一个删除对应的MySQL行,另一个保存到另一个数据库。删除功能可以正常工作,但保存功能不能正常工作。我有点不知所措到底是怎么回事,任何帮助都是感激的 这是保存/删除代码: if (isset($_POST['save'])) { include('publishmod.php'); } elseif (isset($_POST['delete'])) { include('deleterequest.php'); } else { } whil

我有一个表单,它有两个不同的操作,一个删除对应的MySQL行,另一个保存到另一个数据库。删除功能可以正常工作,但保存功能不能正常工作。我有点不知所措到底是怎么回事,任何帮助都是感激的

这是保存/删除代码:

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

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

// Query
如果省略了陈述,那么问题就不重要了。表格如下:

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>";
省略了简单的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();
谢谢是预付款

更新:

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

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

// Query
目前尚未找到解决方案,但以下是迄今为止与人们的修复/建议不同的更改:

  • 修复了不匹配的$POST值(感谢gfrobenius
  • 修复了先前代码中的错误,该代码是if语句,并已转换 到正则变量(多亏了Arian
  • 在查询中的值之间添加了缺少的单引号(感谢damok6

不确定您是否为了保持问题简短而修改了表单,但我没有看到您试图插入的任何$\u POST变量。因此,这可能是错误的,因为这些$u POST变量不存在,并且根据您的错误设置,您可能看不到错误

--更新-- 让我们一次排除一件小事。请尽快用这一行替换您的
$stmt->bind_param
行,然后试试看是否有任何内容

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

我能很快看到的一个问题是

$stmt->bind_param("sssssssiii", $_POST[title], $desc, $url, $keywords, $_POST[type], $_POST[mod_url], $_POST[developer], $_POST[v162], $_POST[v164], $_POST[v172]);
缺少$\u 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个参数。

在prepare语句的末尾有一个额外的
){
,它应该是

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

修正了这个问题,谢谢,但仍然没有解决方案。很酷。你介意用这个修正修改原来的问题,以防止其他人向我提供类似的冗余答案吗:)我在计算所有部分的10。添加了表单的其余部分,现在应该更清楚一些。是否有其他代码将这些div转换为字段?因为我我看不到您尝试插入的$\u POST变量。我建议在插入之前执行var\u dump($\u POST);die();并确保它们都存在。示例:您尝试插入“developer”,但隐藏的变量名为“dev”。好的,更新了一些不匹配的内容,如果您看到其他任何内容,请告诉我。好的,关闭了行,仍然没有创建行,我还让它打印了任何错误,但它没有。当我从if语句中更改它时,错过了它,谢谢,但保存仍然不顺利。您应该真正将代码发布到您的文件中,而不是changi在将其发布到这里之前将其删除…如果您在SOI上发布它时更改了许多内容,我们将找不到错误。我很难相信,因为您的prepare语句末尾有两个括号(
);
这将生成一个易于看到的php错误。请尝试使用print\r($mysqli->errorInfo());在execute之后,查看pdo语句是否产生错误。@ssergei在
$stmt->execute();
之前添加了一个错误,在
$stmt->close()之后没有显示错误
另外,仍然没有错误。我仍然不排除由于某种原因没有运行该语句,但据我所知,该语句似乎正在执行。请在执行之后但在关闭之前添加它。@ssergei yes,首先尝试了,没有打印任何错误。如果没有看到错误,并且没有看到记录,则d插入,然后确保代码被访问似乎是合乎逻辑的。在$mysqli->prepare之前放置一个var_dump($\u POST);die();如果您看到任何内容,请告诉我们。然后尝试我在下面更新的答案中提出的建议。