【问题标题】:Stopping duplicate entries in PHP form停止 PHP 表单中的重复条目
【发布时间】:2018-07-01 19:47:00
【问题描述】:

努力实现一种方法来阻止此代码中的重复条目我已经尝试了几种使用 if 和 else 语句的方法,但我似乎无法让它工作。谁能提供解决方案?

<?php
require('db.php');
// If form submitted, insert values into the database.


if (isset($_REQUEST['username'])){
        // removes backslashes
    $username = stripslashes($_REQUEST['username']);
        //escapes special characters in a string
    $username = mysqli_real_escape_string($con,$username); 
    $email = stripslashes($_REQUEST['email']);
    $email = mysqli_real_escape_string($con,$email);
    $password = stripslashes($_REQUEST['password']);
    $password = mysqli_real_escape_string($con,$password);
    $signupdate = date("Y-m-d H:i:s");
        $query = "INSERT into `users` (username, password, email, signupdate)
VALUES ('$username', '".md5($password)."', '$email', '$signupdate')";
        $result = mysqli_query($con,$query);
        if($result){
            echo "<div class='form'>
<h3>You are registered successfully.</h3>
<br/>Click here to <a href='login.php'>Login</a></div>";
        }
    }else{
?>
<div class="form">
<form name="registration" action="" method="post">
<input type="text" name="username" placeholder="Username" required />
<input type="email" name="email" placeholder="Email" required />
<input type="password" name="password" placeholder="Password" required />
<input type="submit" name="submit" value="Register" />
</form>
</div>
<?php } ?>      

【问题讨论】:

  • 我无法识别代码中的任何内容是您声称的尝试。
  • 是的,我在重复页面上尝试了几次,但没有成功,我不知道为什么,所以我删除了它。
  • 我要尝试在 C9 上恢复页面。
  • 在最后一个 else 语句完成后,我最后一次尝试使用 else if 语句时无法获取该页面,并且代码基本上没有被提取(另一方面,它没有显示任何错误)。
  • 为什么不在数据库中创建唯一索引?索引基于“电子邮件”或“用户名”,无论您想使用哪一个。这样任何重复的条目都只会返回一个 mysql 错误。

标签: php sql phpmyadmin


【解决方案1】:
  1. 替换
echo "<div class='form'>
<h3>You are registered successfully.</h3>
<br/>Click here to <a href='login.php'>Login</a></div>";

header("location:thankyou.php");

并将文本添加到新页面。

  1. 提交按钮被点击后禁用

改变

<input type="submit" name="submit" value="Register" />

&lt;input type="submit" name="submit" value="Register" onClick="this.disabled=true; this.value='Processing…'";&gt;

3.将数据库中的电子邮件字段更改为唯一

ALTER TABLE users ADD UNIQUE (email);
  1. 将 else 添加到 $result 检查:
if($result){
     header("location:thankyou.php");
}
else{
     echo "Registration failed, Make sure to use an email address that was not used before";
}

【讨论】:

  • 虽然这很好用,但它不会通知用户该电子邮件已被使用。
  • 添加了第4步
  • 在第 4 步之后出现语法错误意外'}'。
  • 我已将处理按钮重命名为显示“无法提交详细信息,因为电子邮件已注册”,但由于某种原因,它会将我发送到一个空白页面。
  • 该;修复了空白页面,非常感谢您抽出宝贵的时间,这非常有帮助,因为它让我意识到我使用两个 else if 语句的方式只是糟糕的编码,因此它为什么不起作用。
【解决方案2】:
<?php 
If(isset($_POST[‘submit]))
{
   $username = stripslashes($_REQUEST['username']);
    $username = mysqli_real_escape_string($con,$username); 
    $email = stripslashes($_REQUEST ['email']);
    $email = mysqli_real_escape_string($con,$email);
    $password = stripslashes($_REQUEST ['password']);
    $password = mysqli_real_escape_string($con,$password);
    $password =  md5($password)
    $signupdate = date("Y-m-d H:i:s");

$Check_username_indb_query = "select * from users where username = ‘$username’ ";
$result_check = mysqli_query($con,$query);
If(mysqli_fetch_rows($result_check)==1)
{
               echo "Registration failed, this username is already taken please chose another one";
}
Else
{
$query = "INSERT into `users` (username, password, email, signupdate)
VALUES ('$username', '$password', '$email', '$signupdate')";
        $result = mysqli_query($con,$query);
        if($result)
         {
            echo "<div class='form'>
         <h3>You are registered successfully.</h3>
        <br/>
        Click here to <a href='login.php'>Login</a></div>";

   }

   ?>

【讨论】:

    猜你喜欢
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 2016-12-05
    • 2015-02-13
    • 1970-01-01
    • 2016-02-01
    相关资源
    最近更新 更多