INSERT INTO mit Mysql/PHP Formulardaten in Datenbank schreiben

xcompile

Mitglied
Hallo Leute
Ich habe folgendes Problem:
Ich habe ein Formular mittels Daten aus einer Datenbank generiert welches textareas und normale text-input Felder enthält.
dieses habe ich per $_POST weitergeleitet und einen entsprechenden INSERT INTO String generiert um die Daten einzutragen, dabei ist $insert_fields ein String welcher alle Felder durch Kommata getrennt enthält und $insert_values ein String welcher die dazugehörigen Werte enthält:

PHP:
$sql="INSERT INTO contentdata  (".$insert_fields.") VALUES (".$insert_values.")";
PHP:
INSERT INTO contentdata (mainentry,subentry,footentry,index,html_content,php_content,explain,html_timestamp,php_timestamp,linkname,html_author,php_author,rights,showmenu) VALUES (123,23,22,'home.php','','','',0,0,'endlich',1,1,0,0)

Als dieser nicht funktioniert hat habe ich mir einen String in phpMyAdmin generieren lassen. Dieser hat dann auch in meinem Speicherscript funktioniert. danach habe ich entsprechend der Syntax die phpMyAdmin angewendet hat auch meinen String generiert.....ohne Erfolg obwohl die Syntax zu 100% identisch war.

kann mir da jemand weiterhelfen? :confused:
 
Zuletzt bearbeitet:
Nee es funktioniert nicht.
Könnte es vielleicht daran liegen das ich die zwei Schlüsselworte index und explain benutze?

Hier noch der String mit dem es funktioniert(von phpMyAdmin), er ist halt statisch und nicht generiert. wie schon gesagt er funktioniert auch über mein Script, also nicht nur direkt in phpMyAdmin.

PHP:
$sql="INSERT INTO `contentdata` (`mainentry`, `subentry`, `footentry`, `index`, `html_content`, `php_content`, `explain`, `html_timestamp`, `php_timestamp`, `linkname`, `html_author`, `php_author`, `rights`, `showmenu`) VALUES ('12', '23', '2', 'home.php', '', '', '', '0', '0', 'test', '1', '1', '0', '0')";
 
Zuletzt bearbeitet:
Also erstmal sieht dein SQL Script nicht aus wie das von PHPMyAdmin:

PHP:
 $sql="INSERT INTO contentdata (`$insert_fields`)  VALUES('$insert_values')";

Das Sollte jetzt funktionieren, wenn nicht poste mal was in den 2 Variablen steht, könnte sein das da der Fehler in der Reihenfolge liegt, oder zum Beispiel Hochkommas, kommas und Semikolons in den Variablen fehlen, würde dir das eh anders empfehlen:

PHP:
 $sql="INSERT INTO contentdata (`id`, `text1`, `text2`, `text3`, `textn`, )  VALUES('', '$text1', '$text2', '$text3', '$textn')";

Das sollte dir am Anfang helfen Fehler leichter zu finden und eingrenzen zu können
 
Zuletzt bearbeitet:
Ich hab zwei Variablen:
$insert_fields und $insert_values

Die $_POST Variable welche ich in die Datenbank eintragen möchte zerlege ich mit den beiden Funktionen array_values() und array_keys() jeweils in die Spaltennamen und die darin einzutragenden Werte. In einer For-Schleife fülle ich dann die Keys in $insert_fields und die entsprechenden Werte in $insert_fields:
Danach sehen die Variablen so aus:
$insert_fields="mainentry,subentry,footentry,index,html_content,php_content,explain,html_timestamp,php_timestamp,linkname,html_author,php_author,rights,showmenu"
$insert_values="123,23,20,'home.php','','','',0,0,'endlich',1,1,0,0"

damit setze ich dann denn SQL-String zusammen
$sql="INSERT INTO contentdata (".$insert_fields.") VALUES (".$insert_values.")";
 
Hallo, schau dir deinen Post eben mal fix an und was genau in den Variablen steht und vergleiche das einfach mal mit dem was ich oben gepostet habe, dann sollte dir der Fehler eigentlich auffallen.

Versuchs einfach mal ohne die Variablen und trags hart in das SQL Statemente ein, dann sollte das auch ohne Probleme funktionieren.
 
Leider weis ich vor der Generierung des INSERT INTO noch nicht wieviele und welche Felder ich hab(soll dynamisch auf verschiedene Tabellen anwendbar sein).
Hart eingetragen geht es. Ich habe mir mit phpMyAdmin mal den PHP-Code zur Abfrage generieren lassen:

PHP:
$sql="INSERT INTO `contentdata` (`mainentry`, `subentry`, `footentry`, `index`, `html_content`, `php_content`, `explain`, `html_timestamp`, `php_timestamp`, `linkname`, `html_author`, `php_author`, `rights`, `showmenu`) VALUES ('12', '23', '2', 'home.php', '', '', '', '0', '0', 'test', '1', '1', '0', '0')";
Der funktioniert auch, aber er ist eben statisch und nicht mit Variablen.
Doch wie schon weiter oben erwähnt - ich habe meinen SQL-String mal mit der identischen Syntax generiert...dieser funktioniert dann nicht obwohl er nach der Generierung identisch aussieht zu dem von phpMyAdmin.
:confused:

Also ich hab den String in den Variablen jetzt mal nach deinem ersten Vorschlag umgeändert:
PHP:
$insert_fileds="'mainentry','subentry','footentry','index','html_content','php_content','explain','html_timestamp','php_timestamp','linkname','html_author','php_author','rights','showmenu'";
$insert_values="'123,23,0,'home.php','','','',0,0,'test',1,1,0,0'";

$sql="INSERT INTO contentdata ('$insert_fields') VALUES ('$insert_values')";

Damit ergäbe sich dann folgendes SQL-Statement:
PHP:
INSERT INTO contentdata (''mainentry','subentry','footentry','index','html_content','php_content','explain','html_timestamp','php_timestamp','linkname','html_author','php_author','rights','showmenu'') VALUES ('123,23,0,'home.php','','','',0,0,'test',1,1,0,0')

Es funktioniert aber leider nicht(wenn die Umsetzung stimmt) :(
 
Zuletzt bearbeitet:
Servus,

ich glaub wir drehen uns bissel im Kreis. Setz mal anstatt der Werte die du in die Tabelle einfügen willst die Variablen ein, das sollte auf alle Fälle funktionieren.

So, dynamisch magst das dann haben, funktioniert auch, aber dir muss die Struktur der DB bzw. Tabelle klar sein, Felder etc. sonst reicht ein falsches Feld und es rappelt in der Kiste, eigentlich sollte das auch mit deinen Variablen gehen.

PHP:
$insert_fields="`mainentry`, `subentry`, `footentry`, `index`, `html_content`, `php_content`, `explain`, `html_timestamp`, `php_timestamp`, `linkname`, `html_author`, `php_author`, `rights`, `showmenu`";

$insert_values="'123', '23', '20', 'home.php', '', '', '', '0', '0', 'endlich', '1', '1' , '0', '0'"


$sql="INSERT INTO contentdata ($insert_fields) VALUES ($insert_values)";

dann versuch halt einfach mal das, habs gerade eben getestet bei mir läufts, dürfte an den "" im Insert Statemente gelegen haben, das hat SQL nicht verstanden, brauchst du auch net reinschreiben, der erkennt das auch so als Variable
 
Danke für deine Mühe
Die Syntax die du mir gegeben hast scheint zu funktionieren.
Jetzt hab ich mal wieder meinen Generator so umgeschrieben das er genau diese Syntax ausgibt(Ich lasse mir ja immer den String ausgeben um die Richtigkeit zu überprüfen). Wie schon zu erwarten war --- er funktioniert nicht.
Wie du schon sagst...wir drehen uns im Kreis rum. Der Fehler muss irgendwie beim Zusammensetzen des SQL-Strings zu finden sein....irgend ein verstecktes Zeichen oder so was in der Art, denn generieren kann ich mir den String ja wie ich möchte. Obwohl er optisch korrekt aussieht scheint er nicht zu funktionieren
deswegen hier mal der Generatorcode selbst(leider etw. schlampig),vielleicht bin ich ja blind:
PHP:
if($_POST['sent']==1)
{
$keys=array_keys($_POST);
$values=array_values($_POST);
/*
normale Textfelder sowie Textareas haben den namen "text_beispielname"
Zahlen haben den namen "int_beispielname"
Ein Problem stellt es noch dar das $_POST nicht nur text_ und int_ Felder liefert
sondern eben auch buttons und hiddens
*/

for($i=0;$i<=count($keys);$i++)
{

if($insert_values!="")
{
$insert_values.=", ";
$insert_fields.=", ";
}


if(eregi("int_",$keys[$i]))
{
//$insert_values.=prepare_4db ($values[$i], strlen($values[$i]), $lf = false);
if($values[$i]!=""&&$keys[$i]=="")
{
$insert_values.="'".$values[$i]."'";

}
else
{$insert_values.="' '";}
$insert_fields.="'".$keys[$i]."'";
}
else if(eregi("text_",$keys[$i]))
{
if($values[$i]!="")
{
//$insert_values.=prepare_4db ($values[$i], strlen($values[$i]), $lf = true);
$insert_values.="'".$values[$i]."'";

}
else
{$insert_values.="' '";}
$insert_fields.="'".$keys[$i]."'";
}
else
{
//nur eine Notlösung da sonst ein Komma  zuviel am Ende wäre
$insert_fields=substr($insert_fields,0,strlen($insert_fields)-2);
$insert_values=substr($insert_values,0,strlen($insert_values)-2);
break;
}






}
$insert_fields=eregi_replace("int_","",$insert_fields);
$insert_fields=eregi_replace("text_","",$insert_fields);

//- - - - - - --Hier das Funktionierende Statement mit statischen Werten- - - - - - - -
//$insert_fields="`mainentry`, `subentry`, `footentry`, `index`, `html_content`, `php_content`, `explain`, `html_timestamp`, `php_timestamp`, `linkname`, `html_author`, `php_author`, `rights`, `showmenu`"; 
 
//$insert_values="'123', '23', '20', 'home.php', '', '', '', '0', '0', 'endlich', '1', '1' , '0', '0'"; 
 
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
$sql="INSERT INTO contentdata ($insert_fields) VALUES ($insert_values)"; 
 


echo $sql;
$itraxx_data_obj->database_query($sql);
}
else
{
...
//Das Formular wird ausgegeben
...
}
 
Zuletzt bearbeitet:
Sers, also ziemlich kompliziertes Script hast du da gezimmert.

Hilfreich wäre auch noch das Formular an sich, das könntest mal noch posten, damit man man zusammenhängend hat, deine Erläuterungen im Quelltext sind leiter nicht sehr ergiebig.
 
Zurück