无法将文本框中的值更新为数据库

问题描述:

我无法将新价格更新到数据库中。数据库不会更新。我不确定我的代码出错了。无法将文本框中的值更新为数据库

while($row = mysqli_fetch_assoc($result)) { 
    echo "<tr>"; 
    echo "<td>" . $row['Menu_id']. " </td>"; 
    echo "<td>" . $row['Menu_type']. " </td>"; 
    echo "<td>" ."<input type =text name=Price value =" .$row['Price']. " </td>";       
    echo "<td>" ."<input type=submit name=Update value=Update"." </td>"; 
    echo "<td>" ."<input type =hidden name=hidden value = " .$row['Menu_id']. " </td>"; 

    echo "</tr>"; 
} 

echo "</table>"; 

} 


if(isset($_POST['Update'])){ 

    $sqlAdd = "UPDATE Menu SET Price ='$_POST[Price]' WHERE Menu_id ='$_POST[hidden]'"; 
    $result = mysqli_query($con, $sqlAdd); 

    if(mysqli_query($con, $sqlAdd)){ 
    echo '<p><strong><font color = "red">The price for Menu id '.$Menu_id.' is updated.</strong></font>'; 
    //redirect page 
    header('Refresh :5 ; url = UpdateMenuPrice.php'); 

    } 
    else { 
    echo "failed <br>"; 
    } 

价格未更新。

+0

这真的是最小的代码示例?听起来像你可以限制它执行SQL查询的两行(如果你确定这两行被执行,你可以通过在前面和后面添加一些输出语句来检查) – hoijui

+0

这里有一些一般说明:'' $ _POST [Price]'_probably_应该是'$ _POST ['Price']'或者甚至是'$ _POST ['price']',除非你已经为'$ _POST [hidden]'定义了一个常量'Post'。然后,您肯定应该开始阅读关于“sql注入”的危险以及如何使用“准备好的语句”来防止您使用该代码所面临的危险。 – arkascha

您忘记了右括号以及您的查询格式不正确。

echo "<td>" ."<input type =text name=Price value =" .$row['Price']. "></td>";       
        echo "<td>" ."<input type=submit name=Update value=Update >"." </td>"; 
        echo "<td>" ."<input type =hidden name=hidden value = " .$row['Menu_id']. "> </td>"; 

使用$ _REQUEST,$ _POST,$ _GET时必须使用单引号。
以下是您的查询。

$sqlAdd = "UPDATE Menu SET Price ='".$_POST['Price']."' WHERE Menu_id ='".$_POST['hidden']."'"; 

+0

我觉得我不能得到价格收件箱的价值。代码有什么问题吗? –

+0

您在表单中使用哪种方法意味着**发布**或**获得**。我认为这可能是问题。什么是** $ Menu_id **,我的意思是你分配了任何值** $ Menu_id **或不? –

+0

它使用

忘记关闭每个输入元素的尖括号。

你也应该引用你的HTML表单值。您可以使用一个反斜线双引号,单引号,或作出这里用定界符语法:

while($row = mysqli_fetch_assoc($result)) { 
    echo <<<HTML 
    <tr> 
     <td>{$row['Menu_id']}</td> 
     <td>{$row['Menu_type']}</td> 
     <td><input type="text" name="Price" value="{$row['Price']}"></td> 
     <td><input type="submit" name="Update" value="Update"></td> 
     <td><input type="hidden" name="hidden" value="{$row['Menu_id']}"></td> 
    </tr> 
HTML; 
} 

echo "</table>"; 

你在更新部分$ _ POST变量不应该用引号括起来,而应该有单引号方括号(与上面的$ row数组显示的方式相同)。

最后,用你的代码很容易让别人破解你的数据库来读取你所有的数据库数据,删除它或者改变它。您需要使用预准备语句来防止SQL注入。

+0

如果我关闭每一列都会有菜单> –