Hallo Leute!
Hab mal ne Frage, ist es den nicht möglich innerhalp einer while Schleife nochmals ne while Schleife zu starten???
Also mein Code sieht so aus (ein kleiner Bruchteil, aber eben das wesendliche):
$results = sql_query("SELECT * FROM ${user_prefix}_user_pro_frage WHERE id='".$id."' ORDER by anor");
$ergeb = sql_fetch_array($results);
$a = 0;
$dcolor_A = $bgcolor1;
$dcolor_B = $bgcolor2;
echo"<table border='0' cellspacing='0' cellpadding='2'>";
while($ergeb = sql_fetch_array($results)) {
$dcolor = ($a == 0 ? $dcolor_A : $dcolor_B);
if ($ergeb['funktion'] == 1) {
$frage="".$ergeb["frage"]."";
$input="<input type='TEXT' name='uantwort' size='30'>";
$input1=" ";
$input2=" ";
}
if ($ergeb["funktion"] == 2) {
$result1 = sql_query("SELECT * FROM ${user_prefix}_user_pro_antworten WHERE fid='".$ergeb["fid"]."'"); // User
$frage="".$ergeb["frage"]."";
while($ergeb1 = sql_fetch_array($result1)) {
$input="<input type='radio' name='uantwort'>".$ergeb1["antwort"]."";
}
$input1=" ";
$input2=" ";
}
echo"<tr><td valign='top' bgcolor='$dcolor'>".$frage.":</td>";
echo"<td bgcolor='$dcolor'> ".$input1." ".$input."".$input2."</td></tr>";
$a = ($dcolor == $dcolor_A ? 1 : 0);
}
echo"</table>";
Keine Ahnung, aber es sollten bei der funktion==2 mehrere Antwortmöglichkeiten kommen, jedoch wird immer nur die letzte angezeigt!
:wall: :wall:
Hoffe es kann mir wiedermal jemand helfen!
:D
[Editiert am 12/4/2004 von _Gerry_]
um 4 Uhr morgens kann ich dir eben nur sagen das mehrere verschachtelte schleifen durchaus möglich sind..du kannst auch 100 while schleifen ineinander packen wenns dir spass macht :D...
Hmmm .....
Wertet while auch arrays aus ?? Wäre mir neu.
Du solltest anstatt
Zitatwhile($ergeb = sql_fetch_array($results))
das besser so schreiben
Zitatwhile(list($variable1, $variable2 ...etc)=sql_fetch_row($results));
While untersucht von sich aus nicht ein array und schaut wieviele Elemente darin sind.
MfG
jubilee
Nachtrag :
Wenn das Ergebnis schon in einem array steht, dann kann man das auch
folgendermassen auflösen
Zitatwhile (list ($key, $val) = each ($Array));
oder die etwas schnellere Variante
Zitatforeach ($Array as $k => $v);
MfG
jubilee
Man ich hasse die ostern!
War wohl doch etwas zuviel Eierlikör! :redhead:
Steh zur Zeit total am Schlauch, aber werde es mal versuchen! ;)
Okay, soweit sogut!
Nun werden die Antwortmöglichkeiten so angegeben wie ich es wollte,
doch es besteht weiterhin ein Problem. :wall:
Ich mache die Abfrage nun so:
$results = sql_query("SELECT fid,frage,funktion FROM ${user_prefix}_user_pro_frage WHERE id='".$id."' ORDER by anor");
echo"<table width='100%' border='1'>";
while(list($fid, $frage, $funktion)=sql_fetch_array($results)){
$results1 = sql_query("SELECT * FROM ${user_prefix}_user_pro_antworten WHERE fid='".$fid."'");
echo"<tr><td valign='top'><b>$frage:</b></td><td valign='top'>";
if ($funktion ==1){
echo"<input type='TEXT' name='uantwort' size='30'>";
}
if ($funktion ==2){
while ($data1 = sql_fetch_array($results1)){
echo"<input type='radio' name='uantwort' value='".$data1["antwort"]."'>".$data1["antwort"]."<br>";
}
}
echo"</td></tr>";
}
echo"</table>";
Doch wenn z.B 5 Fragen ($frage) vorhanden sind, zeigt er mir nur 4 davon an, die erste wird einfach übergangen!
:wall: :cry
:BD:
:crazy:
Komisch, auf einmal funzt es!:crazy:
Okay, das oben beschrieben Problem ist ja nun gelöst!
Doch das nächste steht schon vor der Tür! :redhead:
Also ich lese die Fragen nun ja aus der DB aus, diese werden z.B.: so aufgelistet (in ner Schleife eben):
echo"<input type='TEXT' name='uantwort' size='30'>";
echo"<input type=\"hidden\" name=\"fid\" value=\"".$fid."\">";
###### Schleife #########
echo"<textarea name='uantwort'></textarea>";
echo"<input type=\"hidden\" name=\"fid\" value=\"".$fid."\">";
Eine Tabelle ist vorhanden:
| uid | id | fid | uantwort |
uid = UserID
id = BereichID
fid = ID der Frage
uantwort = Antwort des Users
Das ganz wird nun folgendermassen von mir gespeichert:
function save($uid, $id, $fid, $uantwort) {
global $mod_name, $user_prefix, $bgcolor1, $bgcolor2, $bgcolor3;
include ("header.php");
OpenTable();
$result = sql_query("SELECT * FROM ${user_prefix}_user_pro_userantworten WHERE uid='".$uid."'");
$numrows = sql_num_rows($result);
if ($numrows<1) {
sql_query("insert into ".$user_prefix."_user_pro_userantworten values ('".$uid."','".$id."','".$fid."','".$uantwort."')");
}
else {
sql_query("UPDATE ".$user_prefix."_user_pro_userantworten SET uantwort=$uantwort WHERE uid='".$uid."' AND fid ='".$fid."'");
}
CloseTable();
include ("footer.php");
}
Doch so klappt es eben nicht!
Müsste jedoch mittels foreach gehen, oder??
Doch auch da häng ich im Moment! :redhead:
Edit: Irgendwie wurde der Code verschluckt! :mad:
[Editiert am 16/4/2004 von _Gerry_]
Hmmm .....
Irgendwie fehlt noch etwas ?!
Aber nun steht er oben!
Keine Ahnung wohin der verschwand! :D
Hmmm seh auf die Schnelle nix ausser
dem das ich bei Update immer die übergebenen Werte in einfache Anführungszeichen setzen muss, weils sonst fehler gibt.
Änder doch mal das
Zitatsql_query("UPDATE ".$user_prefix."_user_pro_userantworten SET uantwort=$uantwort WHERE uid='".$uid."' AND fid ='".$fid."'");
in das hier
Zitatsql_query("UPDATE ".$user_prefix."_user_pro_userantworten SET uantwort= '$uantwort ' WHERE uid='".$uid."' AND fid ='".$fid."'");
KA ob es daran liegt .
MfG
jubilee
[Editiert am 17/4/2004 von jubilee]
Wollte nur sagen das soweit funzt!
:D :D
Doch schon das nächste Problem aufgetaucht! :wall:
Wenn man seine Angaben ändern will werden diese ja folgend in die DB geschrieben:
function save() {
global $prefix, $user_prefix, $bgcolor1, $bgcolor2, $bgcolor3,$module_name;
$uid=$_POST['uid'];
foreach ($_POST as $key => $value) {
$qry = "UPDATE ${user_prefix}_flirt_profil SET ".$key."='".$value."' WHERE uid=".$uid."";
$result = sql_query($qry);
}
}
Wenn man nun jedoch zuvor einmal eine Checkbox angeklickt hat und diese nun deaktiviert wird diese ja nicht mittels POST übergebn (da ja leer),
folgedessen wird dies in der DB ja logoscherweise nicht geändert!
Wie müsste ich jetzt das Script ändern damit auch diese Daten aktualisiert werden :quest
Bin für jede Hilfe Dankbar!