[英]Impossible to update table php-mysql
我正在嘗試制作一種簡單的方法來更新課堂作業的表格,但它根本不起作用。 我看了很多時間我的代碼,但我找不到錯誤是什么。
下面是我的代碼的步驟:
之后我有一個 IF 用戶存在,顯示另一個表單,您可以在其中編輯此用戶信息。 但似乎我的更新表不起作用。
$sql="更新 $tbl_name SET nom=$Nom, login=$login, motdepasse=$MotDePasse, niveauacces=$NiveauAcces WHERE login=$login";
$result=mysql_query($sql);
如果用戶不存在,則會收到錯誤消息。
問題是我的表在點擊更新表時沒有更新,它直接進入錯誤(否則)。
Bellow 是我要導入 wamp phpMyAdmin 的表。
http://gavitex.com/share/85tn5rigs
數據庫名稱:用戶
表名: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']))
的條件,因為它是內部的其他條件else {}
的的第一個條件if(isset($_POST["login"]) ...)
。
並且mysql_*
已被棄用,因此我們建議您使用mysqli_*
。
我建議將您的文件分成..hmm..至少六(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>
頁腳.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';"
我省略了elogin=$login,
它已經在 where 子句中使用了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.