我没时间从表单更新多个表。我已经完成了查询并使用(或死掉)检查了错误,但似乎我的MySQL代码中没有错误。我可以更新主表的数据,但我无法更新其他表。我怀疑我的表单字段有问题。这是我的表格代码:
<?php
$sql= "SELECT * FROM client WHERE resID=".$_GET["resID"];
$rs = mysql_query($sql) or die($sql."<br/><br/>".mysql_error());
$sqlM= "SELECT * FROM menu WHERE resID=".$_GET["resID"];
$rsM = mysql_query($sqlM) or die($sqlM."<br/><br/>".mysql_error());
$i = 0;
echo '<table width="50%">';
echo '<tr>';
echo '<td>ID</td>';
echo '<td>Name</td>';
echo '<td>Edit</td>';
echo '</tr>';
echo "<form name='form_update' method='post' action='client_admin_post.php'>\n";
$f=mysql_fetch_array($rs);echo '<tr>';
echo "<td>Res ID :</td>";
echo "<td>{$f['resID']}<input type='hidden' name='resID' value='{$f['resID']}' /></td>";
echo '</tr>';
++$i;
echo '<tr>';
echo "<td>Restaurant Name :</td>";
echo "<td><input type='text' size='40' name='resName' value='{$f['resName']}' /></td>";
echo '</tr>';
++$i;
while ($fM = mysql_fetch_array($rsM)) {
echo '<tr>';
echo "<td>Menu :</td>";
echo "<td><input type='text' size='40' name='mname[$i]' value='{$fM['name']}' /></td>";
echo "<td>{$fM['id']}<input type='hidden' name='mid[$i]' value='{$fM['id']}' /></td>";
echo '</tr>';
++$i;
}
echo '<tr>';
echo "<td><input type='submit' value='submit' /></td>";
echo '</tr>';
echo "</form>";
echo '</table>';
?>
这是我的POST代码:
<?php
//session_start();
include_once("connection.php");
$resID= $_POST["resID"];
$resName= $_POST["resName"];
$sql = "UPDATE client ".
"SET resName = '$resName' ".
"WHERE resID = '$resID' " ;
mysql_query($sql) or die ('query failed:' . mysql_error());
$size = count($_POST['mname']);
$i = 0;
while ($i < $size) {
$name= $_POST['mname'][$i];
$id = $_POST['mid'][$i];
$sqlM = "UPDATE menu SET name = '$name' WHERE id = '$id' LIMIT 1";
mysql_query($sqlM) or die ("Error in query: $sqlM");
echo "$name<br /><br /><em>Updated!</em><br /><br />";
++$i;
}
?>
众所周知,一家餐馆有很多菜单。我可以编辑主餐厅信息,但我无法编辑菜单。请帮我。非常感谢您的帮助。谢谢:D
答案 0 :(得分:0)
在输出$ mname索引之前,你至少两次+ $ i。所以$ _POST ['mname']会有索引2 .. count_of_rows + 1。你的while()会忽略这个事实并计算0 .. size。
如果您打开了所有警告(正如您所做的那样),您将收到一条警告,指示无效索引0在线路上使用“$ name = $ _POST ...”并且您可以从中找出那里。