Latchu
Latchu

Reputation: 109

How to restrict duplicate data entry to an existing data in a text file in PHP?

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

Answers (5)

W Kristianto
W Kristianto

Reputation: 9303

So simple..

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

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

Upvotes: 2

Pedro Lobito
Pedro Lobito

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

low_rents
low_rents

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

Pankaj Garg
Pankaj Garg

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

Deano
Deano

Reputation: 176

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.

Upvotes: 2

Related Questions