В общем, у меня есть код, который я написал, и он связан с формой 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 не вариант.
Спасибо за прочтение.
попробуй это:
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";
}
}
Вам нужно будет открыть файл и построчно пройти по нему. Проверьте каждую строку по строке, которую вы ищете. Если вы найдете это, отметьте это и вырвитесь из цикла. Затем вы можете либо записать файл, либо вывести сообщение об ошибке.
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
}
}
}
?>