简体   繁体   English

HTML表单发送了错误的数据库ID PHP

[英]HTML form sends the wrong database ID PHP

I made a user system for my website. 我为我的网站制作了一个用户系统。 If you open it you well see a list of all users and you can lock or unlock them by changing "n_gesperrt" in the database to 1 or 0. 1 means locked. 如果打开它,您会很好地看到所有用户的列表,可以通过将数据库中的“ n_gesperrt”更改为1或0来锁定或解锁它们。1表示已锁定。 The form you see here is always sending the last user id (n_id) to the php script on the top. 您在此处看到的表单始终会将最后一个用户ID(n_id)发送到顶部的php脚本。 So if I want to change something it only works with the last user shown on the list. 因此,如果我想更改某些内容,则只能与列表中显示的最后一个用户一起使用。 How can I solve that problem? 我该如何解决这个问题? These are the code pieces: 这些是代码段:

THE FORM: 表格:

    while ($zeile = mysqli_fetch_assoc($res))
 {  
echo "<form name=\"nutzer_sperren\" method=\"POST\" action=\"index.php?page=nutzer_sperren\">";
    echo "<input type=\"hidden\" name=\"n_id\" value=\"".$zeile['n_id']."\">";
    echo $zeile['n_id'];
        if($zeile['n_gesperrt'] == 0){
            echo "<input type =\"submit\" name=\"sperren\" value=\"Nutzer sperren\">";
        }
        else {
            echo "<input type =\"submit\" name=\"entsperren\" value=\"Nutzer entsperren\">";
        }
    echo '</form">';    

THE EDITING IN DATABASE: 数据库中的编辑:

        if(isset($_POST['sperren']))
{   
    $sperrung = mysqli_real_escape_string($verbinde, 1);
    mysqli_query($verbinde, 'UPDATE nutzer SET n_gesperrt ="'.$sperrung.'" WHERE n_id ='.$_POST["n_id"].'') or die(mysqli_error($verbinde));
    echo "Daten wurden erfolgreich geändert. <br>Bitte aktualisieren Sie die Seite!";
    echo $_POST["n_id"];
    echo "<hr>";
}



if(isset($_POST['entsperren']))
{
    $entsperren = mysqli_real_escape_string($verbinde, 0);
    mysqli_query($verbinde, 'UPDATE nutzer SET n_gesperrt ="'.$entsperren.'" WHERE n_id ='.$_POST["n_id"].'') or die(mysqli_error($verbinde));
    echo "Daten wurden erfolgreich geändert. <br>Bitte aktualisieren Sie die Seite!";
    echo $_POST["n_id"];
    echo "<hr>";
}

bro use name as array like below and you will get your result in array 兄弟使用名称作为数组,如下所示,您将在数组中获得结果

     while ($zeile = mysqli_fetch_assoc($res))
     {  
    echo "<form name=\"nutzer_sperren\" method=\"POST\" action=\"index.php?page=nutzer_sperren\">";
        echo "<input type=\"hidden\" name=\"n_id[]\" value=\"".$zeile['n_id']."\">";
        echo $zeile['n_id'];
            if($zeile['n_gesperrt'] == 0){
                echo "<input type =\"submit\" name=\"sperren[]\" value=\"Nutzer sperren\">";
            }
            else {
                echo "<input type =\"submit\" name=\"entsperren[]\" value=\"Nutzer entsperren\">";
            }
        echo '</form">';

on submission page get value like $name=$_POST['entsperren']; 在提交页面上获得$ name = $ _ POST ['entsperren']之类的值;

print_r($name);

There are few things you need to change in your code, such as: 您几乎不需要在代码中进行任何更改,例如:

  • ... The form you see here is always sending the last user id (n_id) to the php script on the top. ...您在此处看到的表单始终会将最后一个用户ID(n_id)发送到顶部的php脚本。 So if I want to change something it only works with the last user shown on the list. 因此,如果我想更改某些内容,则只能与列表中显示的最后一个用户一起使用。

    That's because you've assigned the same name attribute for all of your hidden input elements. 那是因为您为所有隐藏的输入元素分配了相同的name属性。 Change your name attribute in the following way, 通过以下方式更改您的name属性,

     ... name='n_id[]' ... 
  • Change the name attribute of submit elements to just submit , because in this way you don't have to use two separate if blocks to handle user's response. Submit元素的name属性更改为submit ,因为这样您就不必使用两个单独的if块来处理用户的响应。

  • Remove the double quote from echo '</form">'; , otherwise your form would break. echo '</form">';删除双引号,否则您的表单将被破坏。

So your while() loop should be like this: 因此,您的while()循环应如下所示:

while ($zeile = mysqli_fetch_assoc($res)){
    echo "<form method='POST' action='index.php?page=nutzer_sperren'>";
    echo "<input type='hidden' name='n_id[]' value='".$zeile['n_id']."'>";
    if($zeile['n_gesperrt'] == 0){
        echo "<input type ='submit' name='submit' value='Nutzer sperren'>";
    }
    else {
        echo "<input type ='submit' name='submit' value='Nutzer entsperren'>";
    }
    echo '</form>';  
}

Furthermore, as I said above, you don't have to use two separate if blocks, just use one if block to check whether the form is submitted or not and toggle the n_gesperrt column value in your UPDATE operation, like this: 此外,如上所述,您不必使用两个单独的if块,只需使用一个if块来检查是否提交了表单,并在UPDATE操作中切换n_gesperrt列值,如下所示:

if(isset($_POST['submit'])){
    mysqli_query($verbinde, 'UPDATE nutzer SET n_gesperrt = IF(n_gesperrt = 1, 0, 1) WHERE n_id ='.$_POST["n_id"][0]) or die(mysqli_error($verbinde));
    echo "Daten wurden erfolgreich geändert. <br>Bitte aktualisieren Sie die Seite!";
} 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM