php einmal laufen und zweimal einfügen in mysql-Datenbank
Ich habe einen einfachen code, der unten. Nachdem es einmal ausgeführt wird, fügt er die Ergebnisse zweimal in die mysql-Datenbank.
wenn Sie zweimal ausgeführt wird, oder die Anfrage zweimal base auf 1 refresh auf der Seite, warum die Ausgabe ist nur 1 Ergebnis?
Ich war googeln für den ganzen Tag und kämpfen um dieses Problem zu beheben. Aber ich konnte nicht herausfinden, was ist falsch an diesem code. Der code läuft perfekt auf localhost, aber nachdem es auf den server verschoben, das problem auftaucht. Hat jemand konfrontiert, so etwas wie dieses vor? Wie kann dieses problem gelöst werden?
VOLLSTÄNDIGEN CODE:
<?php
$db=mysql_connect('localhost','zzzzzzz','xxxxxx') or die('Unable to connect.'.mysql_error());
mysql_select_db('test',$db) or die(mysql_error($db));
$sql="INSERT INTO test_table(value,insert_time) VALUES ('testing','".time()."')";
$result=mysql_query($sql);
echo "result=".$result;
$select="select * from test_table";
$rs=mysql_query($select);
while($row=mysql_fetch_array($rs)){
echo $row["test_id"]." -- ".$row["value"]." -- ".$row["insert_time"]."<br />";
}
?>
ERGEBNIS:
Ergebnis=1
1 -- testen -- 1298185509
, ABER IN DER DATENBANK:
test_id , Wert , insert_time
1 für die Prüfung , 1298185509
2 , Prüfung , 1298185511
haben Sie versucht, WERTE zu schätzen und den Namen des Feldes
value
zu value
Seien Sie besonders vorsichtig bei der browser-debugging tools wie Firebug, die Mai-Ausgabe eine Anfrage mehr als einmal
Die Zeit, die Differenz von zwei Sekunden ist eher ein Zeichen, dass es eigentlich zwei HTTP-requests.
Aber..löschst du die DB nach jedem laden der Seite? weil in WÄHLEN Sie eine while-Schleife, also: 1. laden: fügen Sie einen Datensatz und dann abrufen aller Datensätze in der db (ohne where-Bedingung) - es gibt nur einen Datensatz. 2. laden: fügen Sie EINEN Datensatz, und holt ALLE - thre - 2-Datensätze. 3. laden: fügen Sie einen Datensatz, Holen Sie die 3 nun. Und so weiter..Du bist nicht einfügen zweimal, weil "insert =" Echos einfach mal aus, was ich sehe in deinem code
InformationsquelleAutor nicng | 2011-02-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin vor dem gleichen Problem wie du, das problem nur, occus, wenn ich Opera oder chrome.
Für meinen Fall, ich habe eine
.htaccess
zu jeder Sache, zu der index-Datei. Natürlich ist der browser die Anforderung das Skript zweimal, einmal für das Skript es selbst, der andere ist für das favicon.Das Update:
Versuchen Sie zum Bearbeiten der
.htaccess
um zu verhindern, dass die Umleitung auf die index-Datei, wenn der browser anfordert, fürfavicon.ico
Wenn diese Antwort Ihr Problem gelöst, bitte akzeptieren Sie es
Es wäre toll, wenn könnten Sie fügen Sie die Zeilen, die Sie Hinzugefügt, um Ihre htaccess-Datei
InformationsquelleAutor Endy Jasmi
Sehen Sie diese
Und der nächsten Zeile:
Dies bedeutet, dass Sie führen Sie Ihre Abfrage zweimal. Entfernen Sie eine der
$db->query
, z.B.:InformationsquelleAutor amer hamdan
Als Sie erwähnt das problem tritt nicht auf, wenn du lokal testen, tritt nur auf, wenn Sie stellen im server - - - - ich vermute, Sie haben von Google Adsense in Ihre Seite ein.
In diesem Fall adsense-crawler das Crawlen Ihrer Seite (senden der zweiten http-request auf die url)
Um dies zu vermeiden, fügen Sie Folgendes in starten Sie Ihre php-Datei:
Hatte ich vor ähnlichen Problem in einem script, das senden von E-Mails. Ich war immer doppelte E-Mails pro Aktion 🙁
Dann, untersuchte ich in der server-access-log, und entdeckte die zweite Anfrage pro Aktion von diesem user agent ...
Wenn Sie nicht über adsense, dann ist diese Lösung ist nicht erforderlich für Sie. Aber, wenn Sie hatten, analysiert die server-log-Zugang sollten Sie haben gefunden, dass das Problem bereits.
ich ändern Sie die insert value 'Test' , $_SERVER['HTTP_USER_AGENT'], und das Ergebnis immer noch 2 Zeilen eingefügt worden, aber beide Werte unterschiedlich! Ist das bedeutet, dass der browser tatsächlich verlangen zweimal und das problem verursachen? Werte wie folgt: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.59, Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3)
log : $_SERVER['REMOTE_ADDR']
InformationsquelleAutor Sarwar Erfan
Dieses problem kann auch werden, die sich durch Sie kann das mischen der
GET
undPOST
Oder
können Sie heruntergeladen haben, online-Vorlage, die können einen hintergrund ajax-aufrufen, bevor die Seite abgeschickt wird.
Bitte haben Sie einen Blick und wenn Sie eine Lösung finden, oder wenn es irgendein anderes problem, lassen Sie es uns wissen.
InformationsquelleAutor Rahul Singh
Code ist in Ordnung.
Versuchen zu ändern browser.
Wenn noch nicht gearbeitet.
Server-Neustart
Noch nicht
Versuchen zu schreiben in einer anderen Datei außerhalb des Projekts als einzigen Skript.
Wird es funktionieren.
Ich versuchte Ihren code, Ihre arbeiten auf meinem system.
InformationsquelleAutor Jatin Raikwar
Ok, ich weiß, dass dies nicht sinnvoll ist, aber ich löste entfernen
$.ajax({async:true});
aus meiner js-Datei.
InformationsquelleAutor Vixed
Ich hatte das gleiche Problem auf meiner Website. Nach dem Debuggen fand ich die Ursache. Es ist Yandex Metrica js-Bibliothek. Es ruft ajax-request auf die gleiche Seite zu berechnen, Ladezeit und einige andere params.
Verwenden Sie es? Wenn nicht, öffnen Sie chrome dev-panel und suchen Sie im http-request. Kann es sein Antrag für die favicon oder etc.
InformationsquelleAutor Ramil Amerzyanov
Gibt es viele Gründe, dieses zu verursachen, so würde ich vorschlagen, Sie mit dem best practice:
Wenn Sie einen neuen Datensatz in der DB sind, sollten Sie init der Logik, mit eine POST-Anforderung.
Den nicht-code-Probleme leicht vermieden werden: nun .htaccess-Sache, Firebug, was, anzeigen, tracking-Sache...
InformationsquelleAutor karmiphuc
Ist es kein problem mit Ihrem code.Firebug oder ähnlichen tools machen können Doppel-Anfrage manchmal. Auch die Metrik-Skripte (yandex metrica, chartbeat, etc) auf Ihrer Seite tun können, dasselbe Verhalten. Sollten Sie Einsicht in diese Situationen.
Um zu Debuggen, können Sie sich anmelden insert-Anfragen, und Sie können überprüfen, um herauszufinden was falsch ist.
Wenn Sie mit linux-Umgebung ;
Fügen Sie eine log-Zeile, um Ihren code :
Öffnen Sie eine Konsole-Fenster und geben Sie (log-Verzeichnisses hängt von Ihrer Server Konfiguration)
Und dann rufen Sie Ihre Seite einfügen. Bei jeder Anfrage kann man sehen, was passiert ist.
InformationsquelleAutor lazek
Ich denke mal diesen code aus index.php die front-controller-für alle Anforderungen.
Wenn der browser holt sich die Seite es in der Regel versucht man favicon.ico zu. Und wenn favicon fehlt, die zweite Anfrage wird bearbeitet Sie Ihre php-Datei wieder. Überprüfen kannst du das
Annahme durch schreiben $_SESSION['REQUEST_URI'] zur DB.
Empfehle ich nicht ändern-Daten im GET-Anfragen und-research web-server zuzugreifen, melden Sie sich von Zeit zu Zeit.
InformationsquelleAutor artoodetoo
Dein code scheint in Ordnung, und sollte es wahrscheinlich durch externe plugins, die Sie verwenden, die senden eine 2. Anfrage jeder Zeit.
Wenn Sie mit Google Chrome, wäre es wahrscheinlich durch diesen bug, https://bugs.chromium.org/p/chromium/issues/detail?id=123121. Dieser Fehler bewirkt, dass Chrome redirect jeden Wunsch in index.php also das PHP script wird zweimal ausgeführt.
Dies kann behoben werden, verwenden Sie den folgenden code, je nach website.
Kann man auch Debuggen mit
debug_print_backtrace
: http://php.net/debug_print_backtrace.Alternativ können Sie
SQL UNIQUE Constraint
zu verhindern, dass doppelte Zeilen eingefügt werden können, in den ersten Platz. Erfahren Sie mehr unter http://www.w3schools.com/sql/sql_unique.asp.Nur ein Hinweis: Es gibt
mysql()
sind veraltet, verwenden SieMySQLi
statt.InformationsquelleAutor Panda
Es ist, weil Sie laufen
mysql_query($sql)
zweimal. Versuchen Sie es ohne echo die$result
.InformationsquelleAutor hendarwin