• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

SQL-Abfrage in Dropdown ausgeben

Bourbon

Mitglied
Hallo Leute,

jetzt habe ich mal etwas Schwierigeres.

Ich will gerade eine Maske erstellen, in der ein Nutzer Informationen zur einer bestimmten Gruppe bzw. einem bestimmten Nutzer abspeichern kann.

Dafür muss ich ja aber erst einmal die, dem Nutzer sichtbaren, Gruppen bzw. Nutzer auswählen lassen.
Das heißt, dass der Nutzer in die Drowndown-Auswahl klickt, eine Server-Abfrage erfolgt, die ihm alle ihm sichtbaren Gruppen ausspuckt und diese ausgewählt werden können.

Ich hab es jetzt einfach mal probiert und wollte mir von der Tabelle "account" alle Nachnamen als dropdown ausgeben lassen. Funktioniert leider nicht.

PHP:
<select> 
<?php
  require_once "db_daten.php";  
    $sql = "SELECT 
                account.surname 
            FROM 
                account"; 
    $result = mysql_query($sql) OR die(mysql_error()); 
        while($row = mysql_fetch_assoc($result)) { 
echo "<option>" . $row['options'] . "</option>"; 
} 
?> 
</select>

Ich habe hier nur mal ein Code aus einem Tutorial geringfügig angepasst. Ich würde jetzt denken, dass der schon etwas älter ist. Hab mir leider den Link zum Tutorial nicht abgespeichert.
 
Werbung:
Hallo Leute,

jetzt habe ich mal etwas Schwierigeres.

Ich will gerade eine Maske erstellen, in der ein Nutzer Informationen zur einer bestimmten Gruppe bzw. einem bestimmten Nutzer abspeichern kann.

Dafür muss ich ja aber erst einmal die, dem Nutzer sichtbaren, Gruppen bzw. Nutzer auswählen lassen.
Das heißt, dass der Nutzer in die Drowndown-Auswahl klickt, eine Server-Abfrage erfolgt, die ihm alle ihm sichtbaren Gruppen ausspuckt und diese ausgewählt werden können.

Ich hab es jetzt einfach mal probiert und wollte mir von der Tabelle "account" alle Nachnamen als dropdown ausgeben lassen. Funktioniert leider nicht.

PHP:
<select>
<?php
  require_once "db_daten.php";
    $sql = "SELECT
                account.surname
            FROM
                account";
    $result = mysql_query($sql) OR die(mysql_error());
        while($row = mysql_fetch_assoc($result)) {
echo "<option>" . $row['options'] . "</option>";
}
?>
</select>

Ich habe hier nur mal ein Code aus einem Tutorial geringfügig angepasst. Ich würde jetzt denken, dass der schon etwas älter ist. Hab mir leider den Link zum Tutorial nicht abgespeichert.

Also das Tutorial ist sicher alt.
Wieso verwendest du jetzt das veraltete mysql_ statt den Prepared Statements die du schon verwendet hast?

Müsste es nicht statt $row['options'] $row['surname'] oder ähnlich heißen?
 
Werbung:
Also das Tutorial ist sicher alt.
Wieso verwendest du jetzt das veraltete mysql_ statt den Prepared Statements die du schon verwendet hast?

Müsste es nicht statt $row['options'] $row['surname'] oder ähnlich heißen?

Bis jetzt sahen meine Abfragen ja immer so aus (mit dem prepared statement):
PHP:
<?php
require_once "db_daten.php";
if($stmt = $mysqli->prepare(
          "SELECT
            account.surname,
            account.user_ID
           FROM
            account
            ")) {
  $stmt->execute();
  $stmt->bind_result($surname, $user_ID);
  echo "<table border='1'>\n";
  while($stmt->fetch()) {
   echo "<tr>\n\t<td>"
       . htmlspecialchars($surname)
       . "</td>\n</tr>\n";
    }
  $stmt->close();
}
$mysqli->close();
?>
</table>
Nur hab ich jetzt keine Ahnung, wie ich das in eine Dropdown-Liste bekomme.


wie kommst du auf $row['options'] ?

+ mysql ist veraltet, aber das steht ja in jedem zweiten thread über sql,
Was wäre denn die bessere Alternative?
 
Bis jetzt sahen meine Abfragen ja immer so aus (mit dem prepared statement):
PHP:
<?php
require_once "db_daten.php";
if($stmt = $mysqli->prepare(
          "SELECT
            account.surname,
            account.user_ID
           FROM
            account
            ")) {
  $stmt->execute();
  $stmt->bind_result($surname, $user_ID);
  echo "<table border='1'>\n";
  while($stmt->fetch()) {
   echo "<tr>\n\t<td>"
       . htmlspecialchars($surname)
       . "</td>\n</tr>\n";
    }
  $stmt->close();
}
$mysqli->close();
?>
</table>
Nur hab ich jetzt keine Ahnung, wie ich das in eine Dropdown-Liste bekomme.

Fällt dir eine gewisse Ähnlichkeit zwischen dem hier auf?

Code:
while($stmt->fetch()) {
   echo "<tr>\n\t<td>"
       . htmlspecialchars($surname)
       . "</td>\n</tr>\n";
   }
Code:
while($row = mysql_fetch_assoc($result)) {
echo "<option>" . $row['options'] . "</option>";
}
 
PHP:
<?php
require_once "db_daten.php";
if($stmt = $mysqli->prepare(
          "SELECT
            account.surname,
            account.user_ID
           FROM
            account
           GROUP BY
            account.surname
            ")) {
  $stmt->execute();
  $stmt->bind_result($surname, $user_ID);
  echo "<select>";
  while($stmt->fetch()) {
   echo '<option value="Nachname">"'.$surname.'"</option>';
    }
  $stmt->close();
}
$mysqli->close();
?>
</table>
Hatte es zwischenzeitlich schon hinbekommen.
Funktioniert einwandfrei. Was muss ich eigentlich ändern, damit in dem Feld erst einmal "Nachname" steht, bevor ich etwas auswähle?
 
Werbung:
PHP:
<?php
require_once "db_daten.php";
if($stmt = $mysqli->prepare(
          "SELECT
            account.surname,
            account.user_ID
           FROM
            account
           GROUP BY
            account.surname
            ")) {
  $stmt->execute();
  $stmt->bind_result($surname, $user_ID);
  echo "<select>";
  while($stmt->fetch()) {
   echo '<option value="Nachname">"'.$surname.'"</option>';
    }
  $stmt->close();
}
$mysqli->close();
?>
</table>
Hatte es zwischenzeitlich schon hinbekommen.
Funktioniert einwandfrei. Was muss ich eigentlich ändern, damit in dem Feld erst einmal "Nachname" steht, bevor ich etwas auswähle?

Ich denke so sollte das klappen:
HTML:
<select>
    <option value="0" disabled selected>Nachname</option>
    <option value="1">Mustermann</option>
    <option value="2">Musterfrau</option>
</select>
 
Ich denke so sollte das klappen:
HTML:
<select>
    <option value="0" disabled selected>Nachname</option>
    <option value="1">Mustermann</option>
    <option value="2">Musterfrau</option>
</select>
Sind da die Antwortmöglichkeiten nicht vorgegeben?

Kann ich die dazugehörige user_ID auch irgendwie weiterverarbeiten? Sicher ja, aber wie :)
 
Sind da die Antwortmöglichkeiten nicht vorgegeben?

Ich poste reines HTML, da deine Frage eine HTML-Frage ist - auch wenn es durch PHP generiert wird.
Es sollte eigentlich klar sein, dass die <options> 1 & 2 nur zur Veranschaulichung dienen.
Die richtigen müssen natürlich von deinem PHP-Script generiert werden.

Kann ich die dazugehörige user_ID auch irgendwie weiterverarbeiten? Sicher ja, aber wie :)

In das value-Attribut kommen die user_IDs und dann braucht das select noch ein name-Attribut.
 
Werbung:
Mist, jetzt wirft der mir einen Fehler aus:
PHP:
<?php
require_once "db_daten.php";
if($stmt = $mysqli->prepare(
          "SELECT
            account.surname,
            account.user_ID
           FROM
            account
           GROUP BY
            account.surname
            ")) {
  $stmt->execute();
  $stmt->bind_result($surname, $user_ID);
  echo "<select name='selected_user'>";
  while($stmt->fetch()) {
   echo '<option value='$user_ID'>'.$surname.'</option>';
    }
  $stmt->close();
}
$mysqli->close();
?>
</select>
Habe es schon mit " ' ' " ' " " ' " " ' ' probiert, aber keins davon geht.
 
Parse error: syntax error, unexpected '$user_ID' (T_VARIABLE), expecting ',' or ';' in C:\xampp\htdocs\php-beispiele\Website Testdateien\TEST_SQLdropdown.php on line 16

PHP:
<?php
require_once "db_daten.php";
if($stmt = $mysqli->prepare(
          "SELECT
            account.surname,
            account.user_ID
           FROM
            account
           GROUP BY
            account.surname
            ")) {
  $stmt->execute();
  $stmt->bind_result($surname, $user_ID);
  echo "<select name='selected_user'>";
  while($stmt->fetch()) {
   echo '<option value='$user_ID'>'.$surname.'</option>'
    }
  $stmt->close();
}
$mysqli->close();
?>
</select>
 
Werbung:
Bourbon, du lässt dir aber so ziemlich alles vorkauen, oder? Einen blöden Parse-Error sollte man alleine finden können!
 
Hier
PHP:
echo "<option value=\" $user_ID\">$surname</option>"
oder
PHP:
echo '<option value="' . $user_ID . '">' . $surname . '</option>'

gibt sicher mehrere Möglichkeiten aber hier wäre das einfachste der beste Weg..

Edit: in ersten Beispiel Anführungszeichen mit \ auskommentieren.
 
Zuletzt bearbeitet:
Werbung:
Bourbon, du lässt dir aber so ziemlich alles vorkauen, oder? Einen blöden Parse-Error sollte man alleine finden können!
Wenn es nach Tutorials gehen müsste, es nicht funktioniert, man verschiedene Variante ausprobiert hat und man bei keiner den gewünschten Effekt erhält, was würdest du dann machen? Sicherlich nicht fragen und alles hinschmeißen, oder ;)

Wäre mal ein Autor in der Lage, ein Buch weit über die Grundkenntnisse hinaus zu verfassen, müsste ich ja nicht ständig fragen. Aber die Literatur ist meiner Meinung nach dürftig und richtig sich meist an Leute, die noch nie damit etwas zu tun hatten.
Aber wenn es dich stört, brauchst du mir ja nicht antworten.

Mein Dank an die anderen Threadteilnehmer :)


Hier
PHP:
echo "<option value=$user_ID>$surname</option>"
oder
PHP:
echo '<option value="' . $user_ID . '">' . $surname . '</option>'

gibt sicher mehrere Möglichkeiten aber hier wäre das einfachste der beste Weg..
So sieht es jetzt aus und da funktioniert es auch. Ich hatte die Punkte vergessen.
PHP:
   echo '<option value='.$user_ID.'>'.$surname.'</option>';
 
Zuletzt bearbeitet:
  • Like
Reaktionen: pax
Werbung:
Wäre mal ein Autor in der Lage, ein Buch weit über die Grundkenntnisse hinaus zu verfassen
Was hat denn ein Parse-Error mit hinausgehenden Grundlagen zu tun?

müsste ich ja nicht ständig fragen
Die meisten Fragen von dir haben mit Grundlagen zu tun!

So sieht es jetzt aus und da funktioniert es auch.
Und trotzden ist es falsch, weil Werte in HTML zwischen " oder ' gehören!
 
Ich gestehe mir den Fehler ein hab die Anführungszeichen in der ersten Variante vergessen aber die Zweite beinhaltet welche, das solltest du auch so machen..

Edit: Habe mein Beispiel ausgebessert.
 
Zurück
Oben