Php 每次我刷新页面时,它都会将同一个用户插入到数据库中

Php 每次我刷新页面时,它都会将同一个用户插入到数据库中,php,mysql,Php,Mysql,下面是PHP代码 <?php if(isset($_POST['Murad'])){ $firstname=$_POST['firstname']; $lastname=$_POST['lastname']; $userName=$_POST['username']; $password=$_POST['pwd1']; $userName = stripslashes($userName); $password = stripslashes($password); $email=$_POS

下面是PHP代码

<?php
if(isset($_POST['Murad'])){
$firstname=$_POST['firstname'];
$lastname=$_POST['lastname'];
$userName=$_POST['username'];
$password=$_POST['pwd1'];
$userName = stripslashes($userName);
$password = stripslashes($password);
$email=$_POST['email'];
$mysql_hostname = "localhost";
$mysql_user = "root";
$mysql_password = "123";
$mysql_databse = "websiteusers";
$prefix = "";
$bd = mysqli_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Could not connect database");
$sql = "INSERT INTO websiteusers 
       (fullname,lastname,userName,email,pass) 
       VALUES ( '$firstname', '$lastname','$userName', '$email','$password')";
        mysqli_select_db($bd,'websiteusers');
$retval = mysqli_query($bd,$sql );
if(! $retval )
{
  die('Could not enter data: ');
  return false;
}
else {echo "Entered data successfully\n";
   }

   $usernamecheck=mysqli_query($bd,"SELECT `userName` FROM `websiteusers` 
                             WHERE userName='$userName'");
if(mysqli_num_rows($usernamecheck)>=1){
   echo $userName." is already taken";
 return false;
 }header("Location: Main.php");}

?>

用户在其个人资料页面中注册后,只要刷新该页面,就会再次插入相同的用户名。而且用户名和电子邮件在my dt中是唯一的,它无法插入,并给出一个错误。您现在要做的是在DB中插入一个用户,然后检查该用户是否存在。你必须移动一些代码

$bd = mysqli_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Could not connect database");
 $usernamecheck=mysqli_query($bd,"SELECT `userName` FROM `websiteusers` 
                             WHERE userName='$userName'");
if(mysqli_num_rows($usernamecheck)>=1){
   echo $userName." is already taken";
 } else {
$sql = "INSERT INTO websiteusers 
       (fullname,lastname,userName,email,pass) 
       VALUES ( '$firstname', '$lastname','$userName', '$email','$password')";
        mysqli_select_db($bd,'websiteusers');
$retval = mysqli_query($bd,$sql );
if(! $retval )
{
  die('Could not enter data: ');
}
else {
    echo "Entered data successfully\n";
}
}
    }

这样,您首先检查用户是否已经存在。如果有-您将终止脚本,并且之后的代码不会执行。否则,在数据库中插入一个用户

现在要做的是在数据库中插入一个用户,然后检查该用户是否存在。你必须移动一些代码

$bd = mysqli_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Could not connect database");
 $usernamecheck=mysqli_query($bd,"SELECT `userName` FROM `websiteusers` 
                             WHERE userName='$userName'");
if(mysqli_num_rows($usernamecheck)>=1){
   echo $userName." is already taken";
 } else {
$sql = "INSERT INTO websiteusers 
       (fullname,lastname,userName,email,pass) 
       VALUES ( '$firstname', '$lastname','$userName', '$email','$password')";
        mysqli_select_db($bd,'websiteusers');
$retval = mysqli_query($bd,$sql );
if(! $retval )
{
  die('Could not enter data: ');
}
else {
    echo "Entered data successfully\n";
}
}
    }

这样,您首先检查用户是否已经存在。如果有-您将终止脚本,并且之后的代码不会执行。否则,您将在DB中插入一个用户,您可以在表单成功提交后执行此操作

您可以重置表单

      this.form.reset(); 

将用户重定向到同一页面

重新设置窗体

      this.form.reset(); 

在表单成功提交后调用此函数

您可以在表单成功提交后执行此操作

您可以重置表单

      this.form.reset(); 

将用户重定向到同一页面

重新设置窗体

      this.form.reset(); 
在表单成功提交后调用此操作尝试以下操作:

<?php
    if(isset($_POST['Murad'])) {
        $firstname=$_POST['firstname'];
        $lastname=$_POST['lastname'];
        $userName=$_POST['username'];
        $password=$_POST['pwd1'];
        $userName = stripslashes($userName);
        $password = stripslashes($password);
        $email=$_POST['email'];
        $mysql_hostname = "localhost";
        $mysql_user = "root";
        $mysql_password = "123";
        $mysql_databse = "websiteusers";
        $prefix = "";

        $link = new PDO('mysql:dbhost='.$mysql_hostname.';dbname='.$mysql_database,$mysql_user, $mysql_password);
        $unamecheck = ("SELECT userName FROM websiteusers WHERE userName = :uname");
        $unamecheck = $link->prepare($unamecheck);
        $unamecheck->execute(array(':uname'=>$userName));
        if($unamecheck->rowCount() > 0) {
            echo "Username taken";
            die();
        } else {
            $add = ("INSERT INTO websiteusers (fullname, lastname, userName, email, pass) VALUES (:fname, :lname, :uname, :pass)");
            $add = $link->prepare($add);
            $add->execute(array(':fname'=>$firstname, ':lname'=>$lastname, ':uname'=>$userName, ':pass'=>$password));
            if($add->rowCount() > 0) {
                echo "Registration successful";
                header("Location: Main.php");
            } else {
                echo "Registration failed";
            }
        }
    }
?>
试试这个:

<?php
    if(isset($_POST['Murad'])) {
        $firstname=$_POST['firstname'];
        $lastname=$_POST['lastname'];
        $userName=$_POST['username'];
        $password=$_POST['pwd1'];
        $userName = stripslashes($userName);
        $password = stripslashes($password);
        $email=$_POST['email'];
        $mysql_hostname = "localhost";
        $mysql_user = "root";
        $mysql_password = "123";
        $mysql_databse = "websiteusers";
        $prefix = "";

        $link = new PDO('mysql:dbhost='.$mysql_hostname.';dbname='.$mysql_database,$mysql_user, $mysql_password);
        $unamecheck = ("SELECT userName FROM websiteusers WHERE userName = :uname");
        $unamecheck = $link->prepare($unamecheck);
        $unamecheck->execute(array(':uname'=>$userName));
        if($unamecheck->rowCount() > 0) {
            echo "Username taken";
            die();
        } else {
            $add = ("INSERT INTO websiteusers (fullname, lastname, userName, email, pass) VALUES (:fname, :lname, :uname, :pass)");
            $add = $link->prepare($add);
            $add->execute(array(':fname'=>$firstname, ':lname'=>$lastname, ':uname'=>$userName, ':pass'=>$password));
            if($add->rowCount() > 0) {
                echo "Registration successful";
                header("Location: Main.php");
            } else {
                echo "Registration failed";
            }
        }
    }
?>


您可能希望查看POST/Redirect/GET模式,即。或者您可能希望查看POST/Redirect/GET模式,即。或者,如果mysqli_num_rows$usernamecheck>=1mysqli_num_rows期望参数1为mysqli_result,则此行会出现错误,第18行C:\AppServ\www\murad\centil\o\ch.php中给出的布尔值尝试将SELECT查询更改为SELECT*FROM websiteusers,其中userName='$userName'我添加了此代码$result=mysqli\u query$bd,$usernamecheck或die;它删除了这个错误,但是现在它给了mysqli_query[function.mysqli query]:空查询,基本上这个错误意味着查询失败。通常情况下,这是一个语法错误,看起来不是大小写,或者表\列不存在。如果mysqli_num_rows$usernamecheck>=1mysqli_num_rows期望参数1是mysqli_result,则在此行中会出现错误,第18行C:\AppServ\www\murad\centil\o\ch.php中给出的布尔值尝试将SELECT查询更改为SELECT*FROM websiteusers,其中userName='$userName'我添加了此代码$result=mysqli\u query$bd,$usernamecheck或die;它删除了这个错误,但是现在它给了mysqli_query[function.mysqli query]:空查询,基本上这个错误意味着查询失败。通常这是一个语法错误,看起来不是大小写,或者表\列不存在。$'full'。submitfunction{this.FORM.reset;console.logsubmitted;};是的,但在表单提交并插入值后在php内部调用它,如以下回显“$”full“。submitfunction{this.form.reset;console.logsubmitted;};'但这通常不是一个好的做法,因为在当前场景中,表单和提交代码位于同一页面上,因此这可以工作,但当您遵循一些良好的开发标准(如MVC)时,就无法工作了。那么,您只有一个选择,即重定向用户$'full'。submitFunction{this.FORM.reset;console.logsubmitted;};是的,但在表单提交并插入值后在php内部调用它,如echo'$'full'。submitfunction{this.FORM.reset;console.logsubmitted;}'但这通常不是一个好的做法,因为在当前场景中,表单和提交代码位于同一页面上,因此这可以工作,但当您遵循一些良好的开发标准(如MVC)时,则无法工作。那么,您只有一个选项,即重定向usermysqli_查询期望参数2为字符串,对象给定init显示bun错误类别:未捕获异常“PDOException”,在C:\AppServ\www\murad\centil\o\ch.php中显示消息“找不到驱动程序”:16堆栈跟踪:0 C:\AppServ\www\murad\centil\o\ch.php16:PDO->\u构造“mysql:dbhost=lo…”,“root”,“123”1 C:\AppServ\www\murad\centil\o\Main.php2:include'C:\AppServ\www\…'2{main}在第16mysqli_行的C:\AppServ\www\murad\centil\o\ch.php中抛出,查询期望参数2为字符串,给定init的对象显示了一系列错误:未捕获异常“PDOException”,在C:\AppServ\www\murad\centil\o\ch.php中显示消息“找不到驱动程序”:16堆栈跟踪:0C:\AppServ\www\murad\centil\o\ch.php16:PDO->u构造'mysql:dbhost=lo…','root','123'1c:\AppServ\www\murad\centil\o\Main.php2:包括在第16行的C:\AppServ\www\…'2{Main}中抛出的'C:\AppServ\www\murad\centil\o\ch.php