Creare lista optiuni HTML Select cu date din tabel MySQL

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
bvlucretiu
Mesaje: 88

Creare lista optiuni HTML Select cu date din tabel MySQL

Bună!
Să rezum ceea ce doresc să fac!
Doresc ca fiecare înregistrare (element) dintr-o anumită coloană, din momentul înregistrării sale în tabelul bazei de date să-mi apară într-un list, pentru a putea fi selectat!
Detaliat concret!
Am un tabel într-o bază de date care are doar două coloane, ”id” și ”alimente” unde înregistrez toate alimentele care le utilizez.
Toate acele înregistrări (alimente) doresc să îmi apară într-o listă (Drop Down List) pe o pagină unde se alcătuiesc rețete iar fiecare nouă înregistrare în tabelul alimente să îmi apară automat în acel ”List”.
Nu am idee în acest moment cum aș putea să explic altfel!

MarPlo Mesaje: 4343
Salut
Daca ceea ce vrei e crearea unei liste <select> cu date inregistrate in tabel mysql, se face asa; in pagina /fisierul php unde vrei sa afisezi lista <select> faci un Select la acel tabel mysql, iar cu datele selectate creezi si adaugi optiunile in <select>.
Cam asa, cu PHP PDO.

Cod: Selectaţi tot

<?php
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb = 'localhost';
$namedb = 'numedb';
$userdb = 'username';
$passdb = 'password';

$sel = '<select name="nume">';       // contine inceputul listei select

try {
  // Conectare si creare obiect PDO
  $dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
  $dbh->exec("SET CHARACTER SET utf8");      // Setare encoding caractere UTF-8

  // Selectare date
  $sql = "SELECT `id`, `alimente` FROM `nume_tabel`";
  $datas = $dbh->query($sql);

  // Daca select-ul e facut cu succes ($datas nu e false)
  if($datas !== false) {
    // Se parcurg si adauga datele selectate in <select
    foreach($datas as $row) {
     $sel .=  '<option value="'. $row['alimente'] .'">'. $row['alimente'] .'</option>';
    }
  }

  $dbh = null;        // Deconectare
}
catch(PDOException $e) {
  echo $e->getMessage();
}

// inchide si afiseaza lista select
$sel .= '</select>';
echo $sel;
?>
- Principiul de selectare si creare a listei <select> cu optiuni e acelasi, daca vrei in loc de PDO sa folosesti MySQLi, sau mysql standard.
- Te poti descurca daca studiezi lectiile si tutorialele despre Select in mysql din Cursul php-mysql de pe site.

bvlucretiu Mesaje: 88
Bună
Pentru a alcătui o rețetă sunt nevoie de mai multe alimente și în această situație am nevoie de mai multe câmpuri unde am nevoie de selectarea alimentelor pentru ca toate împreună să formeze o rețetă, iar numărul alimentelor care alcătuiesc o rețetă diferă și în această situație aș avea nevoie de un link care să-mi introducă un nou câmp cu select alimente pentru a nu umple pagina cu câmpuri <select> nici să am nevoie să mai adaug un aliment și să nu mai am unde să-l introduc.
Trebuie să repet acestă formulă (ce este cuprins între tagurile php) pentru fiecare câmp cu select?

Edit:
- Vă mulţumesc mult, funcţionează aşa cum îmi doream. Am rezolvat şi problema cu afişarea apelată a fiecărei apariţie a câmpului select.

evident Mesaje: 168
Salut,
Uite aici codul fara PDO. Sper sa te ajute.

Cod: Selectaţi tot

<?php
// Conectare la baza de date
mysql_connect("localhost","root","") or die (mysql_error());
mysql_select_db("test") or die (mysql_error());

$sql = mysql_query("SELECT alimente FROM alimente");
$afisare = '';
while($row = mysql_fetch_array($sql)) {
  $alimente = $row["alimente"];
  $afisare .= '<option value="' .$alimente. '">' .$alimente. '</option>';
}
?>
<html>
<head>
</head>
<body> 
<select>
<?php echo $afisare; ?>
</select>
</body>
</html>
Daca ai nelamuriri sau codul nu merge te rog trimite-mi un mesaj pe privat sau scrie aici.
Stima.

bvlucretiu Mesaje: 88
Bună!
$sel = '<select name="nume">';       // contine inceputul listei select
Acest name este valoarea atribuită variabilei $_POST care va specifica coloana în care se introduce obiectul selectat din list?
O problemă e că am nevoie de vreo 30 de astfel de drop dawn list-uri; nu ar exista posibilitatea să utilizez un array pentru a simplifica astfel să nu trebuiască să copiez de 30 de ori această formulă, nu este chiar aşa exagerat, dar dacă există o variantă, trebuie găsită!
Toate cele bune!

MarPlo Mesaje: 4343
Poti adauga 2 paranteze patrate la "nume", asa: "nume[]" .

Cod: Selectaţi tot

$sel = '<select name="nume[]">';
 
Astfel, $_POST['nume'] va contine un Array cu acele valori; adica: $_POST['nume'][0] , $_POST['nume'][1] , ...

bvlucretiu Mesaje: 88
Bună!
Array-ul variabilei $_POST unde trebuie construit, în pagina care prelucrează informaţia preluată din formular(url-ul tagului action)?
Deci toată formula o pun în locul unde trebuie să-mi apară drop down listul iar pentru fiecare select am:

Cod: Selectaţi tot

$sel = '<select name="produs[1]">';
,

Cod: Selectaţi tot

$sel = '<select name="produs[2]">';
etc.
Nu prea am avut timp să mă gândesc la varianta oferită dar o să o aprofundez în weekend mai tare!
Toate cele bune!

Subiecte similare