SQL UPDATE und Variablen unbekannter Werte

Lobedan

Mitglied
Hi,

ich bin mir nicht sicher ob es hier her oder ins SQL Forum gehört wenns falsch sein sollte bitte verschieben!

Ich habe ein SQL UPDATE Statement das mit unbekannten Variablen arbeitet. Unbekannt heißt das die Variable durch $_POST festgelegt wird und durch eine Variable der Wert im Array bestimmt wird also so:

PHP:
$kurz = $g['kurz'];
$zahl = $_POST[$kurz];

Im Code will ich so arbeiten:

PHP:
	 $db->query("UPDATE 
            ".$prefix."palast
          SET
            ".$kurz." = '".$zahl."'
		  WHERE 
            uid='".$_SESSION['USER_ID']."' AND id='".$_GET['pid']."'");

bekomm aber eine Fehlermeldung die mir eigendlich unbegreiflich ist da beide Variablen ja belegt sind und die Variable $prefix ja auch funktioniert

Code:
Notice: Fehler bei dem Ausführen eines Mysql-codes!
Mysql-Code: UPDATE fdl_palast SET = '' WHERE uid='2' AND id='1'
Mysql-fehlermeldung: 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 '= '' WHERE uid='2' AND id='1'' at line 4 in C:\Dokumente und Einstellungen\Gilden Online\Desktop\Webserver\htdocs\hp\fdl\inc\mysql.class.php on line 74

Also hat jemand eine Idee warum das nicht stimmt? Viel kann ich da auch nicht probieren aber es will einfach nicht :(
 
Mach doch mal
PHP:
echo "<pre>";
var_dump($g);
var_dump($_POST);
echo "</pre>";

Das SQL-Statement ist sehr wohl falsch, denn es fehlt die zu ändernde Spalte.
 
Zuletzt bearbeitet:
Deine 4 Zeilen ergeben

Code:
array(16) {
  ["bdl"]=>
  string(3) "261"
  ["kra"]=>
  string(3) "234"
  ["kri"]=>
  string(7) "2345345"
  ["ste"]=>
  string(5) "23445"
  ["har"]=>
  string(1) "0"
  ["hel"]=>
  string(3) "656"
  ["man"]=>
  string(1) "0"
  ["tur"]=>
  string(6) "456456"
  ["aug"]=>
  string(1) "0"
  ["kat"]=>
  string(1) "0"
  ["bru"]=>
  string(1) "0"
  ["hof"]=>
  string(1) "0"
  ["gro"]=>
  string(1) "0"
  ["kok"]=>
  string(1) "0"
  ["zuc"]=>
  string(1) "0"
  ["save"]=>
  string(9) "Speichern"
}

Das Hilft mir ehrlich gesagt nicht viel weiter
 
Hm, warum taucht da kein zweiter Array auf? Wie überträgst du dein Formular? Kannst du das mal posten?

Außerdem gibt es in $g kein Element mit dem Namen 'kurz', die Elemente darin haben alle nur mit 3 Zeichen.
 
Zuletzt bearbeitet:
Es ist nicht sehr elegant aber wenns hilft

PHP:
$inhalt.='<form action="palast.php?src=b&pid='.$_GET['pid'].'" method="post">
				<table cellpadding=4 cellspacing=1 border=0 width="100%">
							<tr><td colspan="2" class="oben" align="left"><b>Gebäude bearbeiten</b></td></tr>							
								<tr>
									<td width="50%" valign="top">									
										<table cellpadding=4 cellspacing=1 border=0 width="100%">';
										$i=0;
										while ($geb[1] = $db->ar($select_geb_def_1)) {
										
											if (($i%2)  == '0') { $class = "w"; } else { $class = "g"; }
														
										$select_stufen_by_palast_1 = $db->query("SELECT ".$geb[1]['kurz']." FROM ".$prefix."palast WHERE id='".$_GET['pid']."' AND uid='".$_SESSION['USER_ID']."'");
										$s[1] = $db->ar($select_stufen_by_palast_1);
									$inhalt.='
											<tr>
												<td width="50%" class="'.$class.'"><b>'.$geb[1]['name'].'</b></td>
												<td width="50%" class="'.$class.'">Stufe &nbsp;<input type="text" name="'.$geb[1]['kurz'].'" value="'.$s[1][0].'" size=6></td>
											</tr>'; $i++;
											}
											$inhalt.='
										</table>
									</td>
									<td width="50%" valign="top">
										<table cellpadding=4 cellspacing=1 border=0 width="100%">';
										$a=0;
										while ($geb[2] = $db->ar($select_geb_def_2)) {
											if (($a%2)  == '0') { $class = "g"; } else { $class = "w"; }
										$select_stufen_by_palast_2 = $db->query("SELECT ".$geb[2]['kurz']." FROM ".$prefix."palast WHERE id='".$_GET['pid']."' AND uid='".$_SESSION['USER_ID']."'");
										$s[2] = $db->ar($select_stufen_by_palast_2);
									$inhalt.='
											<tr valign="top">
												<td width="50%" class="'.$class.'"><b>'.$geb[2]['name'].'</b></td>
												<td width="50%" class="'.$class.'">Stufe <input type="text" name="'.$geb[2]['kurz'].'" value="'.$s[2][0].'" size=6></td>
											</tr>'; $a++;
											}
							$inhalt.='</table>								
									</td>
								</tr>
								<tr>
					<td class="g" colspan=2 align="center"><input type="submit" name="save" value="Speichern">&nbsp;<input type="reset" name="res" onClick="window.location.replace(\'palast.php?hid='.$_GET['pid'].'\')" value="Verwerfen"></td>
								</tr>				
							</table><br>';

$g kommt aus mysql_fetch_array in der Spalte sind alle Kürzel gespeichert und in der fdl_palast sind alle Kürzel einzelne Spalten in die die Integerwerte kommen sollen
 
Da ich leider nicht weiß, welche Spalte nun geändert werden soll, kann ich dir nur sagen, das diese Anweisung nicht korrekt ist:

PHP:
$kurz = $g['kurz'];

Denn es gibt im Array $g kein Element mit der Bezeichnung 'kurz'. Dann könnte es natürlich sein, das du den Kürzel-Eintrag nicht in deine Datenbank geschrieben hast.
 
Könnte es sein, das $g im globalen Scope liegt und du den Query innerhalb einer Funktion ausführst? Ich meine das so:

PHP:
// Nur temporär statisch, bei dir wahrscheinlich mysql_fetch...
$g = array('foo' => 'bar', '1' => '2', 'kurz' = 'blub') ;

function foobar()
{
  $kurz = $g['kurz'];
}

Wenn das so ist, müsstest du $g entweder an die Funktion als Parameter übergeben oder $g als global deklarieren:

PHP:
function foobar()
{
   global $g; // << das ist aber böse
}
 
Nein, dann nicht.

Ich bin mit meinem Latein erst mal am Ende. Du kannst aber noch etwas tun:

PHP:
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);

Vielleicht findest du damit was raus. Schreib das an den Anfang deines Scripts (z.B. index.php)
 
Zurück