Problem mit mini-CMS

GStoert

Grünschnabel
Also... ich bin noch recht unerfahren in Sachen PHP und habe trotzdem vor kurzem angefangen (oder eher gesagt es versucht..) mir ein CMS zu programmieren. Nach einigen Fehlversuchen habe ich mich entschlossen, das ganze so zu programmieren, dass ich es möglichst auf alle meine anderen Seiten übertragen kann, was für erfahrene PHPler sicher selbstverständlich ist, mich allerdings bereits vor ein einige Probleme stellte.
Es handelt sich bei dem Script um eine einzige Seite, die je nach Inhalt der abgefragten MySQL Tabelle ein passendes Formular anzeigt (was auch gut ). Auch das Auslesen der Einträge um die Formularfelder damit zu füllen klappt problemlos.
Allerdings scheint bei der Eintragung in die MySQL Datenbank etwas nicht zu funktionieren, oder vielleicht ist es auch die Benennung der einzelnen Formular-Felder. Ich habe so ziemlich jede Variable einmal ausgeben lassen und alle Verhalten sich meines Erachtens nach richtig...trotzdem gehts net..
Wenn ich den Inhalt der ersten TEXTAREA-Feldes ändere, dann wird diese Änderung übernommen. Alle INPUT-Textfelder dagegen werden nicht gespeichert, egal ob beim ersten Eintrag oder in einem der anderen. Und auch das Hinzufügen eines neuen Eintrags über den hinteren Teil des FORMs ist nicht möglich.

Hier der Code, wenn das Formular abgeschickt wird (die Variable $aktion wird onSubmit auf 'aktion' gesetzt) und die Änderungen übernommen werden SOLLTEN:

PHP:
if(isset($aktion) && $aktion=='aktion')
{
//Anfang, wenn Änderung
$r=1;
$cur=0;
$qry_a= mysql_query(" SELECT * FROM cms_home", $sql);
$rows=mysql_num_rows($qry_a);
$c=1;
$cols=mysql_num_fields($qry_a);
$k=$cols-1;

while ($r < $rows)
	{
//while begin
	while ($c<$cols)
	{	if ($c==$k) 
			{$felder .= 't'.$c;
			$values.="'".${"t".$c."_".$r}."'";
			$set.="t".$c."='".${"t".$c."_".$r}."'";}
		else {$felder .= 't'.$c.', ';
			$values.="'".${"t".$c."_".$r}."', ";
			$set.="t".$c."='".${"t".$c."_".$r}."', ";}
		$c++;
		$id=${'id_'.$r};
	}
	if($r>=$rows)
		{$insert=" INSERT INTO cms_home ( ".$felder." ) values ( ".$values." ) ";
		mysql_query($insert, $sql) or die ('Fehler: '.mysql_error());}
	else{mysql_query(" UPDATE cms_home SET ".$set." WHERE id=$id ", $sql) or die ('Fehler: '.mysql_error());}
$r++;
$cur++;
//while end
}
//Ende, wenn Änderung
}

Und hier der Coder zum Generieren des Formulars..

PHP:
else{
$qry_a= mysql_query(" SELECT * FROM cms_home", $sql);
$cols=mysql_num_fields($qry_a);
$k=$cols-1;}
$x=1;
$x1=$k+1;
$qry_s= mysql_query(" SELECT * FROM cms_home", $sql);

while ($fetch= mysql_fetch_array($qry_s))
{
//while begin (auslesen der SQL-Einträge)
$f=1;
$f_id=$fetch['id'];
while ($f<=$k)
{
//while begin (die Felder mit den Inhalten zum ändern)
$f_type=mysql_field_type($qry_s,$f);
$table_1= '<tr class="textnorm"><td colspan="7"><strong>Feld '.$f.':</strong></td></tr><tr class="textnorm"><td colspan="7">';
$table_2= '</td></tr><tr><td colspan="7"><input type="hidden" name="id_'.$x.'" id="id_'.$x.'" value="'.$f_id.'"></td></tr>';
if($f_type=='string'){
$table .= $table_1."<input name=\"t".$f."_".$x."\" type=\"text\" class=\"textnorm\" id=\"t".$f."_".$x."\" value=\"".$fetch['t'.$f]."\">".$table_2;}		
elseif($f_type=='blob'){
$table .= $table_1."<textarea name=\"t".$f."_".$x."\" class=\"textnorm\" id=\"\">".$f_id.$fetch['t'.$f]."</textarea>".$table_2;}
elseif($f_type!='string' && $f_type!='blob' && $f_type!='int'){
$table .= $table_1."<input name=\"t".$f."_".$x."\" type=\"text\" class=\"textnorm\" id=\"t".$f."_".$x."\" value=\"".$fetch['t'.$f]."\">".$table_2;}		
else{}
$f++;
//while end
}
$x++;
//while end
}
if(isset($f_id))
{$f_id+1;}
$f1=1;
$x1=$x;
while($f1<=$k)
{
//while begin (die Felder zum Hinzufügen)
$f_type=mysql_field_type($qry_s,$f1);
$table_1= '<tr class="textnorm"><td colspan="7"><strong>Feld '.$f1.':</strong></td></tr><tr class="textnorm"><td colspan="7">';
$table_2= '<input type="hidden" name="id_'.$x1.'" id="id_'.$x1.'" value="'.$x.'"></td></tr>';
if($f_type=='blob'){
$table .= $table_1."<textarea name=\"t".$f1."_".$x1."\" class=\"textnorm\" id=\"t".$f1."_".$x1."\"></textarea>".$table_2;}
elseif($f_type=='string'){
$table .= $table_1."<input name=\"t".$f1."_".$x1."\" type=\"text\" class=\"textnorm\" id=\"\" value=\"\">".$table_2;}		
else{}
$f1++;
//while end}
print $table;

Nach einigen Tagen Arbeit an diesem Script bin ich dennoch nicht wirklich in der Lage den Fehler zu finden (es ist gut möglich das es ein ODER MEHRERE sehr offensichtliche Fehler sind... ;) ). Ihr braucht mich nicht unbedingt auf meinen furchtbaren Stil hinzuweisen, allerdings bin ich für jede Art von konstruktiven Beiträgen sehr dankbar..
Wenn irgendwas unklar is, dann einfach nochma nachfragen...

Grüße und schon ma Vielen Dank....
:-) :-) :-)
 
Zuletzt bearbeitet:
Dieser Code ist derart verworren, dass ich davor zurückschrecke, die Generierung der Feldernamen genauer unter die Lupe zu nehmen. Aber du sagst ja, dass du das bereits getan hättest und dass die Namen korrekt generiert würden. Ganz generell würde ich dir raten, dass du als allererstes prüfen solltest, ob der Fehler im SQL- oder im PHP-Code liegt. Du kannst beispielsweise deinen SQL-Befehlen testweise andere Daten geben, von denen du genau weißt, dass sie korrekt sind, und sehen, ob es funktioniert.

Mein eigentlicher Rat aber ist: komplett neuschreiben. Der Code ist weitaus komplizierter, als er für eine solch relativ simple Aufgabe sein dürfte. Und noch ein Tip: Verwende dieses Mal vernünftige Namen für die Variablen.

Gawayn
 
Zurück