php: Loop, jämför från textfil

Permalänk

php: Loop, jämför från textfil

God söndag nära och kära!

Sitter och arbetar fram ett enkelt php script likt Facebooks "Like" funktion. Tanken är att när man trycker på Like-knappen så ska det gå in en loop i textfilen som jämför raderna med datorns ip adress, om loopen går genom alla raderna utan att något krav uppfylls så ska datorns IP-adress lagras i en textfilen och Like-räknaren ska adderas med 1.
Trycker man nu igen på Like-knappen så ska loopen hitta min ip adress som lades till innan och stoppa själva proceduren.
Till problemet: Att lagra ip adressen i en textfil och addera en räknare är inga problem utan jag har problem med loopen som ska jämföra min ip adress och om den finns i textfilen.

Det ska självklart användas en while loop eftersom vi inte vet hur många rader det finns, men i koden har jag bara försökt mig på en for loop för jag vet hur många rader jag manuellt lagt till i textfilen. (Likaså min ip adress).
Efter ligger det en if-else som frågar om $i är equals med $ip, om inte så skriver den ut raden med

echo $lines[$i] . "<br>";

som sedan går om igen..

Trots att min ip adress ligger i textfilen så dör den inte på den raden där if-else jämför med min nuvarande ip.
Någon härlig själ som må ha en lösning på detta, egentligen väldigt simpla problem?
I koden nedan ligger inte funktionen för lagringen samt räknaren, utan bara jämförelsen.

Trevlig dag!

<form action="index.php" method="get"> <input type="submit" name="HeartMyFeed" value="Like" /> </form> <?php if (isset($_GET['HeartMyFeed'])) { //Hämtar textfilen där IP-adresserna lagras $file_name = "ip.txt"; //Om filen finns if(file_exists($file_name)) { $lines = file('ip.txt'); //Hämtar datorns IP-adress $ip = getenv("REMOTE_ADDR"); for ($i = 0; $i<14; $i++){ if ($lines[$i] == $ip){ echo "Din IP-adress finns redan."; die; } else { echo $lines[$i] . "<br>"; } } echo "Din IP-adress finns inte."; } else { echo "file <i>$file_name</i> doesn't exists"; } } ?>

Permalänk

Lägg istället in IP-Adresserna i en databas (MySQL är simpelt och bra) för att sedan jämföra där. Det blir lättare att hålla reda på allting på detta viset också.

Permalänk

Använd

file('fil.txt', FILE_IGNORE_NEW_LINES);

edit:
Nästa gång du ska felsöka vad en array innehåller så kan du skriva:

var_dump($array);

Permalänk
Medlem

Tänk på att din textfil troligen även innehåller newlinetecken "\r\n" (eller kanske bara "\n" som antingen måste trima's bort (http://se.php.mirror.edgebooster.com/manual/en/function.trim....) eller inkluderas vid jämförelsen.

Permalänk
Medlem

Istället för att trimma bort tecknena så kan du enkelt göra en array av filen, kolla på http://php.net/manual/en/function.explode.php .

Visa signatur

Citera eller nämn gärna mig (@ToJa92) om du svarar på något jag skrivit.
Uppskattar du eller blir hjälpt av ett inlägg jag skrivit är jag tacksam om du gillar det.

Permalänk
Skrivet av ToJa92:

Istället för att trimma bort tecknena så kan du enkelt göra en array av filen, kolla på http://php.net/manual/en/function.explode.php .

Det gör file() redan.

Permalänk
Medlem
Skrivet av Lullebulle:

Det gör file() redan.

Ja, svaret var väll mer tänkt till personen precis ovanför mig, dessutom redigerade du svaret under tiden jag svarade.

Visa signatur

Citera eller nämn gärna mig (@ToJa92) om du svarar på något jag skrivit.
Uppskattar du eller blir hjälpt av ett inlägg jag skrivit är jag tacksam om du gillar det.

Permalänk

Om du ska använda en flatfiles lösning istället för databas för detta, så skulle jag rekommendera att spara varje anrop som en egen textfil istället för alla i en. Det är en smartare lösning imo. Speciellt om det kommer vara en fil som inte har storleksbegränsning. Spara textfiler i en katalog med ipt som namn, förslagsvis, sen behöver du bara kolla om filen existerar.. osv.

Skrivet av victorin90:

God söndag nära och kära!

Sitter och arbetar fram ett enkelt php script likt Facebooks "Like" funktion. Tanken är att när man trycker på Like-knappen så ska det gå in en loop i textfilen som jämför raderna med datorns ip adress, om loopen går genom alla raderna utan att något krav uppfylls så ska datorns IP-adress lagras i en textfilen och Like-räknaren ska adderas med 1.
Trycker man nu igen på Like-knappen så ska loopen hitta min ip adress som lades till innan och stoppa själva proceduren.
Till problemet: Att lagra ip adressen i en textfil och addera en räknare är inga problem utan jag har problem med loopen som ska jämföra min ip adress och om den finns i textfilen.

Det ska självklart användas en while loop eftersom vi inte vet hur många rader det finns, men i koden har jag bara försökt mig på en for loop för jag vet hur många rader jag manuellt lagt till i textfilen. (Likaså min ip adress).
Efter ligger det en if-else som frågar om $i är equals med $ip, om inte så skriver den ut raden med

echo $lines[$i] . "<br>";

som sedan går om igen..

Trots att min ip adress ligger i textfilen så dör den inte på den raden där if-else jämför med min nuvarande ip.
Någon härlig själ som må ha en lösning på detta, egentligen väldigt simpla problem?
I koden nedan ligger inte funktionen för lagringen samt räknaren, utan bara jämförelsen.

Trevlig dag!

<form action="index.php" method="get"> <input type="submit" name="HeartMyFeed" value="Like" /> </form> <?php if (isset($_GET['HeartMyFeed'])) { //Hämtar textfilen där IP-adresserna lagras $file_name = "ip.txt"; //Om filen finns if(file_exists($file_name)) { $lines = file('ip.txt'); //Hämtar datorns IP-adress $ip = getenv("REMOTE_ADDR"); for ($i = 0; $i<14; $i++){ if ($lines[$i] == $ip){ echo "Din IP-adress finns redan."; die; } else { echo $lines[$i] . "<br>"; } } echo "Din IP-adress finns inte."; } else { echo "file <i>$file_name</i> doesn't exists"; } } ?>