Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Probleme mit if-Abfrage
Frage
Hallo,
ich hole mir Daten aus MSQL-DB, die u.a. auch SelectBoxen setzen sollen.
[CODE]
for ($i=0; $i<$num; $i++)
{
$id = mysql_result($res, $i, "id");
echo'
<td><select>
<option value="1" ($id==1) ? "SELECTED":" ">1</option>
<option value="2" ($id==2) ? "SELECTED":" ">2</option>
</select>
</td>';
}
[/CODE]
Wenn $id nun den Wert 2 hat , wird aber nicht die 2 angezeigt. Wo ist mein Fehler? Wie könnte man das evt. anders lösen?
Antwort 1 von son_quatsch
$text= '<td><select>';
for ($i= 0; $i< $num; $i++) {
$id= mysql_result($res, $i, 'id');
for ($i2= 1; $i2<= 2; $i2++) {
$text.= '
<option value="'. $i2. '" '. ($id== $i2? 'selected="selected" ': ''). '/>'. $i2. '</option>';
}
}
$text.= '
</select></td>';
echo $text;Immer schön drauf achten, wo PHP aufhört und wo HTML anfängt. Ich gehe übrigens davon aus, dass du der Datenbank bereits die richtige Abfrage gestellt hast.Antwort 2 von Karin97
hallo son_quatsch;
danke für deine Antwort. Ja die DB-Abfrage steht.
Was mir aber völlig unklar ist warum du die Select-Box über die for Schleife aufbauen lässt.
Beim Einbau gibt folgender Fehler:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ',' or ';' in
<option value="'. $i2. '" '. ($id== $i2? 'selected="selected" ': ''). '/>'. $i2. '</option>';
Gruss
danke für deine Antwort. Ja die DB-Abfrage steht.
Was mir aber völlig unklar ist warum du die Select-Box über die for Schleife aufbauen lässt.
Beim Einbau gibt folgender Fehler:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ',' or ';' in
<option value="'. $i2. '" '. ($id== $i2? 'selected="selected" ': ''). '/>'. $i2. '</option>';
Gruss
Antwort 3 von son_quatsch
Warum ich "die Select-Box über die for Schleife" aufbaue hat eher etwas mit Wartbarkeit zu tun und erscheint in deinem Fall von nur zwei OPTIONs auf den ersten Blick eventuell als übertrieben. Macht aber Sinn, da höchstens eine OPTION ausgewählt sein kann. Mir ist nur jetzt grad klargeworden, dass du evt. mehrere SELECTs haben willst - also muss der Anfangs- und Endtext in die erste Schleife mit rein statt davor und dahinter.
Aus deinem Code vermute ich viel eher, dass du gar kein gültiges HTML erzeugst, da $id gar nicht ausgewertet werden dürfte (mal ganz abgesehen vom Operator) sondern ganz einfach als Text weiterfließt...
Die Fehlermeldung kann ich nicht nachvollziehen. Eventuell den Code abgetippt statt kopiert? Habs grad überprüft. Nochma korrigiert:
Und nochwas: wenn du wirklich MSQL benutzt, dann verwende auch die Funktion msql_result() statt mysql_result().
Aus deinem Code vermute ich viel eher, dass du gar kein gültiges HTML erzeugst, da $id gar nicht ausgewertet werden dürfte (mal ganz abgesehen vom Operator) sondern ganz einfach als Text weiterfließt...
Die Fehlermeldung kann ich nicht nachvollziehen. Eventuell den Code abgetippt statt kopiert? Habs grad überprüft. Nochma korrigiert:
for ($i= 0; $i< $num; $i++) {
$id= mysql_result($res, $i, 'id');
$text= '<td><select>';
for ($i2= 1; $i2<= 2; $i2++) {
$text.= '
<option value="'. $i2. '" '. ($id== $i2? 'selected="selected" ': ''). '/>'. $i2. '</option>';
}
$text.= '
</select></td>';
echo $text;
}Und nochwas: wenn du wirklich MSQL benutzt, dann verwende auch die Funktion msql_result() statt mysql_result().
Antwort 4 von Karin97
Zitat:
Aus deinem Code vermute ich viel eher, dass du gar kein gültiges HTML erzeugst, da $id gar nicht ausgewertet werden dürfte (mal ganz abgesehen vom Operator) sondern ganz einfach als Text weiterfließt...
Aus deinem Code vermute ich viel eher, dass du gar kein gültiges HTML erzeugst, da $id gar nicht ausgewertet werden dürfte (mal ganz abgesehen vom Operator) sondern ganz einfach als Text weiterfließt...
Richtig, genau das ist ja das Problem!
Ich lasse die SelectedBox mit echo generieren. Weiß aber nicht wie ich die SelectBox entsprechend dem Wert aus der DB selectiert bekomme.
Bei nem Textfeld isses ja ganz einfach:
value="$id"den Wert anzeigen zu lassen.
Antwort 5 von son_quatsch
Aja ;-)
Antwort 6 von Karin97
Zitat:
Aja ;-)
Aja ;-)
Wie darf ich das deuten?
Antwort 7 von son_quatsch
Zitat:
Wie darf ich das deuten?
Dass ich mit deiner Antwort eben genausowenig anfangen konnte. Woran hapert es denn nun genau?Wie darf ich das deuten?
- War der PHP-Fehler eine Flüchtigkeit deinerseits?
- Schwierigkeiten mit der Datenzuordnung?
- Schwierigkeiten das HTML richtig aufzubauen?
- Wie passt das Textfeld jetzt hier rein?
Sorry, aber ich erzähl nicht zig völlig verschiedene Sachen nur weil der Fragesteller nicht präzise genug ist und hinterher vielleicht was supersimples wollte. Du hast auch nicht beantwortet, ob du überhaupt mehrere SELECT-Tags konstruieren willst (wie es dein Code suggeriert) oder nur eins. Und wie ist etwas in deiner Datenbank überhaupt gespeichert? Und reden wir nun von MYSQL oder MSQL? Und sind das deine ersten Anfänge mit PHP oder gar HTML? Wie detailliert muss/darf ich sein?
Bitte alles beantworten. Und mit Details nicht knausern.
Antwort 8 von Karin97
Zitat:
Und reden wir nun von MYSQL oder MSQL? Und sind das deine ersten Anfänge mit PHP oder gar HTML? Wie detailliert muss/darf ich sein?
Und reden wir nun von MYSQL oder MSQL? Und sind das deine ersten Anfänge mit PHP oder gar HTML? Wie detailliert muss/darf ich sein?
PHP MYSQL --> PHP generiert HTML-Tabelle mit Hilfe von echo.
HTML beherrsche ich, Grundkenntnisse von PHP habe ich.
Wie detailiert? Schwere Frage, schaue mal meine Antwort bis zum Schluss an viell. ist es dann erkenntlich.
Zitat:
Du hast auch nicht beantwortet, ob du überhaupt mehrere SELECT-Tags konstruieren willst (wie es dein Code suggeriert) oder nur eins
Du hast auch nicht beantwortet, ob du überhaupt mehrere SELECT-Tags konstruieren willst (wie es dein Code suggeriert) oder nur eins
ja es sind, mehrere Selectboxen
Zitat:
Und wie ist etwas in deiner Datenbank überhaupt gespeichert?
Und wie ist etwas in deiner Datenbank überhaupt gespeichert?
Datenbank gespeichert als 1 und 2 .
<select name="top5" size="5">
<option value="1">std</option>
<option value="2">km</option>
</select>
Zitat:
Dass ich mit deiner Antwort eben genausowenig anfangen konnte. Woran hapert es denn nun genau?
- War der PHP-Fehler eine Flüchtigkeit deinerseits?
- Schwierigkeiten mit der Datenzuordnung?
- Schwierigkeiten das HTML richtig aufzubauen?
- Wie passt das Textfeld jetzt hier rein?
Dass ich mit deiner Antwort eben genausowenig anfangen konnte. Woran hapert es denn nun genau?
- War der PHP-Fehler eine Flüchtigkeit deinerseits?
- Schwierigkeiten mit der Datenzuordnung?
- Schwierigkeiten das HTML richtig aufzubauen?
- Wie passt das Textfeld jetzt hier rein?
Textfeld bitte wieder streichen. Ich denke es habert an der Datenzuordnung.
Wenn man in der SelectBox etwas vorauswähle, dann sieht
der code doch so aus:
<select name="top5" size="5">
<option value="1" SELECTED>std</option>
<option value="2">km</option>
</select>
Wenn ich z.B. ein Formular erstelle , wo der user std oder km auswählen soll, und ich das auswerten möchte, dann sieht der Code so aus:
<select name="top5" size="5">
<option value="1" <? echo $id=="1" ? "SELECTED":""?>>std</option>
<option value="2" <? echo $id=="2" ? "SELECTED":""?>>std>km</option>
</select>
Dann werden in DB etweder 1 oder 2 eingetragen, je nachdem was der User ausgewählt hat.
So wenn ich nun in einem anderen Formular, wo der user seine Daten ändern kann, dann frage ich diese Werte aus der DB ab.
$sqlab = "select id from tblxwhere";
$res = mysql_db_query("+++", $sqlab);
$id = mysql_result($res, 0, "id");
Da ich nicht weiß wieviel zeilen in der Db stehen muss ich das
Formular dynamisch halten, d.h. die Selectboxen werden dynamisch generiert.
for ($i=0; $i<$num; $i++)
{
$id = mysql_result($res, $i, "id");
echo"<select><option value='1' ($id=='1') ? 'SELECTED':''>std</option>
<option value='2' ($id=='2') ? 'SELECTED':''>km</option> </select> ";
}
Soweit so gut. Nehmen wie mal an in der zeile 1 der DB steht 2
Dann Soll die Selectbox km anzeigen, aber das tut sie nicht. Und ich weiß nicht woran es liegt. Ich denke er führt die abfrage nicht aus:
Zitat:
($id=='1') ? 'SELECTED':''
($id=='2') ? 'SELECTED':''
($id=='1') ? 'SELECTED':''
($id=='2') ? 'SELECTED':''
Gruss
Antwort 9 von katy
Hallo Karin97,
die Stelle
echo"<select><option value='1' ($id=='1') ? 'SELECTED':''>std</option>
<option value='2' ($id=='2') ? 'SELECTED':''>km</option> </select> ";
würde bedeuten, dass du für jedes Datenbankfeld ein eigenes Auswahlmenü <select>... </select> anlegst und nicht in einem select einfach ein weiteres Auswahlfeld per <option>...</option> anfügst. Das wirst du wohl nicht wollen.
Außerdem solltest du das vorselektierte Feld mit der XHTML-kompatiblen Syntax auswählen. Dazu musst du das Attribut klein schreiben und eine Wertzuweisung anfügen:
<option ... selected="selected">...</option>
katy
die Stelle
echo"<select><option value='1' ($id=='1') ? 'SELECTED':''>std</option>
<option value='2' ($id=='2') ? 'SELECTED':''>km</option> </select> ";
würde bedeuten, dass du für jedes Datenbankfeld ein eigenes Auswahlmenü <select>... </select> anlegst und nicht in einem select einfach ein weiteres Auswahlfeld per <option>...</option> anfügst. Das wirst du wohl nicht wollen.
Außerdem solltest du das vorselektierte Feld mit der XHTML-kompatiblen Syntax auswählen. Dazu musst du das Attribut klein schreiben und eine Wertzuweisung anfügen:
<option ... selected="selected">...</option>
katy
Antwort 10 von Karin97
Hey katy,
danke für Deine antwort.
ich habe n zeilen, und brauche daher n Auswahlmenü´s
so macht man das händisch genau, aber ich möchte das ja automatisieren.
gruss
karin
danke für Deine antwort.
Zitat:
die Stelle
echo"<select><option value='1' ($id=='1') ? 'SELECTED':''>std</option>
<option value='2' ($id=='2') ? 'SELECTED':''>km</option> </select> ";
würde bedeuten, dass du für jedes Datenbankfeld ein eigenes Auswahlmenü
die Stelle
echo"<select><option value='1' ($id=='1') ? 'SELECTED':''>std</option>
<option value='2' ($id=='2') ? 'SELECTED':''>km</option> </select> ";
würde bedeuten, dass du für jedes Datenbankfeld ein eigenes Auswahlmenü
ich habe n zeilen, und brauche daher n Auswahlmenü´s
Zitat:
<option ... selected="selected">...</option>
<option ... selected="selected">...</option>
so macht man das händisch genau, aber ich möchte das ja automatisieren.
gruss
karin
Antwort 11 von son_quatsch
Tja Karin, auch damit kann ich nicht nachvollziehen, warum dir mein Code aus Antwort 3 nicht weitergeholfen hat.
Ich hab daher ein voll qualifiziertes Beispiel geschrieben, welches komplett kopiert und als PHP-Datei abgespeichert werden kann:
Getestet hab ich es auch, es lief hervorragend. Um die Testumgebung entsprechend aufzubauen musste ich selbstverständlich die Datenbank anlegen:
und die Tabelle auch mit Daten gefüllt:
Ich hab daher ein voll qualifiziertes Beispiel geschrieben, welches komplett kopiert und als PHP-Datei abgespeichert werden kann:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<title>.</title>
</head><body>
<table><tr><?php
// Verbindung zum DBMS herstellen
$db= mysql_connect('localhost', 'benutzer', 'passwort');
if (!$db) die('Keine Verbindung zum DBMS: '. mysql_error());
// DB auswählen
if (!mysql_select_db('datenbank')) die('Kann DB nicht auswählen: '. mysql_error());
// Abfrage erstellen und ausführen
$sql= 'SELECT id FROM tabelle WHERE anwender= \'hans\'';
$res= mysql_query($sql);
if (!$res) die('SQL '. $sql. ' konnte nicht ausgeführt werden : '. mysql_error());
$text= '';
// Jeden Datensatz des Ergebnisses durchgehen
while ($row= mysql_fetch_assoc($res)) {
// pro Datensatz eine Tabellenzelle mit Combobox erzeugen
$text.= '
<td><select>';
// Combobox (<SELECT>) mit Einträgen (<OPTION>) füllen
for ($i= 1; $i<= 2; $i++) {
// Stimmt der Wert des Eintrags mit dem des Datensatzes überein? Dann Attribut SELECTED einfügen
$text.= '
<option value="'. $i. '" '. ($row['id']== $i? 'selected="selected" ': ''). '/>'. $i. '</option>';
}
$text.= '
</select></td>';
}
// Abfrage lieferte leeres Ergebnis
if ($text== '') $text= '<td>Keine Datensätze gefunden!</td>';
// Erstellten Text ausgeben
echo($text);
// Speicher zum Datensatz freigeben
mysql_free_result($res);
?></tr></table>
</body></head>Getestet hab ich es auch, es lief hervorragend. Um die Testumgebung entsprechend aufzubauen musste ich selbstverständlich die Datenbank anlegen:
create database DATENBANK;und auch die Tabellecreate table TABELLE(ID int, ANWENDER varchar(30));und die Tabelle auch mit Daten gefüllt:
insert into TABELLE values(1, 'hans');
insert into TABELLE values(2, 'hans');
insert into TABELLE values(2, 'jens');
insert into TABELLE values(1, 'hans');Antwort 12 von Karin97
hallo son_quatsch,
ok
Karin
ok
Karin
Antwort 13 von katy
Hallo Karin,
Den Rest deiner Antwort kann ich ehrlich gesagt nicht ganz nachvollziehen. N Auswahlmenüs mit jeweils nur einem Eintrag?
katy
Zitat:
so macht man das händisch genau, aber ich möchte das ja automatisieren.
das ist doch kein Grund, schlechtes HTML zu erzeugen ...so macht man das händisch genau, aber ich möchte das ja automatisieren.
Den Rest deiner Antwort kann ich ehrlich gesagt nicht ganz nachvollziehen. N Auswahlmenüs mit jeweils nur einem Eintrag?
katy
Antwort 14 von Karin97
Hallo Katy,
Hallo son_quatsch
da gebe ich dir uneingeschränkt Recht. Bin seit 2 Tagen der Verzweiflung ziemlich nahe, denn es ist im Prinzip eine "relativ" kleine Sache an der ich mir die Zähne ausbeiße.
In der DB-Tabelle stehen n Zeilen, welche jeweils einen Wert für die Auswahlmenüs enthalten (entweder 1oder 2). Diese Werte entscheiden dann ob h oder km in den Auswahllisten angezeigt wird.
Da ich nicht weiß wie viele Zeilen aus der DB geholt werden, muss ich doch das Erstellen der Auswahlliste mit in die Schleife nehmen oder geht das auch anders?
Wenn ich die Auswahllisten mit HTML erstelle und mit if schleife die Werte anzeigen lasse, sieht das so aus und es funktioniert...
Verstehe einfach nicht warum es nicht klappt, wenn ich die Die Zeilen via echo ausgebe.
@son_quatsch ein großes Dankeschön an Dich, für das erstellen das Skriptes, es waren viele nützliche Sachen dabei. DANKE
Gruss
karin
Hallo son_quatsch
Zitat:
das ist doch kein Grund, schlechtes HTML zu erzeugen ...
das ist doch kein Grund, schlechtes HTML zu erzeugen ...
da gebe ich dir uneingeschränkt Recht. Bin seit 2 Tagen der Verzweiflung ziemlich nahe, denn es ist im Prinzip eine "relativ" kleine Sache an der ich mir die Zähne ausbeiße.
Zitat:
N Auswahlmenüs mit jeweils nur einem Eintrag?
N Auswahlmenüs mit jeweils nur einem Eintrag?
In der DB-Tabelle stehen n Zeilen, welche jeweils einen Wert für die Auswahlmenüs enthalten (entweder 1oder 2). Diese Werte entscheiden dann ob h oder km in den Auswahllisten angezeigt wird.
for ($i=0; $i<$num; $i++)
{
$id = mysql_result($res, $i, "id");
echo"<select><option value='1' ($id=='1') ? 'SELECTED':''>std</option>
<option value='2' ($id=='2') ? 'SELECTED':''>km</option> </select> ";
}
Da ich nicht weiß wie viele Zeilen aus der DB geholt werden, muss ich doch das Erstellen der Auswahlliste mit in die Schleife nehmen oder geht das auch anders?
Wenn ich die Auswahllisten mit HTML erstelle und mit if schleife die Werte anzeigen lasse, sieht das so aus und es funktioniert...
<td><select name="test">
<option value="<?php echo"$id"; ?>" <?php if ($id==$t1){echo "selected="selected"";} ?> ><?php echo"$z"; ?></option>
<option value="<?php echo"$id"; ?>" <?php if ($id==$t2){echo "selected="selected"";} ?> ><?php echo"$z"; ?></option>
</select></td> Verstehe einfach nicht warum es nicht klappt, wenn ich die Die Zeilen via echo ausgebe.
echo"<select name=\"test\">
<option value=\"<?php echo\"$id\"; ?>\" <?php if ($id==$t1){echo \"selected=\"selected\"\";} ?> ><?php echo\"$z\"; ?></option>
<option value=\"<?php echo\"$id\"; ?>\" <?php if ($id==$t2){echo \"selected=\"selected\"\";} ?> ><?php echo\"$z\"; ?></option>
</select></td>";@son_quatsch ein großes Dankeschön an Dich, für das erstellen das Skriptes, es waren viele nützliche Sachen dabei. DANKE
Gruss
karin
Antwort 15 von son_quatsch
Verstehe einfach nicht warum es nicht klappt, wenn ich die Die Zeilen via echo ausgebe.Weil du insgesamt bloß einen Text ausgibst und es gar nicht soweit kommt, dass darin PHP-Code als solcher wahrgenommen wird. Wenn du echo() schon aufrufst bist du doch bereits in PHP drin, dann sind öffnende <?php-Tags völlig fehl am Platze. Der Code wäre folgendermaßen richtig: echo '<select name="test">
<option value="'. $id. '" '. ( ($id==$t1) 'selected="selected"' : '' ). $z. '</option>
<option value="'. $id. '" '. ( ($id==$t2) 'selected="selected"' : '' ). $z. '</option>
</select></td>';oder (um nur Gänsefüßchen zu verwenden):
echo "<select name=\"test\">
<option value=\"$id\" ". ( ($id==$t1) "selected=\"selected\"" : "" ). "$z</option>
<option value=\"$id\" ". ( ($id==$t1) "selected=\"selected\"" : "" ). "$z</option>
</select></td>";oder (um das ganze einfacher zu gestalten und in mehrere Kommandos aufzuteilen):
echo "<select name=\"test\">
<option value=\"$id\" ";
if ($id==$t1) echo "selected=\"selected\"";
echo "$z</option>
<option value=\"$id\" ";
if ($id==$t1) echo "selected=\"selected\"";
echo "$z</option>
</select></td>";Und weil man Texte sowohl in einfachen Hochkommas als auch in Gänsefüßchen angeben kann, geb ich per PHP Texte immer in einfachen Hochkommas aus, damit ich die Gänsefüßchen für die HTML-Attribute nicht per Backslash escapen muss. Eines muss man jedoch wissen: nur in Gänsefüßchen werden etwaige PHP-Variablen auch entsprechend ausgewertet - kleines Beispiel:
$hans= 'Meier';
echo 'Hallo mein "Name" ist $hans';
echo "Hallo mein \"Name\" ist $hans";ergibt Hallo mein "Name" ist $hans
Hallo mein "Name" ist Meier
Antwort 16 von Karin97
Hallo katy,
hallo son_quatsch,
ich habe es hinbekommen mit Eurer Hilfe. Vielen Dank!!!
DANKE, für Eure super Hilfe.
Schönes We Euch Zweien.
Gruss
Katy
hallo son_quatsch,
ich habe es hinbekommen mit Eurer Hilfe. Vielen Dank!!!
DANKE, für Eure super Hilfe.
Schönes We Euch Zweien.
Gruss
Katy

