4

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);
}

?>
3
  • post your code to help. Commented Apr 27, 2014 at 17:40
  • Hi Lucas Henrique, I've posted the code. Please check it. Commented Apr 27, 2014 at 17:48
  • @Latchu I've posted a new solution, try it out. Commented Apr 27, 2014 at 18:33

5 Answers 5

5

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";
Sign up to request clarification or add additional context in comments.

2 Comments

just replace the delimiter in the explode() - function with the one you use. seems like you are using "PHP_EOL" -> explode(PHP_EOL, $file_content);
changed my answer now to fit to your updated question. and be careful - "PHP_EOL" is depending on the operating system your php-code is running on.
2

probably the best way would be to

  1. read the text file line by line and load them into an array
  2. loop through the array comparing each value against the newly given value (the new name) - this can be done using in_array()
  3. add if false or echo error out if true.

Comments

2
<!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.

Comments

2

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";
}

?>

Comments

2

So simple..

$data   = file('names.txt', FILE_IGNORE_NEW_LINES);
$search = 'Jakarta';

echo (in_array($search, $data)) ? "Already exists" : "Available";

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.