【问题标题】:How can I stop my form from adding a record if it already exists in mySQL?如果 mySQL 中已存在记录,如何阻止我的表单添加记录?
【发布时间】:2016-12-31 14:59:14
【问题描述】:

我已经创建了一个脚本,它已经可以将一名球员添加到球队数据库中,以及发送一封电子邮件给某人进行检查。但是我想添加一个异常,如果记录已经存在,屏幕上会出现错误消息。

我尝试过使用 not exists 语句以及 if 语句。但是除了添加一个空行之外,数据库中什么也没有发生,没有添加任何数据。我正在使用 php 来执行此操作。

<?php
include("file:///C|/Users/Duncan-PC2/Documents/tugay/connect.php");

$name = trim(mysql_real_escape_string($_POST["name"]));
$surname = trim(mysql_real_escape_string($_POST["surname"]));   
$dob = trim(mysql_real_escape_string($_POST["dob"]));
$email = trim(mysql_real_escape_string($_POST["email"]));
$phone = trim(mysql_real_escape_string($_POST["contact_no"]));
$nat = trim(mysql_real_escape_string($_POST["nat"]));
$address = trim(mysql_real_escape_string($_POST["address"]));
$transfer = trim(mysql_real_escape_string($_POST["transfer"]));
$team_name = trim(mysql_real_escape_string($_POST["team_name"]));
$licence = trim(mysql_real_escape_string($_POST["licence"]));
$division = trim(mysql_real_escape_string($_POST["division"]));
$img = addslashes(file_get_contents($_FILES['image']['tmp_name']));

$result = mysql_query("SELECT name FROM teams WHERE name = '$name' and    surname = '$surname'");

if(mysql_num_rows($result) == 0) {

    mysql_query("INSERT INTO teams (id, name, surname, dob, email, contact_no, nat, address, transfer, team_name, licence, division, image)
    VALUES ('', '$name', '$surname', '$dob', '$email', '$phone', '$nat', '$address', '$transfer', '$team_name', '$licence', '$division', '$img')");

    $to = 'lisanssekreteri@gmail.com  '; // Add your email address inbetween the '' replacing yourname@yourdomain.com - This is where the form will send a message to.
    $email_subject = "New Player for $team_name Added";
    $email_body = "$team_name have added a new player! \n\n"."Here are the details:\n\nName: $name $surname\n\n Please go into the system and check this Player. ";
    $headers = "From: TCFF PLAYER REGISTRATION\n"; // This is the email address the generated message will be from. We recommend using something like noreply@yourdomain.com.
    $headers .= "Reply-To: $email_address"; 
    mail($to,$email_subject,$email_body,$headers);  


    echo ('<link href="css/bootstrap.css" rel="stylesheet" type="text/css" />

    <h1 class="col-lg-10">
    <div class="alert alert-info alert-dismissable">
                            <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    <i class="fa fa-info-circle"></i> PLEASE READ: This player has been added, please go to the red tab labelled with non approved players! Please do not attempt to add this player again. THIS PLAYER IS NOW APART OF YOUR TEAM AND WILL BE ACTIVATED SOON please be patient!</h1>
    <h1 class="col-lg-10">Thankyou This Player Has Been Succefully Added To Your Team! 

                    </div></h1>
    <span class="col-lg-10">
    <button class="btn-lg btn btn-danger" onclick="history.go(-2);">  Click Here To Go Back To Admin Panel, Please do not try to re-add this player!</button>
    </span>');

} else {

    echo ("<h1>This Player Already Exists or is apart of another team</h1>");

}  

【问题讨论】:

  • 在列上添加唯一约束。
  • 你为什么使用过时的代码?欢迎来到 21 世纪。
  • “如何阻止我的表单添加记录” - 什么表单?另外,不知道您是如何访问该文件的。
  • 这是什么类型的 funky 语法? file:///C|/
  • 看来您对此并不着急,要么发现了问题,要么留下了问题。你已经得到了 cmets 和一个答案。我一个人,将无法帮助你解决这个问题。我不会连续几个小时/几天都在提问。祝你好运。

标签: php mysql forms duplicates


【解决方案1】:

您可以通过执行SELECT 查询首先检查记录是否已存在来防止双重插入。看看下面的例子:

SELECT id
FROM some_table
WHERE something='bla';

// If the above query does not return any results, you can insert.
INSERT INTO some_table (something) VALUES ('bla');

编辑

这可能无法解决问题,但我发现按如下方式执行查询字符串是一种很好的做法:

$result = mysql_query("SELECT name FROM teams WHERE name = '".$name."' and    surname = '".$surname."'");

【讨论】:

  • 我注意到您的编辑:'$var''".$var."' 都产生相同的东西。所以,不是这样。这个问题缺乏太多细节。
  • 要给出任何进一步的答案,我需要知道是否引发了 sql 错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 2014-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多