Reputation: 109
I am having a 'names.txt' text file having names like John, Mike, Julia. Now i enter another set of names in append mode to the existing 'names.txt' file like Steve, Ben, Mike. How can I restrict the 'Mike' duplicate entry in php? Or how can I prompt an error message something like 'Mike, name already existed. Please enter another name' so that duplication can be avoided.
The code is
<!DOCTYPE html>
<html>
<head>
<title>Form Page</title>
</head>
<body>
<form action="Files.php" method="POST">
<textarea rows="15" cols="30" value="textbox" name="textbox"></textarea></br>
<input type="submit" value="Save" name="Save">
<input type="submit" value="Fetch" name="Fetch">
</form>
</body>
</html>
<?php
/*** Get names from 'names.txt' file and prints the names stored in it ***/
if(isset($_POST['Fetch'])){
$file_names = "names.txt";
$current_names = file_get_contents($file_names);
echo nl2br($current_names);
}
/*** Get names from text box and Put to the 'names.txt' file in append mode ***/
if(isset($_POST['Save'])){
$current_names = $_POST["textbox"];
file_put_contents("names.txt", PHP_EOL.$current_names, FILE_APPEND);
/*** Get names form 'names.txt' file and prints the names stored in it ***/
$file_names = "names.txt";
$current_names = file_get_contents($file_names);
echo nl2br($current_names);
}
?>
Upvotes: 4
Views: 1746
Reputation: 9303
So simple..
$data = file('names.txt', FILE_IGNORE_NEW_LINES);
$search = 'Jakarta';
echo (in_array($search, $data)) ? "Already exists" : "Available";
Upvotes: 2
Reputation: 98921
Try this:
/* names.txt
mike
peter
louis
hamilton
*/
<!DOCTYPE html>
<html>
<head>
<title>Form Page</title>
</head>
<body>
<form action="Files.php" method="POST">
<textarea rows="15" cols="30" value="textbox" name="textbox"></textarea></br>
<input type="submit" value="Save" name="Save">
<input type="submit" value="Fetch" name="Fetch">
</form>
</body>
</html>
<?php
/*** Get names from 'names.txt' file and prints the names stored in it ***/
if(isset($_POST['Fetch'])){
$file_names = "names.txt";
$current_names = file_get_contents($file_names);
echo nl2br($current_names);
}
/*** Get names from text box and Put to the 'names.txt' file in append mode ***/
if(isset($_POST['Save']) && !empty($_POST['textbox'])){
$file_names = "names.txt";
$current_names_onfile = file_get_contents($file_names);
$current_names = $_POST["textbox"];
$arr = explode("\r", $current_names);
foreach($arr as $name)
{
#remove line breaks
$name = preg_replace('/[\r\n]/m', '', $name);
#if the name doesn't exist on file stores it.
if (!preg_match("/^\b$name\b\$/m", $current_names_onfile)) {
file_put_contents("names.txt", PHP_EOL.$name, FILE_APPEND);
}else{
echo "$name already exists<br />";
}
}
/*** Get names form 'names.txt' file and prints the names stored in it ***/
$file_names = "names.txt";
$current_names = file_get_contents($file_names);
echo nl2br($current_names);
}else if(isset($_POST['Save'])){
echo "please type something";
}
?>
Upvotes: 2
Reputation: 4481
when separating your text-file entries with PHP_EOL
:
(be careful - the output of PHP_EOL
depends on the operating system PHP is running on!)
//new name to insert if not in file:
$new_name = "Martin";
$file_content = file_get_contents('names.txt');
//names into array elements
$content_array = explode(PHP_EOL, $file_content);
//trim spaces and stuff from the data in your array:
foreach($content_array AS $key => $value)
{
$content_array[$key] = trim($value);
}
if(in_array($new_name, $content_array)) echo "name found - don't save it again";
Upvotes: 5
Reputation: 1322
<!DOCTYPE html>
<html>
<head>
<title>Form Page</title>
</head>
<body>
<form action="Files.php" method="POST">
<textarea rows="15" cols="30" value="textbox" name="textbox"></textarea></br>
<input type="submit" value="Save" name="Save">
<input type="submit" value="Fetch" name="Fetch">
</form>
</body>
</html>
<?php
/*** Get names from 'names.txt' file and prints the names stored in it ***/
if(isset($_POST['Fetch'])){
$file_names = "names.txt";
$current_names = file_get_contents($file_names);
echo nl2br($current_names);
}
$currentNamesContainer = explode(PHP_EOL, $current_names);
/*** Get names from text box and Put to the 'names.txt' file in append mode ***/
if(isset($_POST['Save'])){
$newName = $_POST["textbox"]; // changed variable name to NewName
// If new name does not exist in current container, then just append it...otherwise bail!
if (!in_array($newName, $currentNamesContainer)) {
file_put_contents("names.txt", PHP_EOL.$newName, FILE_APPEND);
}
/*** Get names form 'names.txt' file and prints the names stored in it ***/
$file_names = "names.txt";
$current_names = file_get_contents($file_names);
echo nl2br($current_names);
}
?>
Algorithm : $existingData = file_get_contents('names.txt');
// Now parse this string and store names in an array (list of names), that depends on your format of file...
$yourNewName = 'Mike';
// Now check is this exists in your current array.
if (in_array($yourNewName, $currentArray)) {
// exit with error
}
// Insert new name .
//This is pseudo code i have written. If you post your code, i can try more help.
Upvotes: 2
Reputation: 176
probably the best way would be to
Upvotes: 2