我是PHP的新手。我希望显示警告消息的用户避免输入重复的值,例如用户名,电子邮件和电话号码。
例如,用户想要更改其用户名。当用户在编辑用户名后提交表单时,将显示一条警告消息,指出用户名已被使用或已经存在。
<?php
error_reporting(E_ALL ^ E_NOTICE);
session_start();
include("../config.php");
include("../errors.php");
include("../success.php");
$errors = array();
$successes = array();
if ($_SESSION["uName"]){
if ($_SESSION["uType"] != "admin") {
header("location:../user/dashboard_user.php");
} else if ($_SESSION["uType"] == "admin"){
if(isset($_POST["update"])) {
$fname = $_POST["fname"];
$telno = $_POST["telno"];
$uname = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$password = md5($password);
$sql = "UPDATE users SET fullname = '$fname', telno = '$telno', username = '$uname', email = '$email', password = '$password' WHERE id = '".$_SESSION['uId']."'";
if (mysqli_query($con, $sql)) {
array_push($successes, "Update Success!");
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($con);
}
}
?>
在代码中使用SELECT语句以获得预期结果的正确方法是什么?
答案 0 :(得分:1)
您应该真正处理数据库中的问题:
create unique index idx_username on users(username);
然后在您的代码中执行您要执行的操作,然后简单地进行操作:
define('MYSQL_UNIQUE_CONSTRAINT_VIOLATION', 1062);
if (mysqli_query($con, $sql)) {
array_push($successes, "Update Success!");
} elsif (mysql_errno() == MYSQL_UNIQUE_CONSTRAINT_VIOLATION ) {
echo "Error: username $username is already taken";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($con);
}
这段代码当然是很粗糙的,但是它给了你这个主意。如果您的代码在类中,请使用const
而不是define
。
此外,您的代码非常容易受到SQL注入的攻击。使用参数化查询而不是在sql字符串中使用变量。