PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wie mysql spalte für update über variable auswählen


ESAD
2005-07-29, 09:52:17
$andern = "update seiteninhalt set '$wahl' = '$textarea'";

wie bekomme ich das zum laufen er sag mir immer dass der syntax falsch ist

clm[k1]
2005-07-29, 10:35:44
$andern = "update seiteninhalt set '$wahl' = '$textarea'";

wie bekomme ich das zum laufen er sag mir immer dass der syntax falsch ist


UPDATE tabelle SET feld='wert' WHERE spaltenname='wert';


entweder er stört sich an den hochkommas bei '$wahl' oder deine variablen haben einen falschen inhalt... oder beides.

clm[k1]

darph
2005-07-29, 11:22:34
$andern = "update seiteninhalt set '$wahl' = '$textarea'";

wie bekomme ich das zum laufen er sag mir immer dass der syntax falsch ist
Du brauchst den Spaltennamen nicht in Anführungszeichen setzen.

ESAD
2005-07-29, 12:35:05
wenn ich den nicht unter ' oder ` setzt nimmt er das doch als text und nicht als variable?

darph
2005-07-29, 13:05:40
wenn ich den nicht unter ' oder ` setzt nimmt er das doch als text und nicht als variable?


Du meinst von PHP aus?

Nein.


$a = "test text";

$b = "dies ist ein $a";
echo($b); // Gibt aus: dies ist ein test text

$c = 'dies ist ein $a';
echo($c); // Gibt aus: dies ist ein $a

$d = 'dies ist ein ';
echo($d.$a); // Gibt aus: dies ist ein test text


In PHP werden in " gekapselte Variablen verarbeitet, in ' gekapselte bleiben Strings.

Am sinnvollsten machst du es wenn du die Variablen aus den Strings auslagerst.

$andern = "UPDATE seiteninhalt SET ".$wahl." = '".$textarea."';";


Oder, schöner weil übersichtlicher, so:
$query = sprintf('INSERT INTO user VALUES ("", "%s", "%s", %s", "%d");', $this->Name, $this->Email, $this->Password, $this->Status);

Wie das mit den Platzhaltern geht, steht hier: http://www.php.net/manual/de/function.sprintf.php


Es hat sich, wenn es auch nicht zwingend vorrausgesetzt wird, eingebürgert, die SQL Befehle in Großbuchstaben zu schreiben. Macht die ganze Sache übersichtlicher, weill man dann auf den ersten Blick Bezeichner und Werte von Befehlen unterscheiden kann. ;)

ESAD
2005-07-29, 13:31:54
wenn ich das jetzt volgerndermaßen aufrufen möchte

UPDATE tabellenname SET spaltenname = neuerwert

$andern = "UPDATE seiteninhalt SET ".$wahl." = '".$textarea."'";


Müsste ich dann nicht schreiben
$andern = "UPDATE tabellenname SET '".$spaltenname."' = '".$neuerwert."'";
weil spaltenname ein string ist


wobei ich mir den spaltennamen so hole
$abfrage = "SELECT spalte from seiteninhalt";
$erg = mysql_query($abfrage);
while (list($spaltenname) = mysql_fetch_row($erg))
echo $spaltenname;

darph
2005-07-29, 13:43:01
Müsste ich dann nicht schreiben
$andern = "UPDATE tabellenname SET '".$spaltenname."' = '".$neuerwert."'";
weil spaltenname ein string ist

Aus PHP Sicht ist das alles ein String. PHP puzzlet das alles zusammen, bastelt einen String draus und übergibt diesen dann an den SQL Server.

Da du aber eh ""

Ein query ist einfach ein String.

Beispiel:UPDATE tabellenname SET spalte1 = '125';
Das ist das, was du - im Endeffekt - an den SQL Server übergeben willst. Der Spaltenname darph dabei nicht in Anführungszeichen - egal ob doppelt oder einfach - stehen. Für SQL stehen nur Werte in Anführungszeichen, wenn ich mich recht erinnere.

Also machst du zuerstmal
$query = "UPDATE tabellenname SET spalte1 = '125';";

Und dann willst du Variablen und keine fixen Werte verwenden:
$query = "UPDATE tabellenname SET " . $spalte . " = '" . $wert . "';";

Der Hintergrund ist folgender:
$query = "UPDATE alter SET age = age+1"; würde den Wert jeder Zelle in der Spalte age um 1 erhöhen.
$query = "UPDATE alter SET age = 'age+1'";
Dies würde in jeder Zelle in der Spalte age den String "age+1" eintragen. Merke: Werte werden in Anführungszeichen gesetzt, Verweise auf Spalten (also die Spaltennamen) nicht. :)

darph
2005-07-29, 13:46:36
Aber mal abgesehen davon, verstehe ich nicht, was du vorhast.

Du holst die eine gewisse Menge an Spaltennamen aus seiteninhalt und füllst dann - für jede dieser Spalten jede einzelne Zelle mit $neuerwert. Das klingt irgendwie nach ziemlich viel Redundanz...

ESAD
2005-07-29, 14:12:06
das ist so ich gebe einen spaltennamen mit einem formular ein den hole ich mir dann wieder aus der db und gebe auf einer neuen seite dann den neuen wert für die spalte ein (die so heißt wie der zuallererst eingegebene wert) welcher dann beim drücken eines buttons geschrieben wird (ich überschreibe also den spalteninhalt wobei ich hald aussuchenkann welche spalte überschrieben wird)


wenn ich den befehl jetzt so ändere wie du geschrieben hast kommt folgenden meldung

You have an error in your SQL syntax. Check the manual that corresponds to your MySWL server version for the right syntax to user near '='neu eingebener wert'' at line 1
Befehl:UPDATE seiteninhalt SET = 'neu eingegebener wert';

mir kommt es so vor wie als würde er den spaltennamen nicht übernehmen? :confused:

darph
2005-07-29, 14:19:24
Poste mal bitte den kompletten Codeabschnitt.

clm[k1]
2005-07-29, 14:33:16
das ist so ich gebe einen spaltennamen mit einem formular ein den hole ich mir dann wieder aus der db und gebe auf einer neuen seite dann den neuen wert für die spalte ein (die so heißt wie der zuallererst eingegebene wert) welcher dann beim drücken eines buttons geschrieben wird (ich überschreibe also den spalteninhalt wobei ich hald aussuchenkann welche spalte überschrieben wird)


Dann erklär mir mal wie du ohen WHERE-klausel bestimmen willst welche Zeile angesprochen wird?


wenn ich den befehl jetzt so ändere wie du geschrieben hast kommt folgenden meldung

You have an error in your SQL syntax. Check the manual that corresponds to your MySWL server version for the right syntax to user near '='neu eingebener wert'' at line 1
Befehl:UPDATE seiteninhalt SET = 'neu eingegebener wert';

mir kommt es so vor wie als würde er den spaltennamen nicht übernehmen? :confused:

was du nicht sagst ;)

darph schrieb es ja schon: poste mal den code-abschnitt.

clm[k1]

darph
2005-07-29, 14:36:53
Wetten es liegt an der Variable? $dingsbums statt $_POST["dingsbums"]? ;)

clm[k1]
2005-07-29, 14:52:28
Wetten es liegt an der Variable? $dingsbums statt $_POST["dingsbums"]? ;)

Gut möglich... da ist vielleicht jemand RegisterGlobals=On gewöhnt!? :D


clm[k1]

ESAD
2005-07-29, 14:55:43
so das wäre der code wo geschrieben wird


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<?
include("dbconnect.php");
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>admin</title>
</head>
<body>
<?

echo "gewählte seite: ";
$abfrage = "SELECT etc1 from seiteninhalt";
$erg = mysql_query($abfrage);
while (list($wahl) = mysql_fetch_row($erg))
echo $wahl;



?>




<form action="speichern.php" method="post" action="">
<textarea name="textarea" cols="150" rows="20" wrap="OFF"></textarea><br>
<input //senden button type="submit" value="text updaten">
</form>

<?

$abfrage = "SELECT etc1 FROM seiteninhalt";
$erg = mysql_query($abfrage);
while (list($wahl) = mysql_fetch_row($erg))
$htmltext = nl2br(htmlentities($textarea, ENT_QUOTES));

$andern = "UPDATE seiteninhalt SET " .$wahl. " = '" .$htmltext. "' ";
$update = mysql_query($andern) or die (mysql_error().'<br/>Befehl:'.$andern);

?>



<?
mysql_close();
?>
</body>
</html>

darph
2005-07-29, 15:03:14
while (list($wahl) = mysql_fetch_row($erg))
$htmltext = nl2br(htmlentities($textarea, ENT_QUOTES));

$andern = "UPDATE seiteninhalt SET " .$wahl. " = '" .$htmltext. "' ";
$update = mysql_query($andern) or die (mysql_error().'<br/>Befehl:'.$andern);


Eh... die Variable $wahl existiert nur innerhalb der While Schleife und diese begrenz sich mangels {} Klammern nur auf die eine nächste Zeile.
while (list($wahl) = mysql_fetch_row($erg))
{
$htmltext = nl2br(htmlentities($textarea, ENT_QUOTES));

$andern = "UPDATE seiteninhalt SET " .$wahl. " = '" .$htmltext. "' ";
$update = mysql_query($andern) or die (mysql_error().'<br/>Befehl:'.$andern);
}



Was macht list()?

ESAD
2005-07-29, 15:08:27
:love3:
Ein ganz großes DANKE


zu list
list() wird verwendet, um eine liste von variablen innerhalb einer operation zuzuweisen

wenn man jetzt mehrere spalten abfragt
list($Name,$Art) = mysql_fetch_row($erg);

darph
2005-07-29, 15:10:09
:love3:
Ein ganz großes DANKE
Gern geschehen. :)

Aber zum Glück ist diese Community ja für sowas "nicht mehr zu gebrauchen". ;(

clm[k1]
2005-07-29, 15:20:02
Gern geschehen. :)

Aber zum Glück ist diese Community ja für sowas "nicht mehr zu gebrauchen". ;(

Nun lass dir doch nicht von so einem Gast-Troll die Stimmung verderben ;)

ach ja, @ESAD: Es wird empfohlen als einleitendes tag <?php zu benutzen weil die Kurzform <? nicht immer verfügbar ist (soll heißen nur wenn es in der php.ini aktiviert ist)

Gruß
clm[k1]