停止 PHP 表单中的重复条目

Posted

技术标签:

【中文标题】停止 PHP 表单中的重复条目【英文标题】:Stopping duplicate entries in PHP form 【发布时间】: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 错误。 【参考方案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");

并将文本添加到新页面。

    提交按钮被点击后禁用

改变

<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);
    将 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>";

   

   ?>

【讨论】:

以上是关于停止 PHP 表单中的重复条目的主要内容,如果未能解决你的问题,请参考以下文章

如何停止模式对话框中的重复条目

使用php在数据库上重复条目

Access VBA:关闭表单会导致表中的重复条目

如何使用 PHP 会话来防止重复提交表单?

我的网站上的 PHP 联系表单错误。 PHP 新手,但我发誓这之前有效并且停止了,我无法弄清楚如何修复它 [重复]

消除链接到查询结果的重复表单条目