Guten Tag,
ich habe mir vorgenommen ein Bewertungsscript mittel PHP zu erstellen. Das Scricpt zählt alles Seitenaufrufe jeder Unterseite und speichert die Aufrufe in eine *.*txt Datei ab. Zudem gibt es dem Leser „User“ die Möglichkeit einen jeweiligen Artikel/Site zu bewerten bzw. per klick auf den Link „GEFÄLLT MIR“, die Stimme des Lesers zählen zu lassen. (Dies geschiet jeweils in einer neuen *.*txt Datei.) Der User darf nur eine Stimme pro Site abgeben. Das funktioniert soweit auch das nur einmal die Stimme gezählt wird. Nun möchte ich, dass sobald die $_GET Variable übergeben wurde der Link „Gefällt mir“ durch eine Textausgabe ersetzt wird die dem User meldet, „Danke Stimme wurde nun gezählt“. Nur leider passiert das nicht. Erst bei zweitem Klick auf den link „Gefällt mir“ bzw. beim aktualisieren der Seite über den Browser wird der Text ausgegeben.
Mein PHP Code:
<?php session_start(); //start session//setze und registriere sessions mit jeweiligem Pagename $sessionpagename = $\_SERVER['DOCUMENT\_ROOT'] . $\_SERVER['SCRIPT\_NAME']; $sessionpagename = str\_replace(".php","",$sessionpagename); $votepagename = basename($sessionpagename); $votepagesperre = basename($sessionpagename) . 'sperre'; $votepagecount = basename($sessionpagename) . 'count'; //Prüfe ob vorhanden if(isset($\_SESSION[$votepagename]) && $\_SESSION[$votepagename]== 1) { $\_SESSION[$votepagesperre] = time(); } //Prüfe ob vorhanden if (!isset($\_SESSION[$votepagecount])) { $\_SESSION[$votepagecount] = 0; } //Zählt alle Seitenaufrufe $get\_countpi = file('\_FILE\_.txt'); $get\_countpi[0]++; $datei = "vote/countpi.txt"; $show = fopen($datei,"r+"); $poll = fread($show,filesize($datei)); $poll = $get\_countpi[0]; rewind($show); fputs($show,$poll); fclose($show); //Setze Pfad für die txt Files $path = $\_SERVER['DOCUMENT\_ROOT'] . $\_SERVER['SCRIPT\_NAME']; $path = str\_replace(".php",".txt",$path); $dateiname = basename($path); $pfad = $\_SERVER{'DOCUMENT\_ROOT'} . "vote/" . $dateiname; $get\_txt\_file = file("$pfad"); $get\_txt\_file[0]++; if(isset($\_SESSION[$votepagesperre])||$\_SESSION[$votepagesperre]\>=time()-60\*0\*0 && isset($\_GET['vote'])){ //echo "NEIN nicht speichern"; } elseif(!isset($\_GET['vote'])||isset($\_SESSION[$votepagename]) && $\_SESSION[$votepagesperre]\>=time()-60\*0\*0){ //echo "Nee immer noch nich speichern"; } else { //JA JETZT SPEICHERN und bitte Stimme zählen $datei = "$pfad"; $show = fopen($datei,"r+"); $poll = fread($show,filesize($datei)); $poll = $get\_txt\_file[0]; rewind($show); fputs($show,$poll); fclose($show); $\_SESSION[$votepagename] = 1; $\_SESSION[$votepagecount]++; } //print\_r ($\_SESSION); ?\> //Rechne Prozent $total = $get\_countpi[0]; $wert = $get\_txt\_file[0]; $prozent = $wert\*100/$total; echo $prozent //HIER WIRD WAHRSCHEINLICH DER FEHLER LIEGEN ODER if(!isset($\_SESSION[$votepagesperre])||$\_SESSION[$votepagesperre]Gefällt mir!'; } elseif(isset($\_SESSION[$votepagename]) && $\_SESSION[$votepagecount]\>1){ echo "Hallo Sie haben bereits Ihre Stimme abgegeben!"; } else { //DAS SOLLTE NORMALERWEISE SOFORT NACH KLICK AUF DEN LINK "GEFÄLLTMIR" ERSCHEINEN UND DER LINKTEXT SOLLTE VERSCHWINDEN; PASSIERT ABER LEIDER NICH ERST NACH ZWEITEN AKTUALISIEREN BZW KLICK AUF DEN LINK "GEFÄLLTMIR" echo "Danke, Ihre Stimme wurde nun gezählt!"; $\_SESSION[$votepagecount]++; } ?\> Meine Frage: Habe ich bei den if elseif else Bedingungen einen Denkfehler, der es erst beim zweiten Mal Aktualisieren ermöglicht den Text der else Anweisung anzuzeigen? Liege ich in der Annahme falsch das beim klick auf dem Link "Gefällt mir" mit der $\_GET Variablen die Site an den Server gesendet wird? Muss ich einen manuellen reload erzwingen um so die $\_SESSION[$votepagecount] erhöhen zu lassen? Ich bin über jeden Hinweis dankbar, da ich schon wieder ewig an diesem wahrschelich kleinem Problem hänge. Beste Grüße!