online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon Karin97 vom 15.10.2020, 10:32 Options

Lösung

Probleme mit if-Abfrage

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 schreiben

Antwort 1 von son_quatsch vom 15.10.2020, 11:30 Options

$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 vom 15.10.2020, 13:35 Options

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

Antwort 3 von son_quatsch vom 15.10.2020, 14:23 Options

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:

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 vom 15.10.2020, 15:01 Options

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...


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 vom 15.10.2020, 15:33 Options

Aja ;-)

Antwort 6 von Karin97 vom 15.10.2020, 15:58 Options

Zitat:
Aja ;-)


Wie darf ich das deuten?

Antwort 7 von son_quatsch vom 15.10.2020, 16:39 Options

Zitat:
Wie darf ich das deuten?
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?

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 vom 15.10.2020, 17:46 Options

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?


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


ja es sind, mehrere Selectboxen

Zitat:
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?



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':''


Gruss

Antwort 9 von katy vom 16.10.2020, 06:54 Options

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

Antwort 10 von Karin97 vom 16.10.2020, 08:34 Options

Hey katy,

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ü


ich habe n zeilen, und brauche daher n Auswahlmenü´s


Zitat:
<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 vom 16.10.2020, 09:58 Options

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:
<!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 Tabelle

create 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 vom 16.10.2020, 10:15 Options

hallo son_quatsch,

ok

Karin

Antwort 13 von katy vom 16.10.2020, 16:41 Options

Hallo Karin,
Zitat:
so macht man das händisch genau, aber ich möchte das ja automatisieren.
das ist doch kein Grund, schlechtes HTML zu erzeugen ...
Den Rest deiner Antwort kann ich ehrlich gesagt nicht ganz nachvollziehen. N Auswahlmenüs mit jeweils nur einem Eintrag?

katy

Antwort 14 von Karin97 vom 17.10.2020, 08:51 Options

Hallo Katy,
Hallo son_quatsch

Zitat:
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?


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");
   
[b]echo"<select><option value='1' ($id=='1') ? 'SELECTED':''>std</option>        
<option value='2' ($id=='2') ? 'SELECTED':''>km</option> </select> ";[/b]

}


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 vom 17.10.2020, 09:10 Options

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 vom 17.10.2020, 10:11 Options

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

Ähnliche Themen

Problem bei Mysql Abfrage
Tolli  02.07.2007 - 25 Hits - 3 Antworten

If then Abfrage
gaudino  31.08.2007 - 16 Hits - 6 Antworten

SQL-Abfrage mit einer Variablen
networking  15.11.2007 - 220 Hits - 3 Antworten

UPDATE in einer javascript abfrage?
kibs  31.03.2008 - 6 Hits - 1 Antwort

Abfrage in PHP/MySQL
ClaudiaGauss  15.07.2008 - 44 Hits - 2 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026