Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Sieht hier jemand vielleicht, wieso ich immer nur die erste POST-Serie in die DB krieg, aber die anderen 4 nicht?

Die inserts an sich gehen in der DB, hab ich schon getestet. Die Schleife läuft auch richtig durch, weil ich ja die Ausgaben bekomme.

<?php
session_start();
include('opendatabase.php');

//Kampf in Tabelle einfügen
for($i = 0; $i < 5; $i++) {
//Name in Vorname und Name zerlegen
$pos = strpos($_POST["schuetze".$i], " ");
$name = substr($_POST["schuetze".$i], 0, $pos);
$vorname = substr($_POST["schuetze".$i], $pos+1, strlen($_POST["schuetze".$i])-$pos);

//SchützenID aus DB holen
$result = mysql_query(sprintf(
"SELECT ID FROM Schuetze WHERE name=\"%s\" AND vorname=\"%s\"",
$name, $vorname));
$schuetzeID = mysql_fetch_array($result);

//Schütze in Ergebniss Tabelle eintragen
$query = sprintf(
"INSERT INTO Ergebnisse VALUES (LAST_INSERT_ID( ), \"%s\", \"%s\", \"%s\")",
$schuetzeID['ID'], $_POST['KampfID'], $_POST["s".$i."erg"]);

//DEBUG:
echo $query."<br>";
mysql_query($query);
}
echo '<b>Daten wurden gespeichert!</b>';

?> [/PHP]

Der Code sieht an sich in Ordnung aus. Hast du mal mit print_r() deine $_POST-Variable ausgegeben und geschaut, was drinsteht? Vielleicht liegts ja nur an irgendeinem falschen Index oder so. Und lass dir auf jeden Fall mal die Fehlermeldung von MySQL zurückgeben, falls da eine ist.

mfg

kLeiner_HobBes

@pavloeglyi

Wen meinst du? Mich oder anonymousal??

mfG

kLeiner_HobBes

  • Autor

Ich lasse mir ja unten nach dem

//DEBUG:

den komplett fertig zusammengebauten Query-String ausgeben, und der ist ja in Ordnung.

Wenn ich die Ausgabe aus dem Browser kopiere und in MySQL direkt einfüge, geht das ja auch.

Und der Code oben, stellt bei mir immer nur den INSERT im ersten Schleifen durchlauf in die DB, die nächsten aber nicht mehr.

Hab auch schonmal ne Pause (mit sleep(x)) eingebaut, weil ich dacht, die inserts kommen vielleicht zu schnell, aber das hat auch nichts gebracht.

*ratlosschaut

Also, mir kommen jetzt nur noch zwei Ideen:

1. Lass mal das LAST_INSERT_ID() weg und ersetze es durch eine 0. Hierbei gehe ich jedoch davon aus, dass du das entsprechende Feld mit auto_increment deklariert hast.

2. ersetze mal den zweiten mysql_query mit folgendem Aufruf:

mysql_query($query) or die(mysql_error() );

und schaue, ob er immer noch keine Fehlermeldung bringt

HTH

Benjamin

  • Autor

Wie oft denn noch? :rolleyes:

Die SQL Statements die ich da zusammen baue, werden alle 5 korrekt ausgegeben, und ich kann auch alle 5 in der Datenbank einzeln ausführen! (per copy & paste)

@ kleiner Hobbes:

Das mit dem INSERT_LAST_ID() werd ich mal testen. Das Feld ist mit autoincrement declariert. Wenn ich die Seite öfter aufrufe, wird ja korrekt durchnummeriert, nur halt immer nur das erste Statement ausgeführt.

Das Problem liegt hier ja auch bei LAST_INSERT_ID(). Beim ersten Mal funktionierts, weil noch keine ID zuvor eingefügt wurde. Jeder folgende Aufruf versucht nun, die zuletzt eingefügte ID als ID zu verwenden, was bei einem Primary Key zu Konflikten führt.

Davon abgesehen kannst du dir in PHP sprintf() sparen, da du die Variablen direkt in den String eintragen kannst:


$sql="INSERT INTO tabelle (feld1,feld2,feld3) VALUES('$feld1','$feld2','$feld3')"
[/PHP]

Des weiteren solltest du bei einem Insert immer die jeweiligen Felder (wie im Beispiel) angeben, damit du später bei einer Strukturänderung die Tabelle auch immer noch richtig füllst.

Wenn du das so machst, dann lass das Feld der ID weg und schon müssten alle 5 Abfragen (bzw Inserts) funktionieren.

Versuchs mal so:

[PHP]
<?php
session_start();
include('opendatabase.php');

for($i = 0; $i < 5; $i++) {
$pos = strpos($_POST["schuetze".$i], " ");
$name = substr($_POST["schuetze".$i], 0, $pos);
$vorname = substr( $_POST["schuetze".$i], $pos+1, strlen($_POST["schuetze".$i])-$pos);
$result = mysql_query("SELECT ID FROM Schuetze WHERE name='$name' AND vorname='$vorname'");
if ($result && mysql_num_rows($result)) {
list($schuetzeID)=mysql_fetch_row($result);
mysql_free_result($result);
$query = "INSERT INTO Ergebnisse (schuetzeID, KampfID, Ergebnis) VALUES ('$schuetzeID[ID]', '$_POST[KampfID]', '$_POST[s{$i}erg]')";
mysql_query($query);
}
echo $query."<br>";
echo mysql_error(),'<br/>';
}
echo '<b>Daten wurden gespeichert!</b>';
?>

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.