PHP Как искать дубликаты в файле .txt перед вставкой данных

В общем, у меня есть код, который я написал, и он связан с формой HTML.
И когда пользователь отправляет форму, мой php-код уже проверяет ее на наличие ошибок и проверяет ее, а затем вставляет все в файл file.txt в том же каталоге, и все в порядке с этим.

Что мне нужно сделать сейчас, и я понятия не имею, как, как я могу с помощью php проверить файл на наличие дубликатов перед вставкой данных в файл, чтобы, если он дублируется, он выдавал ошибку пользователю и делал не вставить в файл.

Я искал везде это, но единственное, что я нашел, — как это сделать с MySQL, и мне нужно сделать это с файлом .txt, возможно ли это?

Вот код, который у меня сейчас есть:

    <?php   $username = ""; $ip = ""; $port = ""; $usernameErr = ""; $ipErr = ""; $portErr = ""; $readytosend1 = ""; $readytosend2 = ""; $readytosend3 = "";?>
<!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<?php
if (!isset($_POST["submit"])) {

} else {

function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {

if (empty($_POST["username"])) {
$usernameErr = "This field is required";
$readytosend1 = "no";
} else {
$username = test_input($_POST["username"]);
$readytosend1 = "yes";
}
}if ($_SERVER["REQUEST_METHOD"] == "POST") {

if (empty($_POST["ip"])) {
$ipErr = "This field is required";
$readytosend2 = "no";
} else {
$ip = test_input($_POST["ip"]);
if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE)){
$ipErr = "The ip you entered is invalid";
$readytosend2 = "no";
} else {
$ipErr = "";
$readytosend2 = "yes";
}
}
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {

if (empty($_POST["port"])) {
$portErr = "This field is required";
$readytosend3 = "no";
} else {
$port = test_input($_POST["port"]);
if($port > 1024 && $port < 65535){
$portErr = "";
$readytosend3 = "yes";
} else {
$portErr = "The port you entered is invalid";
$readytosend3 = "no";
}
}
}
if($readytosend1 == "yes" && $readytosend2 == "yes" && $readytosend3 == "yes"){
$file = fopen("file.txt", "a") or die("Unable to open file!");
$txt = $username ." : ". $ip ." : ". $port ."\n\n";
fwrite($file, $txt);
fclose($file);
}
}
?>

<div align="center">
<form id="orderform" method="post">
<input type="text" value="" style="margin-top:5px;" placeholder="Username" name="username"><br><span id="error1" class="error"><?php echo $usernameErr;?></span><br>
<input type="text" value="" style="margin-top:5px;" placeholder="IP" name="ip"><br><span id="error2" class="error"><?php echo $ipErr;?></span><br>
<input type="text" value="" style="margin-top:5px;margin-bottom:10px;" placeholder="Port" name="port"><br><span id="error3" class="error"><?php echo $portErr;?>        </span><br>
<input id="submit" type="submit" name="submit" value="Submit">
</form>
</div>

PS: использование MySQL не вариант.

Спасибо за прочтение.

1

Решение

попробуй это:

if($readytosend1 == "yes" && $readytosend2 == "yes" && $readytosend3 == "yes"){
//exist check & insert part
$fd=@explode("\n",@file_get_contents("data.txt"));   // read file
$txt = $username ." : ". $ip ." : ". $port ;
if(!in_array($txt,$fd)){
$fd[]=$txt;
@file_put_contents("data.txt",@implode("\n",$fd));  //  insert
}
else{
echo "data exist";
}
}
2

Другие решения

Вам нужно будет открыть файл и построчно пройти по нему. Проверьте каждую строку по строке, которую вы ищете. Если вы найдете это, отметьте это и вырвитесь из цикла. Затем вы можете либо записать файл, либо вывести сообщение об ошибке.

    if($readytosend1 == "yes" && $readytosend2 == "yes" && $readytosend3 == "yes"){
$txt = $username ." : ". $ip ." : ". $port ."\n\n";
$lines = file('file.txt');
$match = false;

foreach ($lines as $line_num => $line) {
if($line === $txt) {
$match = true;
break;
}
}

if(!$match) {
$file = fopen("file.txt", "a") or die("Unable to open file!");
fwrite($file, $txt);
fclose($file);
} else {
// record already exists, do something with an error message
}
}
}
?>
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector