Problem mit MySQL-Abfrage

Zero2000

Erfahrenes Mitglied
Hallo

Ich habe da ein Problem mit einer Abfrage.

Ich lese aus einer Tabelle Bestände aus und zeige diese an.
Beim anzeigen habe ich Inputfelder für zwei bestimmte Spalten.
Wenn ich in diesen die Bestände ändere, setzt er mir alle Bestände auf 0.
Hier mal der Code wie die Abfrage i.M. aussieht.
PHP:
$res = mysql_query("SELECT * FROM ls_daten_gl");
      	$row = mysql_num_rows($res);
              
      	for($i=0;$i<$row;$i++)
	  	{
		mysql_query ("UPDATE 
                          `ls_daten_gl` 
                    SET 
                          `Id` = '".$Id[$i]."' ,
                          `bestand_eur` = '".$pal_eu[$i]."' * '".$eur_menge[$i]."', 
                          `bestand_ew` = '".$pal_ew[$i]."' * '".$ew_menge[$i]."',
						  `bestand_akt_neu` = '".$bestand_eur[$i]."' + '".$bestand_ew[$i]."' 
                    WHERE
                          `Id` = '".$Id[$i]."'") or die("FEHLER:<br><br>".mysql_error());  
      }
bestand_eur ist der Feldname in der tabelle der upgedatet werden soll.
$pal_eu und $pal_eur sind die beiden Spalten in die ich die Bestände eintrage.
$eur_menge und $ew_menge sind Werte in der DB mit denen multipliziert werden soll um bestand_eur rauszubekommen.

Ich steig da nicht mehr durch... :(

Danke und MfG Maik
 
Oder du versuchst es mal so:
PHP:
mysql_query ("UPDATE  
                          `ls_daten_gl`  
                    SET  
                          `Id` = '".$Id[$i]."' , 
                          `bestand_eur` = ".$pal_eu[$i] * $eur_menge[$i].",  
                          `bestand_ew` = ".$pal_ew[$i] * $ew_menge[$i].", 
                          `bestand_akt_neu` = ".$bestand_eur[$i] + $bestand_ew[$i]."  
                    WHERE 
                          `Id` = '".$Id[$i]."'") or die("FEHLER:<br><br>".mysql_error());
Du solltest dir auch sicher sein, dass die Felder in deiner Datenbanktabelle den richtigen Typ haben!

Gruß!
 
@birnkammer
Mein Array sieht so aus.
PHP:
Array ( [0] => 3 [1] => 5 [2] => 4 [3] => 8 [4] => 10 [5] => 7 [6] => 9 [7] => 2 [8] => 6 [9] => 1 [10] => 18 [11] => 16 [12] => 14 [13] => 13 [14] => 11 [15] => 12 [16] => 17 [17] => 19 [18] => 15 )

@TwoFaze
So gehts leider auch nicht...

Hier geht es um Fliesen. Ich habe einmal diese Abfrage mit m² und einmal mit Paletten.
Die mit m² funktioniert ja auch wunderbar, nur eben die mit den Paletten nicht, weil ich da eben rechne.

Komisch...

MfG Maik
 
Und in der MySQL Tabelle stehen dort wo das Ergebnis stehen sollte Nullen?
Wenn ja, dann schreib mal von welchem Typ die Felder sind..
 
Die haben alle VarChar(10).
Aus irgendeinem Grund hatte ich das damals genommen, statt dem Double oder Float.
Alle Berechnungen die ich sonst mache gehen ja auch.

Ich fasse nochmal zusammen:
Ich habe ein Feld in der Tabelle das heist bestand_eur und ein Feld in dem fest hinterlegt ist wieviel m² auf einer Palette ist.
Wenn ich nun in mein Eingabefeld bei Palette eine 1 schreibe müsste er mir das bei meiner Abfrage dann mit dem feld wo fest die m² hinterlegt sind multiplizieren und bei bestand_eur eintragen.

MfG Maik
 
Da müßtest du fast mehr von deinem Skript schicken. Versteh das nämlich im Moment nichr richtig ;) Aber vielleicht weiß ja auch noch jemand anderes Rat..!

Gruß!
 
Ok. Ist ja kein Geheimnis...
Also die datei von der ausgelesen wird:
PHP:
<?
####################################################
# Das ist die Datei in der die Lagermenge per Hand #
# geändert werden kann. Ähnlich einer Inventur.    #
####################################################

// Verbindung zur DB aufnehemen
include("db.inc.php");
echo "<img src='lager/inventur.gif' width='48' height='48' border='0'><font size='+1'>Inventur GresLuna...</font><br><br>";
echo "<b>Inventurliste! Hier können die Bestände per Hand verändert werden.</b><br>";


$res=mysql_query("SELECT * FROM ls_daten_gl ORDER BY sorte ASC");

//Formularbeginn
echo "<form method='post' action='index.php?action=lager&option=inventur2_gl_pal'>";

//Tabellenbeginn
echo "<table border='0' cellspacing='1' cellpadding='2' bgcolor='#000000'>";

//Tabellen-Überschrift
echo "<tr bgcolor='#dce3f4' align='center'><td><b>ID</b></td><td><b>Sorte</b></td><td><b>Bestand</b></td><td><b>EUR-m²</b></td><td><b>EUR-Pal.</b></td><td><b>EW-m²</b></td><td><b>EW-Pal.</b></td></tr>";

	while($row = mysql_fetch_assoc($res))
	{
	// Original ID mitschicken (versteckt)
	echo '<input type="hidden" name="Id[]" value="'.$row['Id'].'">';

	$count_eu = $row['bestand_eur']/$row['eur_menge'];
	$count_ew = $row['bestand_ew']/$row['ew_menge'];
	#$count_eu = round($count_eu, 2);
	$count_eu = number_format($count_eu,0,".",".");
	#$count_ew = round($count_ew, 2);
	$count_ew = number_format($count_ew,0,".",".");

//Tabellenzeile mit tabellen
echo '<tr bgcolor="#EDF3F4"><td bgcolor="#dce3f4">'.$row['Id'].'</td><td>'.$row['sorte'].'</td></td><td align=left>'.$row['bestand_akt_neu'].' m²</td><td>'.$row['bestand_eur'].' m²</td><td><input style="border:1px solid #000000;background:#ffffff;width:60;" type="text" name="counteu[]" value="'.$count_eu.'"></td><td>'.$row['bestand_ew'].' m²</td><td><input style="border:1px solid #000000;background:#ffffff;width:60;" type="text" name="countew[]" value="'.$count_ew.'"></td></tr>';
}

//Tabellenende
echo "</table><br>";
echo "<input style='background-color:#ffffff;border:1px solid #000000;font-size:10px;font-family:verdana' type='submit' name='submit' value='Inventur speichern'></form>";
mysql_close();
?>

Und das die Datei in der die Abfrage passiert:
PHP:
<?php
include("db.inc.php");
if(isset($submit))
{
		#error_reporting(E_ALL);
	  
      	$Id = $_POST['Id'];
      	//$sorte = $_POST['sorte'];
      	$bestand_akt_neu = $_POST['bestand_akt_neu'];
      	$bestand_eur = $_POST['bestand_eur'];
		$bestand_ew = $_POST['bestand_ew'];
    	
		// SELECT und UPDATE für beide Werke
      	$res = mysql_query("SELECT * FROM ls_daten_gl");
      	$row = mysql_num_rows($res);
              
      	for($i=0;$i<$row;$i++)
	  	{
		mysql_query ("UPDATE 
                          `ls_daten_gl` 
                    SET 
                          `Id` = '".$Id[$i]."' ,
                          `bestand_eur` = '".$counteu[$i]."' , 
                          `bestand_ew` = '".$countew[$i]."' ,
						  `bestand_akt_neu` = '".$bestand_eur[$i]."' + '".$bestand_ew[$i]."' 
                    WHERE
                          `Id` = '".$Id[$i]."'") or die("FEHLER:<br><br>".mysql_error());  
      }
	  
	  // Wenn Inventur erfolgreich...                                          
      if (mysql_affected_rows()>0)
      {
      echo "<img src='lager/inventur.gif' width='48' height='48' border='0'><font size='+1'>Inventur GresLuna...</font><br><br>";
	  echo "<b>Bestände wurden aktualisiert!</b><br>";
      }
      else
      {
	  echo "<img src='lager/inventur.gif' width='48' height='48' border='0'><font size='+1'>Inventur GresLuna...</font><br><br>";
	  echo "<b>Bestände wurden aktualisiert!</b><br>";
      }
}
?>

MfG Maik
 
Hi,

also der Vorschlag von TwoFaze sieht eher so aus als ob es klappen könnte. Setzt doch zusätzlich dazu noch die Formel in Klammern.

Hatte mal auch ein Problem wo nicht gerechnet wurde und da hat das Klammern geholfen.

Was mir auch komisch vorkommt :

Code:
if (mysql_affected_rows()>0)
      {
      echo "<img src='lager/inventur.gif' width='48' height='48' border='0'><font size='+1'>Inventur GresLuna...</font><br><br>";
      echo "<b>Bestände wurden aktualisiert!</b><br>";
      }
      else
      {
      echo "<img src='lager/inventur.gif' width='48' height='48' border='0'><font size='+1'>Inventur GresLuna...</font><br><br>";
      echo "<b>Bestände wurden aktualisiert!</b><br>";
      }

Es erscheint immer das die Bestände aktualisiert wurden. Oder seh ich da was falsch
 
Genau meine Bestände werden immer aktualisiert :-)
Ich habe da auch noch einen Fehler drin. Er schreibt nämlich immer das die Bestände nicht aktualisert wurden obwohl sie es doch sind.
Deswegen hatte ich das ELSE eigentlich auskommentiert. Habe es aber hier wahrscheinlich vergessen mit dazu zu schreiben...

Vielleicht liegt das Problem daran, das ich mir die Anzahl der Paletten ausrechnen lasse um diese in den Inputfeldern anzeigen zu lassen. Bei der Version mit den m² liegen mit diese ja schon vor....

Ich häng mal ein Bild dran zur Verdeutlichung.
In Bild 1 kann ich also die Bestände nach qm eingeben, was auch funktioniert, und in Bild 2 nach der Anzahl der Paletten die da sind.
Wie gesagt gibt es ein Feld in dem steht wieviel qm auf einer Palette sind.
Wenn ich also bei Paletten eine 2 eintrage müsste ich im Bestand dann z.B. 200m² haben.

MfG Maik
 

Anhänge

  • pal_qm.gif
    pal_qm.gif
    5,4 KB · Aufrufe: 14
Zurück