Wo liegt der (Syntax)) Fehler versteckt?

A5 Infoschlampe

Erfahrenes Mitglied
Hi ich möchte die ausgefüllten Text felder (die bezeichnung sollten wohl alle stimmen) in die datenbank eintrage und habe mir dazu eine eigene funktion geschrieben (DBC_2 - funzt auch 100%).

allerdings trägt er mir den Datensatz einfach nicht in die DB ein, kA wieso. vielleicht hab ich ja irgendwo son kleinen schei.... fehler eingetippt, aber meine augen sagen mir es ist alles korrekt. findet ihr was?


----
// Zusatzcheck ob alle felder ausgefüllt sind
if (($myusername!="")AND ($cboa_was!="") AND ($cboa_treu!="") AND ($cboa_kuehlschrank!="") AND ($txt_single_seit!="") AND ($cboa_single_seit!="") AND ($cboa_alter!="") AND ($cboa_schuechtern!="") AND ($cboa_macho!="") AND ($txt_partner!="") AND ($txt_du!=""))
{
// voherige db schliessen
mysql_close();

// Hier fehler ? trägt nicht in db ein
$tmp_5 = DBC_2 ("INSERT INTO single_boerse (user_name,was,treu,kuehlschrank,single_seit_z,single_seit_e,alter,schuechtern,macho,er,du,dtsort) VALUES ('$myusername','$cboa_was','$cboa_treu','$cboa_kuehlschrank','$txt_single_seit','$cboa_single_seit','$cboa_alter','$cboa_schuechtern','$cboa_macho','$txt_partner','$txt_du');");

mysql_close();

echo "OK"; // das erscheint bei mir am ende, aber der eintrag in der db ist nicht da

} // ende von Zusatzfeld check if
---

mist,...naja danke an die wos versuchen ;)
 
Ich glaube nicht, dass dort ein Semikolon zuviel ist (eins für den SQL-String und eins um die Zeile abzuschliessen - oder irre ich mich). Außerdem müßte doch das mysql_query() in der Funktion DBC_2 stehen - ansonsten sehe ich keinen Grund für die Funktion. Velleicht solltest Du auch den Code der Funktion posten.

Vielleicht liegt es den der gemischten Verwendung von " und ' , weil

$var = "Welt";
$test = "Hallo $var" entspricht : Hallo Welt
$test = 'Hallo $var' entspricht : Hallo $var

Bin mir aber nicht ganz sicher!


Übrigens, soweit mir bekannt ist kannst Du den folgenden Teil auch weglassen, wenn Du sowieso alle Felder einträgst :
(user_name,was,treu,kuehlschrank,single_seit_z,single_seit_e,alter,schuechtern,macho,er,du,dtsort)
dann müssen allerdings alle Werte in der richtigen Reihenfolge stehen.


Gruß
 
du');");
Das Semikolon da muss weg!


Zu:

$var = "Welt";
$test = "Hallo $var" entspricht : Hallo Welt
$test = 'Hallo $var' entspricht : Hallo $var

Wenn das ein PHP Script ist was läuft müßte das so aussehen:

$var = "Welt";
$test = "Hallo $var" //entspricht : Hallo Welt
$test = 'Hallo $var' //entspricht : Hallo $var

Beides ist richtig, egal ob du " oder ' verwendest. Du solltest dich aber der Überschaubarkeit her auf eines einigen :D
 
Vielleicht kann ja auch jemand sagen welches Semikolon weg muß das erste oder das zweite und besonders warum. Also ich bleibe bei meiner Meinung, dass kein Semikolon zuviel ist (siehe Erklärung weiter oben). Wenn ich damit falsch liege, dann möchte ich doch auch wissen, wo meine Wissenslücke ist.:confused:

Ansonsten war mein Beispiel weniger als lauffähiges Skript gedacht sondern eher als Anschauung. Damit wollte ich nur zum Ausdruck bringen, dass wenn die Variable in "" eingeschlossen ist, wird der Inhalt ausgegeben. Ist sie in '' eingebettet, so wird die Variable nicht beachtet. Nun haben wir eine Vermischung von "'$var','$var'" - die Frage ist doch, wie interpretiert PHP dieses. Sollte es nicht besser heissen : "'".$var."','".$var."'".

Bitte klärt mich über diese Sachen auf, da auch ich meinen Wissensdurst stillen muß.:)

Gruß
 
OK, ich versuches es :)

zu den Variablen:

Also ich schreibe meine Varis immer so:
PHP:
$text = "Hallo, ".$name.","<br>wie geht es dir?";

So wie du sagst wäre das die perfekteste Möglichkeit, allerdings ist das wiederrum geschmackssache eines jeden Programmierers.

Wenn du deine Variablen mit ' begrenzt dann kannst du sie nicht im Echo Tag direkt ausgeben. So wie du es schon gesagt hast. Deswegen auch die obere Schreibweise.

Anmerkung:
Ich habe auch noch nie gesehen das man Variablen mit ' eigrenzt.
Du kannst in einer Variable HTML Tag mit ' festlegen, also so:
PHP:
$test = "<table border='0' width='100%'>";
Das hat den Vorteil das du nicht immer einen Backslash vorstellen musst. Bps.: \"

Zum falschen Semikolon:
$tmp_5 = DBC_2 ("INSERT INTO single_boerse (user_name,was,treu,kuehlschrank,single_seit_z,single_seit_e,alter,schuechtern,macho,er,du,dtsort) VALUES ('$myusername','$cboa_was','$cboa_treu','$cboa_kuehlschrank','$txt_single_seit','$cboa_single_seit',
'$cboa_alter','$cboa_schuechtern','$cboa_macho','$txt_partner','$txt_du');");

Das viertletzte Zeichen im SQL String ist ein Semikolon, das ist falsch und wird von SQL als Fehlerdargestellt (oder auch nicht) auf jeden Fall geht es nicht.
 
Erstmal ein dickes Dankeschön für die Erklärungen. Ich muß ehrlich zugeben, dass ich gerade mal in meine eigenen PHP-Skripte reingeschaut hab und feststellen musste ,dass ich dort nirgends einen SQL-String mit einem Semikolon abgeschlossen habe (auweia). Also hab ich heute doch etwas über drei Sachen gelernt : Ausgabe von Variablen, SQL-Syntax in PHP und :) erst Informieren und dann Antworten :) !

Gruß und Dank an Fatility und natürlich an alle anderen auch
 
Niemand ist perfekt und ich war auch immer Dankbar wenn mir jemand geholfen hat. Leider bekommst in vielen Newgroup immer nur Verweise auf URLs oder bekommst die Netiquette zugeschickt...

Naja, wenn was ist einfach posten, wir versuchen zu helfen :D:D
 
das ist vielleicht ne schei.... wallah. *aufreg über sich selbst*

ich seh einfach den fehler nicht (erster thread oben)
erstmal danke für die massige beteiligung ;)

also
HIER habe ich euch mal ein ausschnitt aus der sql datenbank gemacht.

die funktion DBC_2 funktioniert 100%ig, da ich diese in sämtlichen anderen modulen verwende und diese auch alles korrekt macht - sie verbindet halt nur mit der datenbank und führt den sql befehl als parameter aus. habe sie aber dennoch unten hingeschrieben.

und so sieht jetzt die zeile ohne semikolon aus und leicht verändert. ich habe das "dtsort" am ende rausgenommen, da dies ja ein timestamp ist und der normalerweise automatisch eingetragen wird. und das die autoincrement id am anfang fehlt ist ja auch logisch - also hier die zeile:

---
DBC_2 ("INSERT INTO single_boerse (user_name,was,treu,kuehlschrank,single_seit_z,single_seit_e,alter,schuechtern,macho,er,du) VALUES ('$myusername','$cboa_was','$cboa_treu','$cboa_kuehlschrank','$txt_single_seit','$cboa_single_seit','$cboa_alter','$cboa_schuechtern','$cboa_macho','$txt_partner','$txt_du')");
---

und hier zur info DBC_2:

---
function DBC_2 ($tbl)
{

global $dbc_intern;


$dbname= "xxx"; //$g_dbname;
$table=$tbl;
$dbuser="xxx";
$dbpassword="xxx";

$connect = mysql_connect("localhost", $dbuser, $dbpassword);
$dbc_intern = @mysql_db_query ($dbname, $table,$connect);

}
---

sonst funktioniert das INSERT, SELECT und der ganze kram problemlos, nur an dieser EINEN zeile sitz ich schon seit ner woche - wallah was ein zeitverlust :mad: :p

vielen dank für eure lösungsvorschläge - vielleicht sieht ja wirklich jemand den Fehler!

ps: Die text und eingabefelder sind garantiert richtig bezeichnet mit der *name* eigenschaft, die bin ich auch schon tausendmal druchgegangen :(

ciaoi
 
DBC_2 ("INSERT INTO single_boerse (user_name,was,treu,kuehlschrank,single_seit_z,single_seit_e,alter,schuechtern,macho,er,du)
VALUES ('$myusername','$cboa_was','$cboa_treu','$cboa_kuehlschrank','$txt_single_seit','$cboa_single_seit','$cboa_alter','$cboa_schuechtern','$cboa_macho','$txt_partner','$txt_du')");
Das würde ich schonmal ganz anderst lösen :D
Mache es mal so:
PHP:
$strSQL = "INSERT INTO single_boerse (user_name,was,treu,kuehlschrank,single_seit_z,single_seit_e,alter,schuechtern,macho,er,du) 
VALUES ('$myusername','$cboa_was','$cboa_treu','$cboa_kuehlschrank','$txt_single_seit','$cboa_single_seit','$cboa_alter','$cboa_schuechtern','$cboa_macho','$txt_partner','$txt_du')";

// Falls du pruefen willst ob SQL String korrekt hier ausgeben!
// echo $strSQL;
// Dann hier die Funktion aufrufen!
DBC_2 ( $strSQL);
Vielleicht findest du hier den Fehler und irgendein Feld wird nicht richtig übergeben!
und hier zur info DBC_2:

---
function DBC_2 ($tbl)
{

global $dbc_intern;

$dbname= "xxx"; //$g_dbname;
$table=$tbl;
$dbuser="xxx";
$dbpassword="xxx";

$connect = mysql_connect("localhost", $dbuser, $dbpassword);
$dbc_intern = @mysql_db_query ($dbname, $table,$connect);

}

Ich würde auch diese Funktion wenn überhaupt anderst schreiben. Eigentlich sehe ich darin keinen Sinn außer es ist eine methode einer Classe aber das wird es nicht sein da die Verweisungen fehlen :p

Das global $dbc_intern brauchst du eigentlich nicht. Um damit weiter zu arbeiten schreibst einfach unter

$dbc_intern ....
noch ein
return $dbc_intern;

Somit hätte deine Funktion einen Rückgabewert, aber ich denke das weisst du wenn du Funktionen einsetzt :)

====================================================================

Hier noch was für dich für die Fehlersuche:

PHP:
function error($text) {
  $no = mysql_errno();
  $msg = mysql_error();
  echo "<p><b>[".$text."]</b><br>( ".$no." : ".$msg." )<p>\n";
  exit;
}

Aufrufen tust du das so:

$strSQL = "SELECT bla bal bal ....";
$result = mysql_query ( $strSQL, $conn ) or error("Fehler in DB");

Viel Glück!!
 

Neue Beiträge

Zurück