2016-07-31 8 views
0

Ich habe ein Formular, wo der Benutzer Daten eingibt und übermittelt. Dieses Formular wird nicht aktualisiert, wenn der Benutzer Ajax übermittelt und verwendet, um die Informationen an PHP weiterzuleiten. Nach der Übermittlung geht der Benutzer auf eine neue Seite (in Wirklichkeit ist es dieselbe Seite, aber der Benutzer sieht sie als eine andere Seite an). Der Benutzer kann zur vorherigen Seite zurückkehren, um einige Informationen zu ändern, wenn sie möchten. Wenn der Benutzer die Seite zum ersten Mal einreicht, habe ich kein Problem damit. Es ist, wenn der Benutzer zurückgeht und beschließt, wieder zu ändern, wo ich Probleme habe. Mit meinem aktuellen Code initiiere ich beim Refresh eine leere SESSION ["prevUrl"]. Wenn der Benutzer anschließend das Formular abschickt, erhält die SESSION ["prevUrl"] die neuen POST-Daten. Angenommen, der Benutzer entscheidet sich erneut für die Übermittlung. Die if/else-Anweisung, die ich habe, sollte zur else-Anweisung gehen, da die SESSION-Variable nicht leer ist, sondern stattdessen den if-Block aufruft. Ich habe INSERT-Anweisungen sowohl für if als auch else verwendet, um zu sehen, was gerade aufgerufen wird, und zu beiden Zeitpunkten wird die if-Anweisung aufgerufen. Hier ist mein Code:PHP SESSION Variable ändern, aber als leer

Wie kann ich es beheben, so dass beim zweiten Mal der else Block aufgerufen wird? Und warum ist meine SESSION ["prevUrl"] beim zweiten Mal leer?

+0

Sie leer '$ _SESSION [ 'prevUrl']' manuell jedes Mal (Zeile 3). Wie könnte es etwas anderes als leer sein? – LSerni

+0

@lserni Ich möchte es leeren, wenn der Benutzer zuerst auf die Seite kommt. Wenn der Benutzer das Formular zum ersten Mal einreicht, wird $ _SESSION ['prevUrl'] auf $ _POST ["articleUrl"] gesetzt und ich habe das getestet und festgestellt, dass $ _SESSION ['prevUrl'] nicht mehr leer ist, sobald der Benutzer es absetzt , aber PHP betrachtet es als leer – user2896120

+0

@lserni Wäre es eine gute Idee, den Benutzer zu einer bestimmten Seite umleiten zu lassen, die bestimmte SESSION-Variablen leeren wird und diese Seite dann zurück zur ursprünglichen Seite umleitet? – user2896120

Antwort

1

Ich würde folgendes tun:

  1. alles neu gibt es keine $_POST variabel, weil es bedeutet, dass die Seite frisch
  2. ein Flag hinzufügen geladen wurde zu Sitzung, die beim ersten Senden auf "true" festgelegt wird.
  3. Suchen Sie jedes Mal nach dieser Flagge. Wenn es nicht gesetzt ist, hat die Form bedeutet nicht seit dem letzten reload vorgelegt, leeren Sie den prevUrl

diese Schritte Putting zusammen:

session_start(); 
ob_start(); 

//reset all session vars when page is freshly loaded 
if(empty($_POST)) session_unset(); 

//clear prevURL only on first submission after a page load 
if(empty($_SESSION['inserted']) $_SESSION["prevUrl"] = ""; 

... 
if (empty($_SESSION["prevUrl"])) 
{  
    $result = $db->query("INSERT INTO Stories (`url`) VALUES ('hi')"); 
    if(!$result) die($db->error); 
    $_SESSION['inserted'] = true; 
    $_SESSION["prevUrl"] = friendlyUrl(filter_data($_POST["articleUrl"])); 
} 

else... 
+0

Damit wird $ _SESSION ['submitted'] beim ersten Versuch leer sein, und es wird richtig funktionieren. Danach wird $ _SESSION ['submitted'] den Wert true tragen. Wenn der Benutzer die Seite aktualisiert, ist $ _SESSION ['submitted'] weiterhin wahr und daher nicht leer.Ich brauche alles, um beim Eingeben der Seite zurückgesetzt werden – user2896120

+0

@ user2896120 Haben Sie es versucht oder beurteilen Sie Ergebnisse nur durch das Lesen der Antwort? Der Punkt ist, nur einmal richtig einzufügen? Bei nachfolgenden Anfragen möchten Sie stattdessen aktualisieren? Das leistet mein Code. Das Flag (ich habe es von "submitted" in "insert" umbenannt) ist nur eine Möglichkeit zu überprüfen, ob der Datensatz eingefügt oder aktualisiert werden soll. Wenn * alles * wie vorgeschlagen zurückgesetzt wird, folgt der Code immer demselben Pfad; egal, was Sie tun, Sie werden nicht in der Lage sein, in die "else" Zweigstelle – BeetleJuice

+0

Ja, der Punkt ist nur einmal einfügen, aber wenn die Person die Seite aktualisiert, müssen sie erneut einfügen. Die SESSION-Variablen sollten ausgeleert werden, als ob der Benutzer die Seite zuerst besucht. Stellen Sie sich dies als CMS vor. Wenn der Benutzer die Seite aktualisiert, sollten die Daten verschwunden sein und sie schreiben einen neuen Artikel. – user2896120

0

Weil Sie am Anfang Ihres Codes $_SESSION["prevUrl"] = ""; (Zeile 3) geschrieben haben, so wird jedes Mal, wenn die Seite ausgeführt wird, die SESSION ['prevUrl'] leer. Um dies zu lösen, setzen Sie es als:

if(!isset($_SESSION['prevUrl'])){ 
    $_SESSION['prevUrl'] = ""; 
} 
+0

Sollte es nur gesetzt werden und kein "!" ? Da möchte ich '$ _SESSION ['prevUrl']' leeren, wenn der Benutzer zuerst die Seite betritt? – user2896120

+0

mit "!" wird sein, wenn es nicht gesetzt ist. Dies geschieht, wenn der Benutzer die Seite in dieser Sitzung zum ersten Mal betritt. –

+0

Angenommen, mein $ _SESSION ['prevUrl'] war leer, dann wird dieser Code aufgerufen und auf leer gesetzt. Ich fahre dann fort, um das Formular zu senden, $ _SESSION ['prevUrl'] wird dann auf was auch immer $ _POST gesetzt ist. Ich aktualisiere die Seite, $ _SESSION ['prevUrl'] ist immer noch was auch immer $ _POST ist und wenn es um deinen Code geht, überspringt es es, weil es bereits gesetzt ist. Es wird dann fortfahren, zu der Else-Anweisung zu gehen, wenn ich zum ersten Mal auf "Submit" klicke. Jetzt wird UPDATE was $ _SESSION ['prevUrl'] war, bevor ich die Seite aktualisiert habe, anstatt einen neuen Eintrag für diese URL einzufügen. Wenn das Sinn macht. – user2896120