ik heb een txt bestand met op elke lijn een emailadres. hoe kan ik die een voor een uitlezen en willekeurig er een vantussen halen?
ja die hebbik al gevonde, hoe zet ik nu alle andere adressen weer in het bestand zonder die ene
je unset hem uit de array, en dan schrijf je de array (met implode("\n") ieder email op een nieuwe regel) weer teru gin het bestand.
$file is het bestand, $expl is de explode die ik eerder toonde, $id is de regel die je zelf al gevonden had (degene die dus weg moet). $total is het aantal regels in de tekstbestand, of pak gewoon zelf een willekeurig aantal hoger dan het aantal adressen, wel minder netjes....

// Bestand leegmaken
$owrite = fopen($file, w);
$write = fwrite($owrite, '');
fclose($owrite);

// We gaan herschrijven
$aopen = fopen($file, a);

for ($i=0;$i<$total;$i++) {

if ($i != $id) {
$result = fwrite($aopen, "$expl[$i]\n";
$var = 1;
}
}

if ( $var == '1' ) {
echo "Verwijderd.";
} else {
echo "Niet verwijderd, het opgegeven adres kwam blijkbaar niet in de database voor...";
}

Niet getest, misschien enige foutjes die er zitten, maar je snapt het idee.
$write = fwrite($owrite, '');

Is niet nodig, w (wat een string is, en dus tussen "-tjes moet!) zet de pointer automatisch al bij het begin.

En had ik niet ongeveer hetzelfde script gemaakt, alleen dan een paar posts eerder (en met logischere namen)
Ja, maar met alleen w lukt het niet vanwege de for functie... Stel je gebruikt w, dan zal elke keer als-ie door de for 'loop' gaat hij slechts één regel wegschrijven, en ik neem aan de je alle e-mailadressen terug wil zien en niet alleen de laatste...

Edit: en nee, jij hebt die code niet geschreven :P.
basisbestand

Het werkt!!!
<?php

$file = 'email.txt';
$open = fopen($file, 'r');
$data = fread($open, filesize($file));
fclose($open);

// Splitten per regel
$a_Adressen = explode("\n",$data);

echo "<p>\n"; // alles weergeven
$max = count($a_Adressen);
for ($i = 0; $i < $max; $i++)
{
echo "<a href='?email=".$a_Adressen[$i]."'>".$a_Adressen[$i]."</a><br>\n";
}
echo "</p>\n\n";

if($i_key = array_search($_GET['email'],$a_Adressen))
{
echo "<p>\$_GET['email'] = ".$_GET['email']."<br>\n"; // hulp tonen
echo "gekozen email staat in array op positie ".$i_key."<br>\n";
echo "Dit maakt \$a_Adressen[".$i_key."] = ".$a_Adressen[$i_key]."</p>\n";
echo "<p><a href='?email=".$a_Adressen[$i_key]."&action=delete'>Verwijder email</a></p>";

if($_GET['action'] == 'delete') // het adres deleten
{
unset($a_Adressen[$i_key]);
$handle = fopen($file, 'w');
fwrite($handle, implode("\n", $a_Adressen)) or die('Kon gegevens niet schrijven.');
fclose($handle);
echo "emailadres verwijdert uit database";
}
}
else{ echo "email staat niet in database";}

?>

maar het kan enkel nog niet het eerste emailadres vinden $a_Adressen[0] vind hij niet bij search_array()
iemand? en hoe deed je dat weer om enkel op het einde bv nog een rij bij te schrijven?
Misschien moet je even omhoog lezen...
ev0l schreef op 30.05.2005 22:01
Misschien moet je even omhoog lezen...
^o) dan klopt het niet he, alles kan hij vinden in de array en deleten, behalve emailadres 1
<? $max = count($a_Adressen);?>
Bekend maar vreemd probleem. Een array kan wel de waarde 0 hebben, dus 0, 1, 2, 3, 4 enz. Maar als je de array (bijv. {0,1, 2, 3, 4}) zal hij 5 geven, omdat hij bij een begint te tellen. Dat zou dus verklaren dat hij die niet weergeeft.

edit: ooh, shit, ik weet het al.
<? if($i_key = array_search($_GET['email'],$a_Adressen))?>
Als array_search zegt dat het 0 is, denkt de if-constructie dat hij false bedoelt.
Maak er dus van
<? if(in_array($_GET['email'], $a_Adressen)){
$i_key = array_search($_GET['email'], $a_Adressen);
}?>

Reageren