PHP Prob mit IF-Schleifen und MySQL

aegaes

Grünschnabel
Hi ich habe hier ein Problem mit dem quelltext: und zwar führt der, wenn ich mehrere Eingaben mit + machen will immer nur den letzten SQl-befehl vom Quelltext aus ... würde mich super freuen, wenn mir wer sagt woran das liegt, bzw. mir sagt wie ichs anders machen kann :)
Code:
   <?php
      if(! isset($_POST[abschicken])){
   	  include ('eintragen.htm');
   	  exit;
      }
      
      $server		  = "localhost";
      $user			= "#####";
      $pass			= "#######";
      $database		= "#####";
      $table		   = "artefakte";
      $table2		  = "benutzerdaten";
      $id			  = "$_POST[id]";
      $anzahl		  = "$_POST[anzahl]";
      $kaderium		= "$_POST[kaderium]";
      $nano			= "$_POST[nano]";
      $stasis		  = "$_POST[stasis]";
      $nahrung		 = "$_POST[nahrung]";
      $prodium		 = "$_POST[prodium]";
      $methodeanzahl   = "$_POST[methodeanzahl]";
      $methodekaderium = "$_POST[methodekaderium]";
      $methodenano	 = "$_POST[methodenano]";
      $methodestasis   = "$_POST[methodestasis]";
      $methodenahrung  = "$_POST[methodenahrung]";
      $methodeprodium  = "$_POST[methodeprodium]";
   	 
      $_SESSION["user_id"] = "$id";
      $date	   = date("d.m.y u\m H:i:s");
      
      $verbindung = @mysql_connect($server, $user, $pass)
   	  or die ("Konnte keine Verbindung zur Datenbank herstellen!");
   	  
      mysql_select_db($database, $verbindung)
   	  or die ("SQL-Fehler: " . mysql_error());
      
   // Anzahl----------------------------------------------------------------------------------   
   if ($methodeanzahl == 'gleich'){ 
     $sql = "UPDATE $table SET  AID='$id', Anzahl='$anzahl', datum='$date' WHERE AID='$id'";
   	$res=mysql_query($sql);
     }
   else if ( $methodeanzahl == 'plus') {
      $sql ="SELECT * FROM $table WHERE AID = $id ";
   	$result = mysql_query($sql);
   	$row = mysql_fetch_array($result);
   	  $anzahlaktuell	= $row['Anzahl'];
   	  $anzahlanzahl	 = $anzahlaktuell + $anzahl;
      $sql = "UPDATE $table SET  AID='$id', Anzahl='$anzahlanzahl', datum='$date' WHERE AID='$id'";   
   	$result = mysql_query($sql);   
      }
   else if ( $methodeanzahl == 'minus') {
      $sql ="SELECT * FROM $table WHERE AID = $id ";
   	$result = mysql_query($sql);
   	$row = mysql_fetch_array($result);  
   	  $anzahlaktuell	= $row['Anzahl'];
   	  $anzahlanzahl	 = $anzahlaktuell - $anzahl;
      $sql = "UPDATE $table SET  AID='$id', Anzahl='$anzahlanzahl', datum='$date'  WHERE AID='$id'";	   
      }
      
   // Kaderium---------------------------------------------------------------------------------   
   if ($methodekaderium == 'gleich'){
      $sql = "UPDATE $table SET  AID='$id', Kaderium='$kaderium', datum='$date' WHERE AID='$id'";
   	$res=mysql_query($sql);
      }
   else if ( $methodekaderium == 'plus') {
      $sql ="SELECT * FROM $table WHERE AID = $id ";
   	$result = mysql_query($sql);
   	$row = mysql_fetch_array($result);  
   	  $kaderiumaktuell	  = $row['Kaderium'];
   	  $kadkad	 = $kaderiumaktuell + $kaderium;
      $sql = "UPDATE $table SET  AID='$id', Kaderium='$kadkad', datum='$date'  WHERE AID='$id'";	   
      }
   else if ( $methodekaderium == 'minus') {
     $sql ="SELECT * FROM $table WHERE AID = $id ";
   	$result = mysql_query($sql);
   	$row = mysql_fetch_array($result);
   	  $kaderiumaktuell	= $row['Kaderium'];
   	  $kadkad	 = $kadaktuell - $kaderium;
      $sql = "UPDATE $table SET  AID='$id', Kaderium='$kadkad', datum='$date'  WHERE AID='$id'";
      }
      
   // Nano --------------------------------------------------------------------------------------   
   if ($methodenano == 'gleich'){
     $sql = "UPDATE $table SET  AID='$id', Nano='$nano', datum='$date' WHERE AID='$id'";
     $res=mysql_query($sql);
      }
   else if ( $methodenano == 'plus'){
     $sql ="SELECT * FROM $table WHERE AID = $id ";
   	 $result = mysql_query($sql);
   	 $row = mysql_fetch_array($result);  
   	   $nanoaktuell	  = $row['Nano'];
   	   $nanonano	 = $nanoaktuell + $nano;
      $sql = "UPDATE $table SET  AID='$id', Nano='$nanonano', datum='$date'  WHERE AID='$id'";	   
      }
   else if ( $methodenano == 'minus') {
      $sql ="SELECT * FROM $table WHERE AID = $id ";
   	$result = mysql_query($sql);
   	$row = mysql_fetch_array($result);
   	  $nanoaktuell	= $row['Nano'];
   	  $nanonano	 = $nanoaktuell - $nano;
      $sql = "UPDATE $table SET  AID='$id', Nano='$nanonano', 
   		   datum='$date'  WHERE AID='$id'";
      }
      
   // Stasis ----------------------------------------------------------------------------------   
   if ($methodestasis == 'gleich'){
     $sql = "UPDATE $table SET  AID='$id', Stasis='$stasis', datum='$date' WHERE AID='$id'";
     $res=mysql_query($sql);
      }
   else if ( $methodestasis == 'plus') {
      $sql ="SELECT * FROM $table WHERE AID = $id ";
   	$result = mysql_query($sql);
   	$row = mysql_fetch_array($result);  
   	  $stasisaktuell	  = $row['Stasis'];
   	  $stasisstasis	 = $stasisaktuell + $stasis;
      $sql = "UPDATE $table SET  AID='$id', Stasis='$stasisstasis', datum='$date'  WHERE AID='$id'";	   
      }
   else if ( $methodestasis == 'minus') {
      $sql ="SELECT * FROM $table WHERE AID = $id ";
   	$result = mysql_query($sql);
   	$row = mysql_fetch_array($result);
   	  $stasisaktuell	= $row['Stasis'];
   	  $stasisstasis	 = $stasisaktuell - $stasis;
      $sql = "UPDATE $table SET  AID='$id', Stasis='$stasisstasis', datum='$date'  WHERE AID='$id'";
      }
    
   // nahrung-----------------------------------------------------------------------------------   
   if ($methodenahrung == 'gleich'){
     $sql = "UPDATE $table SET  AID='$id', Nahrung='$nahrung', datum='$date' WHERE AID='$id'";
     $res=mysql_query($sql);
      }
   else if ( $methodenahrung == 'plus') {
      $sql ="SELECT * FROM $table WHERE AID = $id ";
   	$result = mysql_query($sql);
   	$row = mysql_fetch_array($result);  
   	  $nahrungaktuell	  = $row['Nahrung'];
   	  $nahrungnahrung	 = $nahrungaktuell + $nahrung;
 $sql = "UPDATE $table SET AID='$id', Nahrung='$nahrungnahrung', datum='$date' WHERE AID='$id'";	 
      }
   else if ( $methodenahrung == 'minus') {
      $sql ="SELECT * FROM $table WHERE AID = $id ";
   	$result = mysql_query($sql);
   	$row = mysql_fetch_array($result);
   	  $nahrungaktuell	= $row['Nahrung'];
   	  $nahrungnahrung	 = $nahrungaktuell - $nahrung;
      $sql = "UPDATE $table SET  AID='$id', Nahrung='$nahrungnahrung', 
   		   datum='$date'  WHERE AID='$id'";
      }
   
   // prodium ---------------------------------------------------------------------------------   
   if ($methodeprodium == 'gleich'){
     $sql = "UPDATE $table SET  AID='$id', Prodium='$prodium', datum='$date' WHERE AID='$id'";
     $res=mysql_query($sql);
      }
   else if ( $methodeprodium == 'plus') {
      $sql ="SELECT * FROM $table WHERE AID = $id ";
   	$result = mysql_query($sql);
   	$row = mysql_fetch_array($result);  
   	  $prodiumaktuell	  = $row['Prodium'];
   	  $prodiumprodium	 = $prodiumaktuell + $prodium;
 $sql = "UPDATE $table SET AID='$id', Prodium='$prodiumprodium', datum='$date' WHERE AID='$id'";	 
      }
   else if ( $methodeprodium == 'minus') {
      $sql ="SELECT * FROM $table WHERE AID = $id ";
   	$result = mysql_query($sql);
   	$row = mysql_fetch_array($result);
   	  $prodiumaktuell	= $row['Prodium'];
   	  $prodiumprodium	 = $prodiumaktuell - $prodium;
      $sql = "UPDATE $table SET  AID='$id', Prodium='$prodiumprodium', datum='$date'  WHERE AID='$id'";
      }
      
      
      if($sql !="")
   	  mysql_query($sql) 
   		 or die("SQL-Fehler: " . mysql_error());
   				  
   				  
     // mysql_free_result($res);
     // mysql_close($verbindung);
    
   ?> 
   
   <!-- <meta http-equiv="Refresh" content="5; URL=index.php"> -->
 
Zuletzt bearbeitet:
Hab den fehler schon selbst gefunden :P

if($sql !="")
mysql_query($sql)
or die("SQL-Fehler: " . mysql_error());

Das müsste unter jdem update befehl stehen^^
 
Probier mal Folgendes:
PHP:
<?php

	if( !isset($_POST['abschicken']) ) {
		include 'eintragen.htm';
		exit;
	}

	$database = 'example';
	$table = 'example';
	$daten = array(
		'anzahl'        => $_POST['anzahl'],
		'kaderium'      => $_POST['kaderium'],
		'nano'          => $_POST['nano'],
		'stasis'        => $_POST['stasis'],
		'nahrung'       => $_POST['nahrung'],
		'prodium'       => $_POST['prodium']
	);
	$methoden = array(
		'anzahl'        => $_POST['methodeanzahl'],
		'kaderium'      => $_POST['methodekaderium'],
		'nano'          => $_POST['methodenano'],
		'stasis'        => $_POST['methodestasis'],
		'nahrung'       => $_POST['methodenahrung'],
		'prodium'       => $_POST['methodeprodium']
	);
	$_SESSION['user_id'] = $_POST['id'];
	$date = date('d.m.y \u\m H:i:s');

	$verbindung = @mysql_connect()
		or die('Konnte keine Verbindung zur Datenbank herstellen!');

	mysql_select_db($database, $verbindung)
		or die('SQL-Fehler: '.mysql_error());


	foreach( $methoden as $key => $value ) {
		$spalte = preg_replace('/^(.)/e', 'strtoupper("\\1")', strtolower($key));
		switch( $methoden[$key] ) {
			case 'plus':
				$zusatz = ' `'.$spalte.'` + ';
			break;
			case 'minus':
				$zusatz = ' `'.$spalte.'` - ';
			break;
			default:
				$zusatz = '';
		}
		$query = sprintf('
			UPDATE
			        `'.$table.'`
			  SET
			        `'.$spalte.'` = %s "'.mysql_escape_string($daten[$key]).'",
			        `datum`       = "'.$date.'"
			  WHERE
			        `AID`         = '.intval($_POST['id']).'
			', $zusatz);
		echo '<pre>'.$query.'</pre>';
		$res = mysql_query($query)
			or die('SQL-Fehler: '.mysql_error());
	}

	mysql_free_result($res);
	mysql_close($verbindung);

?>
Übrigens solltest du Datenbank-, Tabellen-, Index-, Spalten- und Alias-Namen immer kleinschreiben.
 
Gumbo hat gesagt.:
Das ist IMHO Ansichtssache. Ich kann z.B. die "Unterstrich-Syntax" überhaupt nicht leiden und nutze zur Trennung einzelner Wörter lieber Großbuchstaben.

Viel wichtiger ist jedoch folgendes (was Du ja in dem Code korrigiert hast):
Fehler beim Ansprechen von Array-Elementen:
http://www.tutorials.de/forum/showpost.php?p=1104581&postcount=2 hat gesagt.:
Erklärung: Wenn du keine Anführungszeichen verwendest, wird der Teil zwischen den eckigen Klammern als Name einer Konstante ausgewertet. Da eine derartige Konstante aber nur in den seltensten Fällen definiert ist, nimmt der PHP-Parser kulanterweise an, dass der Programmierer eigentlich einen String mit dem Namen der Konstante als Inhalt meinte. Existiert allerdings eine derartige Konstante, kann sie einen komplett anderen Wert enthalten und so zu unerwartetem Verhalten führen. Von daher ist man auf der sicheren Seite, wenn man gleich einen String verwendet – also mit Anführungszeichen arbeitet.
Gruß hpvw

PS @Autor des Threads:
Bitte nutze die richtigen Code Tags, [ php ]code[ /php ] für PHP-Quelltexte, [ html ]code[ /html ] für HTML-Quelltexte und [ code ]code[ /code ] für sonstige Quelltexte, natürlich ohne die Leerzeichen. Das macht die Quelltexte übersichtlicher. Für kurze Code-Teile im Fließtext (z.B. Variablen- oder Funktionsnamen) kannst Du [ mono ]kurzer Code-Fetzen[ /mono ] verwenden.
 
Ich will auch nicht bestreiten, dass es Vorteile hat und möchte ehrlich gesagt auch keine lange Diskussion anfachen. Mir persönlich gefällt es eben mit Großbuchstaben besser und ich bin so daran gewöhnt, dass ich damit keine Probleme habe. Mich störte nur das "immer".

Insbesondere bei Aliasnamen würde ich Deinem "immer" widersprechen, da diese auch wunderbar automatisiert ausgelesen und z.B. in einem Template als Spalten-Überschrift verwendet werden können. Wenn die Werte in einem Skript verarbeitet werden, ist es natürlich sinnvoll Bezeichner zu verwenden, die man als Array-Index oder Objekt-Variable verwenden kann.

Gruß hpvw
 
Zurück