Warum klappt Speicherung nicht?

Don Stefano

Erfahrenes Mitglied
Und wieder einmal komme ich nicht weiter. Eine der letzten großen Hürden... die Datenspeicherung.

Stolz schon so weit gekommen zu sein, weiss ich nicht warum folgender Versuch Daten zu speichern nicht klappt.

Kurz zur Erklärung:
Das Ausfüllen der Antwort eines bestimmten Fragebogens liefert einen Wert von a,b,c oder d. Dieser Wert befindet sich dann in $antwort. Dieser Wert soll nun in eine zugehörige MySQL Tabelle gespeichert werden u.z. in eine bestimmte Zelle.

Jetzt der Code, darunter dann die Definition der 4 Variablen.

PHP:
//Zuerst soll in $Spalte der Name der Spalte in Abhängigkeit eines Zählers definiert werden (z.B. antwort3)
    $spalte = "antwort$zaehler";  
    
    $db->query("update $ergebnis SET $spalte='$antwort' where besitzerid='$besitzerID'");
$ergebnis = enthält den Namen der Tabelle (z.B. ergebnisDB)
$spalte = enthält den Namen der Spalte, in die geschrieben werden soll (z.B. antwort1)
$antwort = enthält den Wert der Antwort (also a,b,c oder d)
$besitzerID = soll dazu dienen, die Zeile des in der Session angemeldeten Teilnehmers anzuwählen

Dieses Vorgehen führt dann aber jedesmal mit
PHP:
if ($db->errno) die("Fehler ");
zum Abbruch und der Ausgabe "Fehler".

Ich habe dann versucht das Ganze mit einem insert Befehl zu realisieren:

PHP:
$db->query("insert into $ergebnis ($spalte) values('$antwort')where besitzerid='$besitzerID'");

was zum gleichen (Miss)erfolg führt :-(

Die Tabelle mit entsprechenden Benamungen besteht. Ich glaube das Problem liegt im Versuch eine Spalte mit einer Variabeln anzusprechen (hier $Spalte) und irgendwie in der Where Bedingung.

Wer kann mir helfen das zu realisieren was ich möchte ? Wer hat eine Idee, oder weiß schlichtweg wie es richtig geht ?
 
Wieso machst du es dir so verdammt umständlich? Schreib das Zeug doch einfach mal direkt in das Query rein.
 
Du könntest dir auch mal den von MySQL zurückgegebenen Fehler anschauen anstatt eine nichtssagende Fehlermeldung auszugeben..
 
also du schreibst da:
PHP:
$spalte = "antwort$zaehler";  
     	
     	$db->query("update $ergebnis SET $spalte='$antwort' where besitzerid='$besitzerID'");

richtiger wäre wohl ein:

PHP:
/* Die verbindung kannste natürlich auch über include etc. realisieren, denke das wirste schon haben, ich schreibs nur der vollständigkeit halber, damit du meien variablen kennst, die später verwendet werden. */
 
 $hostname_con = "host";
      $database_con = "datenbank";
      $username_con = "name";
      $password_con = "passwort";
 $con = mysql_pconnect($hostname_con, $username_con, $password_con) or die(mysql_error()); // das ist mit dem echten fehler gemeint, falls du damit noch nciht gearbeitet hast, der gibt dir allerdings meistens sowieso ne meldung zurück, die entweder nciht genau ist, oder die man teilweise überhaupt nicht glauben kann, teilweise ist se aber wirklich nützlich
      
      $spalte = "antwort_".$zaehler; // liefert dann wohl einen wert antwort_1 - so is das hüpscher, denke ich, als direkt dran
     
      mysql_select_db($database_co, $con);     // Datenbankauswahl
     $sql("UPDATE ".$tabelle." SET ".$spalte." = ' ".$antwort." ' WHERE besitzerid = ' ".$besitzerID." ' ; " ; // SQL-Abfrage
      mysql_querry($sql, $con); // SQL-Abfrage ausführen
wobei '" einfach dein ' ist mit einem " dahinter, bzw. umgekehrt. Die Variable selbst wird mit ".$variablenname." aus dem rest rausgenommen, weil sie sonst zu dem string gehören und nicht die variable eingesetzt wird sondern dort der text steht, den du schreibst.

Eine saubere SQL abfrage endet eigentlich mti einem ; (noch innerhalb des strings, auch wenns oft fehlerfrei ohne geht, man sollte sich einen gewissen sauberen programmierstil angewöhnen - oder zumindest einen eigenen und vor allem einen übersichtlichen ^^

Deshalb schreibe ich SQL-Befehle wie SELECT etc. immer groß, alle tabellen, datenbanken, attribute etc. sind klein, so gibt es keine verwechslungen.
 
Zuletzt bearbeitet:
CoC hat gesagt.:
Eine saubere SQL abfrage endet eigentlich mti einem ; (noch innerhalb des strings, auch wenns oft fehlerfrei ohne geht, man sollte sich einen gewissen sauberen programmierstil angewöhnen - oder zumindest einen eigenen und vor allem einen übersichtlichen ^^

Und wie im PHP-Referenzhandbuch zu [phpf]mysql_query[/phpf] geschrieben steht:
Anmerkung: Die Anfrage sollte nicht mit einem Semikolon enden.
 
gut da brauchma uns nich drum streiten ^^
ich mach den semikolon und finde es sauberer, schließlich gibz den in ner SQL abfrage auch - ich weiß, das auch viel ohne programmiert wird, mein server unterstützt zumindest beides - insofern ;) is mri das relativ egal - aber wenigstens hallte ich mich (inzwischen) immer daran, so kann ich das dann zur not per suchen und ersetzen ändern
 
Zuletzt bearbeitet:
Also irgendwie stelle ich mich zu umständlich an:

Mir gelingt es nicht mit if mysqli_error() (bei mir ist es statt mqsql mysqli) eine Fehlermeldung auszugeben. Was macht ich nun hierbei schon wieder falsch?

Ich habe den obigen Code (meinen ursprüglichen) einmal folgendermaßen ergänzt:

PHP:
$spalte = "antwort$zaehler";  
  	
  	$db->query("update $ergebnis SET $spalte='$antwort' where besitzerid='$besitzerID'");  
   if ($db->errno) die(mysqli_error());

Ich denke es macht nicht viel Sinn mit CoC´s Vorschlägen (vielen Dank!) zu beginnen, ohne in der Lage zu sein die Fehlermeldung auszugeben.

Ich erhalten dann folgende Meldung:

Code:
Warning:  mysqli_error() expects exactly 1 parameter, 0 given in C:\xampp\htdocs\don4\save.php on line 70

Zeile 70 ist hier die letzte Zeile.
 
Auch hier steht die Antwort wieder im PHP-Referenzhandbuch: [phpf]mysqli_error[/phpf] erwartet einen Parameter, wie auch die Fehlermeldung angibt.
 
Zurück