boneXXX Posted April 24, 2007 Share Posted April 24, 2007 I am trying to find a specific line, which starts with a unique word, then delete that line in the .txt file then rewrite that line. Could you help me on this please ? .txt file John|Soccer player Smith|journalist <?php $username_tmp= "Smith" ; $listf = fopen ("./users.txt", "r+") or die("error openning file"); list($username,$profile) = fgetcsv($listf, 4096, "|"); while(!feof($listf)) { if ($username_tmp == "Smith" ) { .................... } list($username,$profile) = fgetcsv($listf2, 4096, "|"); } fclose($listf); ?> I can not go further than this I need help, thanks in advance. Link to comment https://forums.phpfreaks.com/topic/48387-edit-text-file-in-php/ Share on other sites More sharing options...
rcorlew Posted April 24, 2007 Share Posted April 24, 2007 The only way to look up records or contents in a file is by using fseek(); . You would have to know where the information you are looking for is and then do the rewrite. Might I suggest converting the contents of the file into a string then do your manipulations and afterwords rewite it back to the file. Link to comment https://forums.phpfreaks.com/topic/48387-edit-text-file-in-php/#findComment-236611 Share on other sites More sharing options...
boneXXX Posted April 24, 2007 Author Share Posted April 24, 2007 Thanks for the reply I ll work on it. Link to comment https://forums.phpfreaks.com/topic/48387-edit-text-file-in-php/#findComment-236612 Share on other sites More sharing options...
trq Posted April 24, 2007 Share Posted April 24, 2007 If your on linux you could easily use sed. <?php $username_tmp = "Smith"; exec("sed -i -e '/^$username_tmp/d' ./users.txt"); ?> Link to comment https://forums.phpfreaks.com/topic/48387-edit-text-file-in-php/#findComment-236618 Share on other sites More sharing options...
boneXXX Posted April 24, 2007 Author Share Posted April 24, 2007 Unfortunately I can't use "sed". I tried to put new info in a line then separate them in to arrays. Then find which line I want to update then write it. What function do you recommend for writing? just fwrite() or something else. There is no specific error just it doesn't work. //open the files $listf1 = fopen ("../datafile/member.TXT", "r+") or die("error opnenning file"); //read the files list($username,$password,$last_name,$first_name,$email,$organization,$user_level) = fgetcsv($listf1, 4096, "|"); //find the username to update info while(!feof($listf1)) { if ($username_tmp == $username ) { // assign new info from the forum $new_password = strip_tags(trim($_POST['PassWD'])); $new_first_name = strip_tags(trim($_POST['first_name'])); $new_last_name = strip_tags(trim($_POST['last_name'])); $new_email = strip_tags(trim($_POST['email'])); $new_organization = strip_tags(trim($_POST['organization'])); $new_profile = $_POST['profile']; $user_level = 2; $line_new = "$username|$new_password|$new_last_name|$new_first_name|$new_email|$new_organization|$user_level"; } list($username,$password,$last_name,$first_name,$email,$organization,$user_level) = fgetcsv($listf1, 4096, "|"); } //close the files fclose($listf1); //separate them and put them into an array $split_it = strtok($line_new, "|"); while ($split_it != false) { $n = 0; $get_in[$n] = "$split_it"; $n = $n++; } $listf1 = fopen ("../datafile/member.TXT", "w+") or die("error opnenning file"); list($username,$password,$last_name,$first_name,$email,$organization,$user_level) = fgetcsv($listf1, 4096, "|"); while(!feof($listf1)) { if ($username_tmp == $username ) { for ($n=0; $n < 6; $n++) { fputs($line_new,$get_in[$n]);//replace the info with new info } } list($username,$password,$last_name,$first_name,$email,$organization,$user_level) = fgetcsv($listf1, 4096, "|"); } fclose($listf1); //refresh the page again with the new profile info header("location: ./view_profile.php"); Link to comment https://forums.phpfreaks.com/topic/48387-edit-text-file-in-php/#findComment-236661 Share on other sites More sharing options...
rcorlew Posted April 24, 2007 Share Posted April 24, 2007 I have just dealt with the same problem but I am using a sql db. The problem was the same, delete only certain text from a text source then rewriting it. I do believe that it could be of use to you since the text is stored as a string then exploded into an array then deleted and then rewritten. Here is a link to that post, I hope this could help you, if you would like help adapting to your scenerio, pm and I will work it out for you. http://www.phpfreaks.com/forums/index.php/topic,137307.0.html Richard Link to comment https://forums.phpfreaks.com/topic/48387-edit-text-file-in-php/#findComment-236673 Share on other sites More sharing options...
boneXXX Posted April 24, 2007 Author Share Posted April 24, 2007 I am getting close to the end I think. The problem is know, it doesn't rewrite but it wipes everything in the .txt file. <?php //open the files $listf1 = fopen ("../datafile/member.TXT", "r+") or die("error opnenning file"); //read the files list($username,$password,$last_name,$first_name,$email,$organization,$user_level) = fgetcsv($listf1, 4096, "|"); //find the username to update info while(!feof($listf1)) { if ($username_tmp == $username ) { // assign new info from the forum $new_password = strip_tags(trim($_POST['PassWD'])); $new_first_name = strip_tags(trim($_POST['first_name'])); $new_last_name = strip_tags(trim($_POST['last_name'])); $new_email = strip_tags(trim($_POST['email'])); $new_organization = strip_tags(trim($_POST['organization'])); $new_profile = $_POST['profile']; $user_level = 2; $line_new = "$username|$new_password|$new_last_name|$new_first_name|$new_email|$new_organization|$user_level"; } //separate them and put them into an array $split_it = strtok($line_new, "|"); while ($split_it != false) { $n = 0; $get_in[$n] = "$split_it"; $n = $n++; } list($username,$password,$last_name,$first_name,$email,$organization,$user_level) = fgetcsv($listf1, 4096, "|"); } //close the files fclose($listf1); $listf1 = fopen ("../datafile/member.TXT", "w+") or die("error opnenning file"); list($username,$password,$last_name,$first_name,$email,$organization,$user_level) = fgetcsv($listf1, 4096, "|"); while(!feof($listf1)) { if ($username_tmp == $username ) { for ($n=0; $n < 6; $n++) { fputs($line_new,$get_in[$n]);//replace the info with new info } } list($username,$password,$last_name,$first_name,$email,$organization,$user_level) = fgetcsv($listf1, 4096, "|"); } fclose($listf1); //refresh the page again with the new profile info echo "<p><center>You have successfuly add the member to the database.<br><a href='./view_profile.php'>Click to Continue</a><p></center>"; ?> Link to comment https://forums.phpfreaks.com/topic/48387-edit-text-file-in-php/#findComment-236708 Share on other sites More sharing options...
boneXXX Posted April 24, 2007 Author Share Posted April 24, 2007 <?php // assign new info from the forum $username_tmp=$_SESSION['valid_user']; $new_password = strip_tags(trim($_POST['password'])); $new_first_name = strip_tags(trim($_POST['first_name'])); $new_last_name = strip_tags(trim($_POST['last_name'])); $new_email = strip_tags(trim($_POST['email'])); $new_organization = strip_tags(trim($_POST['organization'])); $new_profile = $_POST['profile']; $user_level = 2; //open the files $listf1 = fopen ("../datafile/member.TXT", "r+") or die("error opnenning file"); //read the files list($username,$password,$last_name,$first_name,$email,$organization,$user_level) = fgetcsv($listf1, 4096, "|"); //find the username to update info while(!feof($listf1)) { if ($username_tmp == $username ) { $line_new = "$username|$new_password|$new_last_name|$new_first_name|$new_email|$new_organization|$user_level"; echo "$line_new<br>"; $profile_inf = explode("|", $line_new); for($x = 0; $x < count($profile_inf); $x++) { echo "Piece $x = $profile_inf[$x] <br />"; } } list($username,$password,$last_name,$first_name,$email,$organization,$user_level) = fgetcsv($listf1, 4096, "|"); } //close the files fclose($listf1); //open the file to write $listf1 = fopen ("../datafile/member.TXT", "w+") or die("error opnenning file"); list($username,$password,$last_name,$first_name,$email,$organization,$user_level) = fgetcsv($listf1, 4096, "|"); while(!feof($listf1)) { if ($username_tmp == $username ) { for ($x=0; $x < count($profile_inf); $x++) { fputs($listf,$profile_inf[$x]);//replace the info with new info } } list($username,$password,$last_name,$first_name,$email,$organization,$user_level) = fgetcsv($listf1, 4096, "|"); } fclose($listf1); //$listf1 = fopen ("../datafile/member.TXT", "w+") or die("error opnenning file"); //list($username,$password,$last_name,$first_name,$email,$organization,$user_level) = fgetcsv($listf1, 4096, "|"); //while(!feof($listf1)) //{ //if ($username_tmp == $username ) //{ //for ($n=0; $n < 6; $n++) //{ //fputs($line_new,$get_in[$n]);//replace the info with new info //} //} //list($username,$password,$last_name,$first_name,$email,$organization,$user_level) = fgetcsv($listf1, 4096, "|"); //} //fclose($listf1); //refresh the page again with the new profile info //echo "<p><center>You have successfuly add the member to the database.<br><a href='./view_profile.php'>Click to Continue</a><p></center>"; ?> Link to comment https://forums.phpfreaks.com/topic/48387-edit-text-file-in-php/#findComment-236771 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.