无法更新php-mysql表


Impossible to update table php-mysql

我正在尝试一种简单的方法来更新类的表,但它根本不起作用。我看了很多次我的代码,但我找不到错误是什么。

Bellow是我的代码的步骤:

  1. 会话启动
  2. 我有一个带有登录用户名和密码的表格
  3. PHP服务器登录
  4. 验证用户(我在网上找到了这个代码,所以可能有一个更简单的方法)
  5. 之后,我有一个IF用户存在,显示另一个表单,在那里你可以编辑这个用户信息。但我的更新表似乎不起作用。

    $sql="UPDATE$tbl_name SET nom=$nom,login=$login,motdepasse=$motdepasse,niveuaacces=$niveauacces WHERE login=$login";

    $result=mysql_query($sql);

  6. 如果用户不存在,则会得到一个错误。

问题是,当点击更新表时,我的表没有更新,它直接导致了错误(否则)。

Bellow是我要导入到wamp phpMyAdmin中的表。

http://gavitex.com/share/85tn5rigs

数据库名称:usagers

表名:TableUsagers(将自动)

 <?php
 session_start();
 ob_start( );
 ?>
 <!DOCTYPE HTML>
 <html>
 <head>
 <meta charset="UTF-8">
 <title>Exercice 2</title>
 </head>
 <body>
 <?php
 if (empty($_POST["login"])||empty($_POST["motdepasse"])) {
 ?>
    <form action="#" method="post">
    <!--Nom : <input name="nom"><br>-->
    Utilisateur : <input name="login"><br>
    Mot de passe : <input name="motdepasse"><br>
    <!--niveau d'accès : <select name="niveauacces">
                        <option value="1">Invité</option>
                        <option value="2">Usager</option>
                        <option value="3">Administrateur</option>
                    </select><br>-->
    <input type="submit" name="Entrer" value="Entrer">
    </form>
  <?php
  }else{
  $host="localhost"; // Host name 
  $username="root"; // Mysql username 
  $password=""; // Mysql password 
  $db_name="usagers"; // Database name 
  $tbl_name="tableusagers"; // Table name
  // Get values from form 
  $login=$_POST['login'];
  $MotDePasse=$_POST['motdepasse'];

  // Connect to server and select database.
  mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
  mysql_select_db("$db_name")or die("cannot select DB");
  /* Verify if user exist */
  $requete = "select login, motdepasse from $tbl_name where login='$login' AND motdepasse ='$MotDePasse'";
  $verif = mysql_query($requete) or die(mysql_error());
  $row_verif = mysql_fetch_assoc($verif);
  $user = mysql_num_rows($verif);

  if($user){
      echo "Modifier des informations :<br>
      <form action='#' method='post'>
      Nom : <input name='nom'><br>
      Utilisateur : <input name='login'><br>
      Mot de passe : <input name='motdepasse'><br>
      niveau d'accès : <select name='niveauacces'>
                        <option value='1'>Invité</option>
                        <option value='2'>Usager</option>
                        <option value='3'>Administrateur</option>
                    </select><br>
          <input type='submit' name='modifier' value='Modifier'>
          </form>";
        /* Values */        
        if(isset($_POST['modifier'])){
        $Nom=$_POST['nom'];
        $NiveauAcces=$_POST['niveauacces'];
        $login=$_POST['login'];
        $MotDePasse=$_POST['motdepasse'];
        // Update data into mysql 
        $sql="UPDATE $tbl_name SET nom=$Nom, login=$login, motdepasse=$MotDePasse, niveauacces=$NiveauAcces WHERE login=$login";
        $result=mysql_query($sql);
        }

  }else{
      echo "error";
  }
  mysql_close();
  }
  ?> 

  </body>
  </html>

您的更新不起作用,因为您没有将变量正确绑定到查询。将字符串绑定到查询时使用(')。仅当变量的值为整数时,对变量不使用(')才有效。

$sql = "UPDATE ".$tbl_name."
            SET nom='$Nom',
                login='$login',
                motdepasse='$MotDePasse',
                niveauacces='$NiveauAcces'
            WHERE login='$login'";

在将变量绑定到查询之前,请确保至少使用*_real_escape_string() 来清除该值

$Nom = mysql_real_escape_string($_POST['nom']);
$NiveauAcces = mysql_real_escape_string($_POST['niveauacces']);
$login = mysql_real_escape_string($_POST['login']);
$MotDePasse = mysql_real_escape_string($_POST['motdepasse']);

问题:

提交编辑表单后,它不会进入if(isset($_POST['modifier']))条件,因为它在第一个条件if(isset($_POST["login"]) ...)的其他条件else {}中。

并且mysql_*已经被弃用,因此我们建议您使用mysqli_*

建议:

我建议把你的文件分成。。嗯。至少六(6)个文件。

让我们先分别为页眉(header.php)和页脚(footer.php):

header.php所以当你必须更改标题时,你不必编辑每个文件):

<?php
    session_start();
    ob_start( );
    include("conn.php");
?>
<!DOCTYPE HTML>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Exercice 2</title>
    </head>
    <body>

footer.php

    </body>
</html>

然后您的登录页面(login.php):

<?php 
    if(isset($_SESSION["login"])){ /* IF USER IS ALREADY LOGGED IN */
        header("edit.php"); /* REDIRECT TO HOME PAGE */
    }
    include("header.php");
?>
<form action="process.php" method="post">
    Utilisateur : <input type="text" name="login"><br>
    Mot de passe : <input type="password" name="motdepasse"><br>
    <input type="submit" name="Entrer" value="Entrer">
</form>
<?php include("footer.php"); ?>

以及您的编辑页面(edit.php):

include("header.php");
echo 'Modifier des informations :<br>
    <form action="process.php" method="post">
        Nom : <input name="nom"><br>
        Utilisateur : <input type="text" name="login"><br>
        Mot de passe : <input type="password" name="motdepasse"><br>
        niveau d''accès : <select name="niveauacces">
                             <option value="1">Invité</option>
                             <option value="2">Usager</option>
                             <option value="3">Administrateur</option>
                         </select><br>
        <input type="submit" name="modifier" value="Modifier">
    </form>';
include("footer.php");

然后让我们建立与数据库的连接(conn.php):

$con = new mysqli("localhost", "root", "", "usagers");
/* CHECK CONNECTION */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s'n", mysqli_connect_error());
    exit();
}

然后让我们有一个页面来处理所有提交的表单(process.php):

session_start();
include("conn.php");
if(isset($_POST["Entrer"])){ /* PROCESS LOGIN FORM */
    $stmt = $con->prepare("SELECT login, motdepasse FROM tableusagers WHERE login = ? AND motdepasse = ?"); /* PREPARE YOUR QUERY */
    $stmt->bind_param("ss", $_POST["login"], $_POST["motdepasse"]); /* BIND THESE TWO VARIABLES TO YOUR QUERY; s STANDS FOR STRING */
    $stmt->execute(); /* EXECUTE THE PREPARED QUERY */
    $stmt->store_result(); /* FOR THE PURPOSE OF GETTING THE NUMBER OF RESULTS */
    if($stmt->num_rows > 1){ /* CHECK IF ROW RESULTS IS MORE THAN ONE */
        $_SESSION["login"] = $_POST["login"]; /* STORE LOGIN DATA TO A SESSION VARIABLE */
        header("LOCATION:edit.php"); /* REDIRECT TO HOME OR EDIT PAGE */
    } else {
        header("LOCATION:login.php"); /* REDIRECT BACK TO LOGIN PAGE */
    }
    $stmt->close(); /* CLOSE PREPARED STATEMENT */
}
else if(isset($_POST["modifier"])){ /* PROCESS EDIT FORM */
    $stmt = $con->prepare("UPDATE tableusagers SET login = ?, motdepasse = ?, niveauacces = ? WHERE login = ?");
    $stmt->bind_param("ssis", $_POST["login"], $_POST["motdepasse"], $_POST["niveauacces"]), $_SESSION["login"]);
    $stmt->execute();
    $stmt->close();
    header("LOCATION:edit.php"); /* REDIRECT BACK TO EDIT PAGE */
}
else {
    header("LOCATION:login.php");
}

尝试将散列密码存储在数据库中以提高安全性。检查php的password_hash()

这种方法有点极端,但我认为它仍然有效。因此,我建议您阅读更多关于面向对象编程(OOP)的内容,或者尝试不同的库(CodeIgniter、Laravel等)。

这一行似乎不正确:

$sql="UPDATE $tbl_name SET nom=$Nom, login=$login, motdepasse=$MotDePasse, niveauacces=$NiveauAcces WHERE login=$login"

试试这个:

$sql="UPDATE $tbl_name SET nom='$Nom', motdepasse='$MotDePasse', niveauacces='$NiveauAcces' WHERE login='$login';"

我省略了已经在where子句中使用的elogin=$login,