Rechnen mit übergebenen Variablen (url)

dalion

Mitglied
Hallo zusammen!

Folgende Problemstellung:

Ich lasse eine Variable (Anzahl an Mitfahreren; anzahl_mitfahrer) an ein anderes Skript übergeben via url.

Dort möchte ich diesen Wert von dem, in der Datenbank (mysql) hinterlegten, Wert abziehen.
Doch er weigert sich und erhöht den Wert sogar um eins....

Hier mal beide Skripte:

angebot auswählen:

PHP:
<?php
session_start();
// Seiten-Parameter
$title = 'Angebotsdetails';
// Seiten-Parameter ENDE
include( 'inc/db_connect.inc.php' );
include( 'inc/header.inc.php' );
include( 'inc/navi.inc.php' );
$id = $_GET['id'];
$abfrage = "SELECT * FROM angebote Where id_angebot = '".mysql_escape_string($id)."'";
$ergebnis = db_query('db_boeker', $abfrage);

$daten=mysql_fetch_array($ergebnis);
?>
  ID: <?php echo $daten['id_angebot'] ?><br>
  Anbieter: <?php echo $daten['anbieter']?><br>
  Von <?php echo $daten['startstadt']?><br>
  nach <?php echo $daten['zielstadt']?><br>
  am <?php echo $daten['datum']?><br>
  um <?php echo $daten['startzeit']?><br>
  Raucher-PKW?:   <?php echo $daten['raucher']?><br>
  Fahrtkosten je Sitzplatz: <?php echo $daten['fahrtkosten']?> &euro;<br>
  Bitte w&auml;hlen Sie die gew&uuml;nschte Anzahl an Sitzpl&auml;tzen, <br> die Sie buchen m&ouml;chten: <?php echo '<select name="menge" size="1">';
  for($i=1; $i <= $daten['anzahl_mitfahrer']; $i++){echo "<option>{$i}</option>";}
  echo '</select>';?><a href="buchen.php?id=<?php echo $daten['id_angebot'];?>&i=<?php echo $i;?>">buchen</a><br>
  
<?php
  include( 'inc/footer.inc.php' );
?>

angebot buchen bzw. DB-Einträge ändern:

PHP:
<?php
session_start();
// Seiten-Parameter
$title = 'Buchen';
// Seiten-Parameter ENDE
include( 'inc/db_connect.inc.php' );
include( 'inc/header.inc.php' );
include( 'inc/navi.inc.php' );
$id = $_GET['id'];
$_POST['i'] = $_GET['i'];

$search = "SELECT id_user FROM login Where username = '".$_SESSION['username']."'";
$question = db_query('db_boeker', $search);
$idtag=mysql_fetch_array($question);

$abfrage = "SELECT * FROM angebote Where id_angebot = '".mysql_escape_string($id)."'";
$ergebnis = db_query('db_boeker', $abfrage);
$daten=mysql_fetch_array($ergebnis);

$mitfahrerneu = $daten['anzahl_mitfahrer']-$_POST['i'];

 	$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 = anzahl_mitfahrer-".$mitfahrerneu." WHERE id_angebot = '".$daten['id_angebot']."'";
  $update = db_query('db_boeker',$aendern);
?>

Wäre super, wenn Ihr da einen Lösungsansatz hättet.

Grüße
 
Mach ich doch gern, aber ich kann nicht hellsehen. Ich kenne weder den Wert von $daten['anzahl_mitfahrer'] noch von $_POST['i']; daher wird das etwas schwierig. Ich gebe dir eine Hilfe zur Selbsthilfe:

- Du liest das Tutorial von Yaslaw: PHP/MySQL Debug Queries
- Du baust zu mindest nach jedem Query-String, der zusammen gebaut wird ein echo ein, das man sieht, was der Query eigentlich tun würde. Hier ein Beispiel:

PHP:
     $sql = 'INSERT INTO fahrten (id_angebot, id_user)
                          VALUES
                 (\''.$daten['id_angebot'].'\',
                  \''.$idtag['id_user'].'\')'; 

     printf("Zeile %d: SQL: %s<br/>", __LINE__, $sql);

Wenn du immer noch nicht auf die Lösung kommst, wirst du wohl die Tabellen-Struktur un ein Beispiel inkl. SQL-Statements (durch das printf() oben ausgegeben) hier posten müssen.
 
Sorry für Doppelpost, mir ist da grad noch was aufgefallen. Du ziehst doppelt ab. Angenommen in anzahl_mitfahrten steht 5, in $_POST['i'] steht 1. Dann ergibt sich folgender Ablauf:

PHP:
     $mitfahrerneu = $daten['anzahl_mitfahrer']-$_POST['i']; // Jetzt hat $mitfahrerneu den Wert 4

     $sql = 'INSERT INTO fahrten (id_angebot, id_user)
                          VALUES
                 (\''.$daten['id_angebot'].'\',
                  \''.$idtag['id_user'].'\')';

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

  // Hier wird von anzahl_mitfahrer (immer noch 5 in der Datenbank) die $mitfahrerneu abgezogen, was bedeutet
  // 5 - 4 = 1 => Das müsste als Ergebnis nach dem Query in der DB stehen.
  $aendern = "UPDATE angebote Set anzahl_mitfahrer = anzahl_mitfahrer-".$mitfahrerneu." WHERE id_angebot = '".$daten['id_angebot']."'";
  $update = db_query('db_boeker',$aendern);

Willst du das tatsächlich so haben? Ich vermute es soll eher so ablaufen:

PHP:
$mitfahrerneu = $daten['anzahl_mitfahrer']-$_POST['i'];

     $sql = 'INSERT INTO fahrten (id_angebot, id_user)
                          VALUES
                 (\''.$daten['id_angebot'].'\',
                  \''.$idtag['id_user'].'\')';

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

  // Hier nicht abziehen sonder einfach auf $mitfahrerneu festlegen
  $aendern = "UPDATE angebote Set anzahl_mitfahrer = ".$mitfahrerneu." WHERE id_angebot = '".$daten['id_angebot']."'";
  $update = db_query('db_boeker',$aendern);
 
Danke. Da hast Du recht. War doppelt und habe es geändert. Bin auch fleißig auf Fehlersuche.
Der Witz ist nur der... Nun macht er Folgendes:

Ich habe ein Angebot erstellt mit 4 Plätzen.
Habe drei Plätze (ab)gebucht.

Und in der DB stehen nun als Verfügbar: -1!

Er hat also statt 3 Plätze 5 Plätze abgezogen.

Das konnte ich nicht glauben, also habe ich es nochmal probiert.
Diesmal 8 Plätze angeboten.

Drei Plätze gebucht.

Nun steht in der DB bei dem Angebot -1.

Hier stimmt etwas ganz und gar nicht...
 
So, also langsam, in $daten['anzahl_mitfahrer'] stand für das Angebot also die Zahl 5. Dann hast du über das Formular in $_POST['i'] eine 3 eingetragen und submitted. Richtig? Das Resultat war dann -1 in der DB nach der UPDATE auf die anzahl_mitfahrer durchgeführt wurde, korrekt?
 
Hast du schon mal den UPDATE-Query ausgegeben? Bau es mal so um:

PHP:
// $_POST['i'] = $_GET['i'];  // << Was ist das eigentlich für ein Schmarrn?

$i = intval($_GET['i']); // Sicherheit geht vor!

$search = "SELECT id_user FROM login Where username = '".$_SESSION['username']."'";
$question = db_query('db_boeker', $search);
$idtag=mysql_fetch_array($question);

$abfrage = "SELECT * FROM angebote Where id_angebot = '".mysql_escape_string($id)."'";
$ergebnis = db_query('db_boeker', $abfrage);
$daten=mysql_fetch_array($ergebnis);

$mitfahrerneu = $daten['anzahl_mitfahrer']-$i;

echo "mitfahrerneu ist jetzt $mitfahrerneu<br/>";

// 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']."'";

echo "Wir werden nun folgenden Query an die DB senden: $aendern<br/>";
$update = db_query('db_boeker',$aendern);

Dann postest du mal die Ausgaben von "mitfahrerneu ist jetzt..." und "Wir werden nun folgenden Query an die DB senden:..."
 
So! Folgendes gibt er aus:

mitfahrerneu ist jetzt -8
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 ('', '24')'
 
Das bedeutet, dein SELECT auf angebote hat schon kein gültiges Ergebnis zurück gegeben. Füge doch bitte noch folgende Sachen ein:

PHP:
// Füge mich an den Anfang des Scripts
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
echo "<pre>";
var_dump($_GET);
echo "</pre>";
PHP:
$abfrage = "SELECT * FROM angebote Where id_angebot = '".mysql_escape_string($id)."'";
// Suche die Zeile und schreibe darunter
echo "Wir senden die Abfrage an angebote: $abfrage";

Dann postest du die beiden Ausgaben (var_dump und echo) und eventuelle Fehler und Warnungen.
 
Er gibt folgendes aus:

array(2) {
["id"]=>
string(2) "18"
["i"]=>
string(1) "8"
}

Sowie:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\nico\buchen.php:4) in C:\xampp\htdocs\nico\buchen.php on line 7

Und:

Wir senden die Abfrage an angebote:'SELECT * FROM angebote Where id_angebot = '18''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')'
 

Neue Beiträge

Zurück