2016-07-30 11 views
0

Ich habe ein Formular, wo der Benutzer die URL eingeben, die sie möchten, und fährt mit dem nächsten Schritt fort. Dies geschieht alles ohne Seitenaktualisierung, daher verlasse ich mich auf Ajax, um die Informationen zu senden. Wenn der Benutzer die gewünschte URL übermittelt, kann er den nächsten Teil verwenden. Der Benutzer hat auch die Möglichkeit, zu der URL-Seite zurückzukehren und ihre URL zu ändern. Ich weiß, wie man die URL erfolgreich einfügt, aber ich weiß nicht, wie man den Eintrag mit der neuen URL aktualisiert. Ich habe versucht, diese, aber es funktioniert nicht:Aktualisieren Eintrag basierend auf dem vorherigen Wert

$prevUrl; 
$newUrl; 

if ((isset($_POST["url"])) 
{ 
    $newUrl = $_POST["url"]; 

if ($prevUrl == "") 
{ 
    $db->query("INSERT INTO Articles (`url`) VALUES ('$newUrl')"); 
    $prevUrl = $newUrl; 
} 

else 
{ 
    $db->query("UPDATE Articles SET url = '$newUrl' WHERE url = '$prevUrl'"); 
    $prevUrl = $newUrl; 
} 
} 

Wie kann ich es so machen, dass, wenn der Eintrag aktualisiert wird, wird es aktualisiert, basierend auf, was die vorherige URL war?

Was ist falsch: Wenn ich zurück gehe, um die URL zu aktualisieren, wird die URL nicht mit der neuen URL aktualisiert. Meine WHERE-Klausel wird nicht erfolgreich ausgeführt. Es ist, als ob die Variable $ prevUrl leer ist. Ich denke, da PHP serverseitig ist, welche Variablen bei der Seitenaktualisierung angezeigt werden, sind dies die Variablen und sie können sich nicht ändern. Da $ prevUrl zunächst leer ist, macht die WHERE-Anweisung wahrscheinlich so etwas wie url = "". Ich bin mir nicht sicher, ob das so ist. Es gab keinen Ausnahmefehler oder irgendeine Art von fatalem Fehler.

+0

Können Sie näher erläutern, wie Ihr Code "nicht funktioniert"? Was hast du erwartet und was ist eigentlich passiert? Wenn Sie eine Ausnahme/einen Fehler erhalten haben, geben Sie die Zeile, auf der sie aufgetreten ist, und die Ausnahme-/Fehlerdetails an. Bitte [bearbeiten] Sie diese Details oder wir können Ihnen möglicherweise nicht weiterhelfen. – FrankerZ

+0

@FrankerZ Ich habe gerade die Frage mit diesen Details aktualisiert – user2896120

+0

Ich sehe Tonnen von Tippfehlern: 'es (\ 'url)' (Missing a \ '). '$ db-query (" UPDATE Articles "(Fehlen eines'> 'vor der Abfrage. Wie funktioniert dieser Code überhaupt? Siehe [this] (http://stackoverflow.com/questions/845021/how-to-get- Nützlich-Fehler-Nachrichten-in-PHP) post und aktivieren "error_reporting" und post zurück mit tatsächlichen Fehlern. – FrankerZ

Antwort

0

Ich weiß nicht, ob ich dich richtig verstanden habe, aber was ich denke, dass du versuchst zu tun, ist nicht möglich. Eine Ajax-Anfrage ist nichts anderes, als einen Code auf dem Server auszuführen und das Ergebnis zurückzusenden, ohne erneut zu laden. Nach dem Senden der Ergebnisse sind auf dem Server keine Variablen mehr verfügbar, mit Ausnahme von $ _SESSION.

Ihre Variable $ prevurl kann nichts anderes als 'null' sein, denn am Anfang Ihres Codes deklarieren Sie es so.

In Ihrem Fall gibt es zwei Möglichkeiten, das zu lösen. Entweder Sie schreiben die URL in der $ _SESSION variable:

session_start(); 
$_SESSION['url']= $newurl; 

und Acess es so wieder.

Oder Sie ändern Ihre Tabelle 'Artikel', so dass Sie besser überprüfen können, ob es bereits einen 'URL'-Eintrag gibt und Sie daher UPDATE anstatt INSERT durchführen müssen.

EDIT:

mein erster Vorschlag an:

Die $ _SESSION Variable kann sehr viel über Ajax geändert werden. Wenn Sie nur Ajax verwenden möchten, um Daten vom Benutzer live zu übermitteln, ist es möglich, aber Sie können einfach nicht mit <form> -Elementen arbeiten. Sie haben mit Javascript arbeiten:

<!-- HTML --> 
<input id='newurl' /> 
<input type='button' value='next' onclick='submitURL(document.getElementById("newurl").value)' /> 

// JAVASCRPT 
function submitURL(newurl){ 
    var xhttp; 
    if (window.XMLHttpRequest) { 
     xhttp = new XMLHttpRequest(); 
     } else { 
     // code for IE6, IE5 
     xhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xhttp.open("GET", /*include url_submit.php?data=newurl*/, true); 
    xhttp.send(); 

    xhttp.onreadystatechange = function(){ 
     if(xhttp.readyState==4&&xhttp.status == 200){ 
      //change Pagecontent to next page 
     } 
    }; 
} 

# PHP (url_sumbit.php) 
<?php 
if(!isset($_SESSION['url']){ 
    session_start(); 
} 
$_SESSION['url']=$_GET['data']; 
?> 

Wenn alle Benutzerdaten gesendet wird, eine .php-Datei enthalten ist, das schafft die Datenbankeinträge.

zweiten Vorschlag an:

in der Php-Datei, statt die Benutzerdaten in $ _SESSION speichert, wird es sofort in eine Datentabelle geschrieben. Promelm ist, dass Sie nicht wissen, ob Sie updaten oder einfügen müssen (wenn die URL zuvor gesendet wurde oder nicht). Sie müssen also manuell prüfen, ob es einen Eintrag gibt, wenn ja, aktualisieren Sie ihn, wenn nein, fügen Sie einen neuen ein.

Ich muss sagen, dass beide Wege sehr hässlich sind. Es wäre viel einfacher, wenn alle Daten gleichzeitig eingereicht werden. Wenn Sie zum Beispiel darauf bestehen, nicht neu zu laden, schreiben Sie Javascript, das nicht beim Klicken auf die Schaltfläche "Weiter" abschickt, sondern den alten Seiteninhalt ersetzt und die "übermittelten" Daten in einem versteckten <input> speichert. Am Ende wird alles ordnungsgemäß übermittelt und der Datenbank hinzugefügt.

+0

Zuerst wird es keinen URL-Eintrag geben, da der Benutzer es selbst erstellt. Sie gehen auf die Seite ohne Aktualisierung und geben die gewünschte URL ein und klicken auf "Senden". Beim ersten Senden wird ein neuer Eintrag erstellt. Sie gehen zur nächsten Seite über (denken Sie daran, dies ist eine Seite, aber sie wird nie aktualisiert). Nehmen wir an, sie beschlossen, ihre URL zu ändern, also gehen sie zurück. Sie ändern die URL und ihre URL sollte sich basierend auf ihrer vorherigen URL ändern. SESSION PHP-Variablen sind statisch und ändern sich nur, wenn die Seite aktualisiert wird. – user2896120

Verwandte Themen