Rechnen mit übergebenen Variablen (url)

Kann es an diesem Ausdruck: $i++ aus dem Skript "Angebotsauswahl" (siehe ersten Post) liegen?

Ist in dieser Zeile
PHP:
for($i=1; $i <= $daten['anzahl_mitfahrer']; $i++){echo "<option>{$i}</option>";}
 
Nein, diese for-Schleife ist in einem völlig anderen Script.

Du kannst das var_dump und die pre's oben wieder entfernen, ich wollte nur sicher gehen, das da auch was rüber kommt. Offensichtlich ist es so.

Schritt für Schritt nähern wir uns dem Problem:

PHP:
$ergebnis = db_query('db_boeker', $abfrage);
$daten=mysql_fetch_array($ergebnis);

echo "<pre>";
var_dump($daten);
echo "</pre>";
 
Wir senden die Abfrage an angebote:'SELECT * FROM angebote Where id_angebot = '18''

array(22) {
[0]=>
string(2) "18"
["id_angebot"]=>
string(2) "18"
[1]=>
string(2) "24"
["id_user"]=>
string(2) "24"
[2]=>
string(8) "Hannover"
["startstadt"]=>
string(8) "Hannover"
[3]=>
string(5) "Messe"
["startpunkt"]=>
string(5) "Messe"
[4]=>
string(6) "Erfurt"
["zielstadt"]=>
string(6) "Erfurt"
[5]=>
string(10) "12.12.2015"
["datum"]=>
string(10) "12.12.2015"
[6]=>
string(8) "12:00:00"
["startzeit"]=>
string(8) "12:00:00"
[7]=>
string(1) "7"
["anzahl_mitfahrer"]=>
string(1) "7"
[8]=>
string(2) "10"
["fahrtkosten"]=>
string(2) "10"
[9]=>
string(2) "ja"
["raucher"]=>
string(2) "ja"
[10]=>
string(0) ""
["bemerkungen"]=>
string(0) ""
}

mitfahrerneu ist jetzt -1
Fehler: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 4
SQL = INSERT INTO fahrten (id_angebot, id_user) VALUES ('18', '24')'
 
Das -1 ist sogar richtig, das zeigt das var_dump() von $daten:

["anzahl_mitfahrer"]=>
string(1) "7"

Wenn man von 7 die Zahl 8 abzieht, kommt -1 raus, arithmetisch korrekt. Du müsstest also eine Prüfung einbauen:

PHP:
$mitfahrerneu = $daten['anzahl_mitfahrer']-$i;
if($mitfahrerneu >= 0)
{
  $sql = "INSERT INTO fahrten (id_angebot, id_user)
                          VALUES
                 ('".$daten['id_angebot']."',
                  '".$idtag['id_user']."')";
  $result = db_query('db_boeker',$sql);
 
  $aendern = "UPDATE angebote Set anzahl_mitfahrer = $mitfahrerneu WHERE id_angebot = '".$daten['id_angebot']."'"; 
  $update = db_query('db_boeker',$aendern);

  echo "Daten wurden erfolgreich gespeichert.";
}
else
{
  echo "Die maximale Anzahl an Mitfahrern wurde überschritten.";
}
 
Ja, aber ich habe ja nicht "8" eingegeben! Sondern nur drei. Ich weiß nicht woher er sich die "8" herholt.

Daher dachte ich, dass der Fehler bereit im Skript zuvor passiert.
 
Oh man, ich bin ja ein Hirni! Das hätte mir schon viel eher auffallen müssen:

Du kannst ein HTML-Auswahl-Feld (<select>) nicht als regulären Link übertragen, das muss in ein HTML-Formular und dann einen Submit-Button rein. Also in etwa so:

PHP:
<form action="buchen.php" method="get">
<input type="hidden" name="id" value="<?php echo $daten['id_angebot'];?>"/>
  Bitte w&auml;hlen Sie die gew&uuml;nschte Anzahl an Sitzpl&auml;tzen, <br> die Sie buchen m&ouml;chten:
  <select name="i" size="1">
<?php for($i=1; $i <= $daten['anzahl_mitfahrer']; $i++){echo "<option>{$i}</option>";}?>
  </select>
  <input type="submit"/>
</form>
 
Gut jetzt erkennt er die richtige Anzahl und subtrahiert diese scheinbar auch von den verfügbaren Plätzen, aber schreibt sie nicht in die Datenbank...

Stattdessen gibt er folgenden Fehler aus:

Fehler: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 4
SQL = INSERT INTO fahrten (id_angebot, id_user) VALUES ('18', '9')'

PHP:
$mitfahrerneu = $daten['anzahl_mitfahrer']-$i;
if($mitfahrerneu >= 0)
{


// Escapen bringt Verwirrung, besser ohne:
$sql = "INSERT INTO fahrten (id_angebot, id_user)
                          VALUES
                 ('".$daten['id_angebot']."',
                  '".$idtag['id_user']."')'";

$result = db_query('db_boeker',$sql);

$aendern = "UPDATE angebote Set anzahl_mitfahrer = ".$mitfahrerneu." WHERE id_angebot = '".$daten['id_angebot']."'";

$update = db_query('db_boeker',$aendern);
  echo "Daten wurden erfolgreich gespeichert.";
}
else
{
  echo "Die maximale Anzahl an Mitfahrern wurde überschritten.";
}
?>

Der Fehler müsste ja dann irgendwo in diesem Abschnitt stecken. Kann aber keinen Logikfehler entdecken...
 
Kein Logik-Fehler, aber ein syntaktischer welcher:

PHP:
// Escapen bringt Verwirrung, besser ohne:
$sql = "INSERT INTO fahrten (id_angebot, id_user)
                          VALUES
                 ('".$daten['id_angebot']."',
                  '".$idtag['id_user']."')"; // Hier war ein Single-Quote zuviel
 
Zurück