[GastForen Programmierung/Entwicklung PHP und MySQL Drop Down mit SQL

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Drop Down mit SQL

Urs
Beiträge gesamt: 176

5. Jan 2011, 20:37
Beitrag # 1 von 12
Bewertung:
(42210 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen
Ich möchte eine Drop Down Auswahl mit Daten aus einer SQL-Tabelle füllen.

Hat jemand von Euch ein PHP-Beispiel dafür?

Besten Dank

Gruss Urs
X

Drop Down mit SQL

Ollli
Beiträge gesamt: 458

5. Jan 2011, 21:27
Beitrag # 2 von 12
Beitrag ID: #460928
Bewertung:
(42194 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Urs,

versuch es mal damit:
Code
<html> 
<head>
<title>Dropdown</title>
</head>
<body>
<form action="<?= $PHP_SELF ?>" method="post">
Stadt:
<select name="stadt">
<?php
mysql_connect('localhost', '', '');
mysql_select_db('db');

// SQL-Query erzeugen
$sql = "SELECT id,name FROM dropdown ORDER BY inhalt";
$result = mysql_query($sql);

// für jeden Eintrag ein Option-Tag erstellen
while ($row = mysql_fetch_array($result)) {
echo '<option value="'.$row['id'].'"'.($_POST['stadt'] == $row['id'] ? " selected": "").'>'.$row['name'].'</option>';
}
?>
</select>
<input type="submit" value="Senden" />
</form>
</body>
</html>


Das ist natürlich nur eine sehr einfach Demo. Das wichtigste habe ich kommentiert. Zuerst wird die SQL-Abfrage erstellt. Anschließend wird für jede Zeile ein Option-Eintrag erstellt. Dabei wird die ID als Value und der Inhalt (Stadtname) als Darstellungswert festgelegt.
Das Formular ruft sich in diesem Beispiel selbst auf und übergibt die Auswahl des Dropdowns in dem Parameter "stadt". Diese mögliche Auswahl wird mittels
Code
($_POST['stadt'] == $row['id'] ? " selected": "") 

geprüft. Wenn die IDs übereinstimmen, wird dieser Wert vorausgewählt. Das ist z.B. nützlich, wenn man eine Fehlerbehandlung des Formulars durchführt und es dem User zur Korrektur auffordert. So bleibt die Dropdown-Auswahl des Users erhalten.
Um den PHP-Teil gehören dann natürlich noch die select-Tags.

Hier sind noch die Beispieldaten:
Code
-- MySQL-Dump der Tabelle 

CREATE TABLE IF NOT EXISTS `dropdown` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 ;

INSERT INTO `dropdown` (`id`, `inhalt`) VALUES
(1, 'Berlin'),
(2, 'München'),
(3, 'Köln'),
(4, 'Hamburg'),
(5, 'Bremen'),
(6, 'Dormund'),
(7, 'Stuttgart'),
(8, 'Frankfurt'),
(9, 'Dresden'),
(10, 'Erfurt');


MfG


als Antwort auf: [#460922]

Drop Down mit SQL

Urs
Beiträge gesamt: 176

6. Jan 2011, 21:09
Beitrag # 3 von 12
Beitrag ID: #461012
Bewertung:
(42151 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Ollli

So funktioniert es...

Super..... Vielen Dank....

In der Variable "stadt" steht nin die id.
Ist es auch möglich, dass der wert der id und der wert von name übergeben werden können?


als Antwort auf: [#460928]

Drop Down mit SQL

Ollli
Beiträge gesamt: 458

6. Jan 2011, 22:30
Beitrag # 4 von 12
Beitrag ID: #461019
Bewertung:
(42141 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Urs,

wieso willst du beide Werte übermitteln? Du kannst doch dann mittels der ID die Stadt aus der Datenbank holen.
Wenn du wirklich beides benötigst, könntest du die Zeile
Code
echo '<option value="'.$row['id'].'"'.($_POST['stadt'] == $row['id'] ? " selected": "").'>'.$row['name'].'</option>'; 

ändern in
Code
echo '<option value="'.$row['id'].'|'.$row['name'].'"'.($_POST['stadt'] == ($row['id'].'|'.$row['name']) ? " selected": "").'>'.$row['name'].'</option>'; 


Nun steht in $_POST['stadt'] z.B. "3|Köln". Die Werte kann man mittels
Code
list($id,$name) = explode('|',$_POST['stadt']); 

extrahieren.

Ich habe mal die betreffenden Teile des Scripts angepasst. Es ist eine Überprüfung enthalten, ob bereits eine Auswahl erfolgte und zudem ist hinter dem Dropdown eine kleine Anzeige zu sehen, was bem letzten Absenden ausgewählt war.
Code
                  $result = mysql_query($sql); 
if (!empty($_POST['stadt'])) {
list($id,$name) = explode('|',$_POST['stadt']);
}
else {
$id = 0;
$name = '';
}


while ($row = mysql_fetch_array($result)) {
echo '<option value="'.$row['id'].'|'.$row['name'].'"'.($id == $row['id'] ? " selected": "").'>'.$row['name'].'</option>';
}
?>
</select>
<input type="submit" value="Senden" /><?= $id != 0 ? (' - vorherige Auswahl: ' . htmlentities($id.' '.$name)) : '' ?>


Nichts desto trotz, empfehle ich nur die Übermittlung der ID, womit du dann den Wert aus der Datenbank holst. Achte dabei aber auf die Prüfung der ID, um eine SQL-Injection zu vermeiden.
Bei IDs ist sowas sehr einfach - im Gegensatz zu Text:
Code
$id = (int)$_POST['stadt']; 


MfG


als Antwort auf: [#461012]
(Dieser Beitrag wurde von Ollli am 6. Jan 2011, 22:33 geändert)

Drop Down mit SQL

Urs
Beiträge gesamt: 176

7. Jan 2011, 06:20
Beitrag # 5 von 12
Beitrag ID: #461034
Bewertung:
(42123 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Ollli

Nochmals besten Dank. Ich werde es heute abend ausprobieren.
Warum will ich beide Werte auslesen... Die id benötige ich, da diese in eine andere Datenbank-Tabelle geschrieben wird, ie stadt benötige ich, auch der nächsten Seite zur Anzeige, welche werte im Klartext in die DB geschrieben werden.

Gruss Urs


als Antwort auf: [#461019]

Drop Down mit SQL

Urs
Beiträge gesamt: 176

8. Jan 2011, 18:00
Beitrag # 6 von 12
Beitrag ID: #461147
Bewertung:
(42085 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich werde, wie Ihr es vorgeschlagen habt, nur die ID übernehmen.

Nun noch meine letzte Frage zu Drop Down.

Kann bei dieser Variante auch der select Befehl angewndet werden?
d.h. wird ein Feld mit einem Drop Down geändert, wird auf den bereits gewählten Wert gesprungen

Nochmals vielen Dank

Gruss Urs


als Antwort auf: [#461034]

Drop Down mit SQL

Catzenjaeger
Beiträge gesamt: 23

20. Mär 2011, 14:15
Beitrag # 7 von 12
Beitrag ID: #467331
Bewertung:
(41489 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo

habe das Beispiel von diesen Thread genommen und entsprechend abgeändert aber bekomme nur leere Felder angezeigt. Bin verzweifelt - kann mir bitte jemand helfen?

Zur Erklärung

in meiner Datenbank gibt es die Tabelle "Personendaten" mit den Feldern "PF1" bis "PF10"

"PF1" ist zb gleich "ID"
"PF2" ist gleich "Betriebsstelle"
"PF3" ist gleich der "Nachname"
"PF4" ist gleich der "Vorname"
usw.

Ich möchte nun ein kleines suchformular erstellen wo man einfach einen Nachnamen und Vornamen auswählen kann und wenn man auf submit klickt soll sich die Ergebnisseite öffenen. Mit eine normalen Textbox habe ich das hinbekommen - jedoch muss man da in 2 getrennte Textfelder den Vornamen und den Nachnamen eintippen und dann auf senden drücken - das funktioniert.

Ich wollte dies ein bisschen komfortabler machen und deshalb ein Dropdown bereitstellen anstatt zweier Textfelder

Nun der Code funktioniert nicht - das Feld bleibt leer. Und wie bekomme ich den den Vor und Nachnamen in eine Dropdown?

Wäre supi wenn da jemand helfen könnte

Vielen dank

Code
<html>  
<head>
<title>Dropdown</title>
</head>
<body>
<form action="<?= $PHP_SELF ?>" method="post">
Nachname:
<select name="stadt">
<?php
mysql_connect('localhost', 'Datenbankuser', 'Datenbankpasswort');
mysql_select_db('Datenbank_');

// SQL-Query erzeugen

$sql = "SELECT PF3 FROM Personendaten";
$result = mysql_query($sql) OR die(mysql_error());
while($row = mysql_fetch_assoc($result)) {
echo "<option>"$row['options']"</option>";
}
?>
</select>
<input type="submit" value="Senden" />
</form>
</body>
</html>



als Antwort auf: [#460928]

Drop Down mit SQL

flobaer
Beiträge gesamt: 317

23. Mär 2011, 11:35
Beitrag # 8 von 12
Beitrag ID: #467501
Bewertung:
(41397 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Catzenjaeger,

wenn ich Dich richtig verstanden habe, ist der Vorname im Feld PF4 und der Nachname im Feld PF3 gespeichert. Jetzt kannst Du Vor- und Nachname entweder schon in der Abfrage kombinieren oder Du fragst beide Felder ab und baust sie in PHP zusammen
Code
$sql = "SELECT CONCAT(PF4,' ',PF3) AS Name FROM Personendaten;";  
$result = mysql_query($sql) OR die(mysql_error());
while($row = mysql_fetch_assoc($result)) {
echo("<option>".$row['Name']."</option>");
}

oder

$sql = "SELECT PF4,PF3 FROM Personendaten;";
$result = mysql_query($sql) OR die(mysql_error());
while($row = mysql_fetch_assoc($result)) {
echo("<option>".$row['PF4']." ".$row['PF3']."</option>";
}


In jedem Fall musst Du aber sicher noch die ID auslesen und dann der option als value mitgeben, damit Du bei Auswertung weißt, welcher Name gewählt wurde.

Viele Grüße
Florian


als Antwort auf: [#467331]

Drop Down mit SQL

Catzenjaeger
Beiträge gesamt: 23

25. Mär 2011, 08:44
Beitrag # 9 von 12
Beitrag ID: #467655
Bewertung:
(41347 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
ja danke schon einmal. Wie kann ich den den eindeutigen datensatz dazu auslesen? die ID habe ich logischweise vergeben. Ich habe das problem das meine Datenbank aus sozusagen Rubriken besteht. Das ganze ist ein Formular was mehrer Themenbereiche hat. in Tabelle personendaten speichere ich zuerst die Personedaten - in den weiteren Tabellen die Ergebnisse (Eingaben der user) nach Rubrik getrennt. Ich möchte mir quasi den datensatrz den ein bestimmter User gemacht hat wieder darstellen lassen. Da ich das Datum mit speichere wäre sicherlich eine auswahl nach datum noch sinnvoll. Das Formular soll ja daten speichern die sich jährlich wiederholen - so das eine auswahl in der SUCHE NACH DATUM 8DAS JAHR9 SICHER Sinn macht - nur an so etwas scheitere ich noch


als Antwort auf: [#467501]

Drop Down mit SQL

flobaer
Beiträge gesamt: 317

25. Mär 2011, 09:08
Beitrag # 10 von 12
Beitrag ID: #467659
Bewertung:
(41340 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das ist dann aber ein anderes Thema. Vielleicht solltest Du hierzu dann auch ein neues Thema aufmachen...


als Antwort auf: [#467655]

Drop Down mit SQL

Catzenjaeger
Beiträge gesamt: 23

25. Mär 2011, 09:10
Beitrag # 11 von 12
Beitrag ID: #467660
Bewertung:
(41340 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Catzenjaeger ] ja danke schon einmal. Wie kann ich den den eindeutigen datensatz dazu auslesen? die ID habe ich logischweise vergeben. Ich habe das problem das meine Datenbank aus sozusagen Rubriken besteht. Das ganze ist ein Formular was mehrer Themenbereiche hat. in Tabelle personendaten speichere ich zuerst die Personedaten - in den weiteren Tabellen die Ergebnisse (Eingaben der user) nach Rubrik getrennt. Ich möchte mir quasi den datensatrz den ein bestimmter User gemacht hat wieder darstellen lassen. Da ich das Datum mit speichere wäre sicherlich eine auswahl nach datum noch sinnvoll. Das Formular soll ja daten speichern die sich jährlich wiederholen - so das eine auswahl in der SUCHE NACH DATUM (das ensprechende Jahr) Sinn macht - nur an so etwas scheitere ich noch



also hier mal meine mini suchmaske

Code
<html>   

<head>

<title>Dropdown</title>
</head>
<body>
<form action="result_suche_expedient.php" method="post">Name<select name="Name">

<?php

mysql_connect('localhost', 'DBPassuser', 'DBPasswort');
mysql_select_db('MeineDB_');
// SQL-Query erzeugen


$sql = "SELECT CONCAT(PF4,' ',PF3) AS Name FROM Personendaten;";
$result = mysql_query($sql) OR die(mysql_error());
while($row = mysql_fetch_assoc($result)) {
echo("<option>".$row['Name']."</option>");


}
?>
</select>
<input type="submit" value="Senden" />
</form>
</body>
</html>


die Seite schein zu finktionieren - name wird richtig dargestellt - aber die Result Seite zeigt nichts an


Code
<html> 
<body bgcolor="#F0FFFF">
<?php
include("global.inc.php");

$Name=$_POST['Name']; //datenpaket aus suche seite was übergeben wird


//DB Verbindung aufnehmen
$link = mysql_connect('localhost','DBUser','DBPpasswort');
mysql_select_db('MeineDB_',$link);
//suche alle datensätze mit den namen aus Such Formular und finde die passende id dazu
$sql = @mysql_query("SELECT id FROM Personendaten Where `PF3` LIKE('$Name')") or die('Nicht vorhanden');

$row = mysql_fetch_array($sql);
//speichere die id als variable um sie weiter zu verwenden
$id=$row['id'];
//echo '$id' //id als zahl ausgeben

$result = mysql_query("SELECT * FROM Personendaten WHERE id LIKE '$id'");
$result1 = mysql_query("SELECT * FROM Buehler WHERE id LIKE '$id'");
$result2 = mysql_query("SELECT * FROM Allgemein WHERE id LIKE '$id'");
$result3 = mysql_query("SELECT * FROM AllgemeinTL WHERE id LIKE '$id'");
$result4 = mysql_query("SELECT * FROM Touristik WHERE id LIKE '$id'");
$result5 = mysql_query("SELECT * FROM TouristikTL WHERE id LIKE '$id'");
$result6 = mysql_query("SELECT * FROM Business WHERE id LIKE '$id'");
$result7 = mysql_query("SELECT * FROM BusinessTL WHERE id LIKE '$id'");
$result8 = mysql_query("SELECT * FROM Softskills WHERE id LIKE '$id'");
$result9 = mysql_query("SELECT * FROM Technikwissen WHERE id LIKE '$id'");
$result10 = mysql_query("SELECT * FROM Technikwissen WHERE id LIKE '$id'");
while($row = mysql_fetch_array($result)) // schleife solange ausführen bis resultset keine zeilen mehr hat
while($row1 = mysql_fetch_array($result1)) // schleife solange ausführen bis resultset keine zeilen mehr hat
while($row2 = mysql_fetch_array($result2)) // schleife solange ausführen bis resultset keine zeilen mehr hat
while($row3 = mysql_fetch_array($result3)) // schleife solange ausführen bis resultset keine zeilen mehr hat
while($row4 = mysql_fetch_array($result4)) // schleife solange ausführen bis resultset keine zeilen mehr hat
while($row5 = mysql_fetch_array($result5)) // schleife solange ausführen bis resultset keine zeilen mehr hat
while($row6 = mysql_fetch_array($result6)) // schleife solange ausführen bis resultset keine zeilen mehr hat
while($row7 = mysql_fetch_array($result7)) // schleife solange ausführen bis resultset keine zeilen mehr hat
while($row8 = mysql_fetch_array($result8)) // schleife solange ausführen bis resultset keine zeilen mehr hat
while($row9 = mysql_fetch_array($result9)) // schleife solange ausführen bis resultset keine zeilen mehr hat
while($row10 = mysql_fetch_array($result10)) // schleife solange ausführen bis resultset keine zeilen mehr hat


so das ganze funktioniert leider nicht - seite result bleibt leer :( und ich kann das datum auf der Suchseite nicht mit als Bedingung einbinden. Wie gesagt eine kleine Maske das mir die Möglichkeit gibt. Im Ersten Dropdown ein Jahr zu wählen das mir die daten aus der tabelle Personendaten wo in Feld PF1 das Datum automatisch bei anlegen des datensatzes gespeichert wird ausgibt. (Daten wiederholen sich jeder Jahr und man sollte die Möglichkeit haben irgendwie den ensprechenden Datensatz des jeweiligen Users zu finden) und dann im zweiten Dropdown die Betreibstelle (PF2) auswählen zu lassen und dann die ensprechenden Personen die dort arbeiten die ich wiedereum aus einen Dropdown auswählen kann. Ist das möglich?

also 3 Dropdowns die ensprechend das anzeigen was ich im vorherigen angebe. Datum(PF1) --> Betriebsstelle(PF2) --> Person(PF3 + PF4) --> Suchergebniss

vielelnm vielen dank schon einmal für eure Hilfe


als Antwort auf: [#467655]

Drop Down mit SQL

Catzenjaeger
Beiträge gesamt: 23

28. Mär 2011, 13:08
Beitrag # 12 von 12
Beitrag ID: #467845
Bewertung:
(41259 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
das Zauberwort war CONCAT(PF4,' ',PF3) - hatte das concat vergessen :) - jetzt gehts

aber wie bekomme ich so etwas hin:

--> Jahr auswählen --> Betriebsstelle auswählen --> nun werden nur die Mitarbeiter der Betriebsstelle angezeigt --> Namen auswählen --> Ergebnis anzeigen

hat da jemand eine Lösung ? Vielen Dank schon einmal


als Antwort auf: [#467660]
(Dieser Beitrag wurde von Catzenjaeger am 28. Mär 2011, 13:09 geändert)
X