blastermaster
Mitglied
ich schreibe an einem kleinem Script, in dem man über die DB zu einem bestehenden Formular weitere Felder hinzufügen kann, z.B. Textfelder, Textaraes und Selectboxen mit eigenen Auswahlmöglichkeiten die auch aus der DB kommen.
Beispiel: neue Selectbox mit der Auswahl ja, nein, vielleicht
DB-Struktur für neue Boxen:
Tabellename - boxen
Spalten - id feldname feldtyp feldinhalt
Inhalt bei Erstellen der neuen Selectbox:
id=1
feldname=Willst du...
feldtyp=sel
feldinhalt=ja nein vielleicht (jedes steht in einer eigenen Zeile)
Beim Erstellen der neuen Box wird in einer anderen Tabelle "userbox" eine neue Spalte angelegt mit dem Namen "feld" mit der id aus der Tabelle "boxen", also in diesem Beispiel "feld1". Standardmässig ist noch eine weitere Spalten "userid" vorhanden um Einträge den Usern zuzuordnen.
Füllt ein User dieses Formular aus und wählt in der Selectbox "nein" aus, wird dieses als neuer Eintrag mit Userid in die Spalte userid und die Auswahl "nein" in die Spalte feld1 eingetragen. Bis hier hin funktioniert auch soweit alles.
Ich habe jetzt das Problem, das wenn ein User seinen Eintrag edtieren möchte auf dieser Formularseite nicht seine zuvor abgeschickte Auswahl sieht sondern immer nur den ersten Eintrag der Selectbox - also "ja".
Beispiel: neue Selectbox mit der Auswahl ja, nein, vielleicht
DB-Struktur für neue Boxen:
Tabellename - boxen
Spalten - id feldname feldtyp feldinhalt
Inhalt bei Erstellen der neuen Selectbox:
id=1
feldname=Willst du...
feldtyp=sel
feldinhalt=ja nein vielleicht (jedes steht in einer eigenen Zeile)
Beim Erstellen der neuen Box wird in einer anderen Tabelle "userbox" eine neue Spalte angelegt mit dem Namen "feld" mit der id aus der Tabelle "boxen", also in diesem Beispiel "feld1". Standardmässig ist noch eine weitere Spalten "userid" vorhanden um Einträge den Usern zuzuordnen.
Füllt ein User dieses Formular aus und wählt in der Selectbox "nein" aus, wird dieses als neuer Eintrag mit Userid in die Spalte userid und die Auswahl "nein" in die Spalte feld1 eingetragen. Bis hier hin funktioniert auch soweit alles.
Ich habe jetzt das Problem, das wenn ein User seinen Eintrag edtieren möchte auf dieser Formularseite nicht seine zuvor abgeschickte Auswahl sieht sondern immer nur den ersten Eintrag der Selectbox - also "ja".
PHP:
$zfeld = $db->query_first("SELECT * FROM userbox WHERE userid=".$userid."");
//Zusatzfelder holen
$zfresult = $db->unbuffered_query("SELECT * FROM boxen ORDER BY id");
$zusatzfeld = "";
if($zfresult){
while ($zfrow = $db->fetch_array($zfresult)) {
//Selectfeld
if($zfrow['feldtyp'] == "sel"){
$opt = explode("\n",$zfrow['feldinhalt']);
$optionfeld .= "<select name=\"feld[$zfrow[id]]\">\n<option value=\"\"></option>\n";
foreach ($opt as $value) {
$feldres = $zfeld["feld".$zfrow['id']]; //ergebnis aus userbox
if(isset($feldres)) $selectet[$feldres] = "selected=\"selected\""; //sollte eigentlich dafür benutzt werden um das ergebnis zu selectieren
$optionfeld .= "<option value=\"$value\" $selectet[$value]>$value</option>";
}
$optionfeld .= "</select>";
}
//Textfeld
else if($zfrow['feldtyp'] == "txt" || $zfrow['feldtyp'] == "url" || $zfrow['feldtyp'] == "banner"){
$optionfeld = "<input name=\"feld[$zfrow[id]]\" type=\"text\" value=\"".$zfeld["feld".$zfrow['id']]."\" size=\"".$zfrow['size']."\" maxlength=\"".$zfrow['maxlength']."\" />";
}
//Textarea
else if($zfrow['feldtyp'] == "txtarea"){
$optionfeld = "<textarea name=\"feld[$zfrow[id]]\" cols=\"".$zfrow['size']."\" rows=\"".$zfrow['maxlength']."\" >".$zfeld["feld".$zfrow['id']]."</textarea>";
}
else $optionfeld = "";
$tdclass = getone($z, "tablea", "tableb");
eval("\$zusatzfeld .= \"".$tpl->get("user_edit_zus)."\";");
$z++;
}
}
eval("\$tpl->output(\"".$tpl->get("user_edit")."\");");
Zuletzt bearbeitet: