PHP MYSQL 检查重复条目

标签 php mysql database duplicates

(这是我的第一篇文章) 我编写了一个 PHP 脚本来将“数据集”输入 MySQL 数据库。 在输入数据之前,我想检查“数据集”是否已在数据库中。

我的问题:它仅适用于少数数据集(是的,我确信我没有忘记大小写) 所以这是脚本(你不需要德语注释......):

<!DOCTYPE html>
<html><head>
<meta charset="utf-8">
<title>Playlist</title>

<link rel="stylesheet" type="text/css" href="style.css" />

<script type="text/javascript">
setTimeout("self.location.href='index.php'",6000);
</script>

</head>
<body>
<div id="enterbody">
<?php
include ('conf.php');


mysql_select_db("$datenbank");

//Zeit
$date = date("d-m-Y");

//Post 2 var
$inp = $_POST["inp"];
$titel = $_POST["titel"];
$link = $_POST["link"];

//Länge der Strings
$l_inp = strlen($inp);
$l_titel = strlen($titel);
$l_link = strlen($link);

//eingabestrings in kleine zeichen umwandeln
$s_inp = strtolower($inp);
$s_titel = strtolower($titel);

//datenbankstrings in kleine zeichen umwandeln


//Ausgabe

echo "Länge des Interpreten: $l_inp (max: 50)</br>";
echo "Länge des Titels: $l_titel (max: 50)</br>";
echo "Länge des Links: $l_link (max: 42)</br>";

if ($inp == "" or $titel == "")
{
    echo "Bitte fülle die notwendigen Felder aus!";
}
else
{
    if ($l_inp > 50 or $l_titel > 50 or $l_link > 42)
    {
        echo "Der Interpret/Titel/Link ist zu Lange, deshalb wurde er nicht in die Datenbank eingetragen!";
    }
    else
    {       
            //stringkonvertierung nicht vergessen
            $inp_einlesen = mysql_query("SELECT inp FROM $tabelle WHERE inp='$inp'");
                $titel_einlesen = mysql_query("SELECT titel FROM $tabelle WHERE titel='$titel'");

                if (mysql_num_rows($inp_einlesen) == 1 and mysql_num_rows($titel_einlesen) == 1)
                {
                        echo "<b>$inp</b> mit dem Track <b>$titel</b> ist schon in der Datenbank vorhanden, deshalb wird der Datensatz nicht eingetragen";
                }
                else
                {

                $entry = "INSERT INTO playlist (inp, titel, link, date) VALUES('$inp','$titel','$link', NOW())";
                $enter_data = mysql_query($entry);


                if ($enter_data == true)
                {
                    echo "Deine Daten wurden gespeichert! Weiterleitung...";
                }
                else
                {
                                echo "Fehler beim Eintragen der Daten...";
                        }

                }
    }
}



mysql_close($connection);
?>
</div>




</body>
</html>

最佳答案

在这一行:

if (mysql_num_rows($inp_einlesen) == 1 and mysql_num_rows($titel_einlesen) == 1)

您只是测试一个结果。也许您有多个结果?也许有两条记录具有“inp_einlesen”匹配,而只有一条记录具有“titel_einlesen”匹配?换句话说,如果您的数据集已经有重复项,则这一行将无法找到它们,除非每个字段只有一个重复项。

除了大小写之外的另一件事是尾随空格。请务必使用trim() 删除尾随空格。

您可能想要标准化的另一件事是处理转义的方式。如果有人输入带有撇号的数据,您需要手动转义或在较低级别处理它,例如使用 magic_quotes。

此外,您所提供的代码很容易受到 MySQL 注入(inject)攻击。请务必阅读“mysql_real_escape_string”的 PHP 手册页。

关于PHP MYSQL 检查重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10374780/

相关文章:

php - 将 CSV 文件写入 SQL

mysql - Spring Boot 服务未连接到 GKE 的 kubernetes 内的 mysql DB 服务

mysql - 保存 SQL 查询供以后使用,或将此数据作为列上传到我的数据库中

php - MySQL 选择全部并根据另一列更新特定列字段

php - 从 PHP 发送短信

php - 是否有验证 PHP 序列化数据的正则表达式?

java - JPA 无法更新日期

sql - 如何在go中使用sql server包

php - 如何在codeigniter中使用where子句连接两个表?

php - parse_str()突然不起作用