Come inserire opzioni menù prelevandole dal database con PHP ?

Disperato1

Nuovo Utente
7 Mag 2017
14
0
1
31
SONO DISPERATO! Sto usando questa guida https://www.mrw.it/ajax/menu-select-dinamici-ajax-php_7219.html Devo permettere che le "opzioni" non vengano prese dal file select.php, ma da una query sql dal database. In poche parole per adesso le opzioni vengono prelevate dal file select.php come potete vedere a questo link https://www.mrw.it/ajax/menu-select-dinamici-ajax-php_7219.html invece devo permettere che le opzioni, in questo caso i "linguaggi disponibili" vengano prelevati dal database e poi selezionati come abbiamo fatto con ajax fino a questo momento. Come devo modificare il file select.php inserendo le query sql che prelevano i dati ? E select.html? Come faccio a inserire le opzioni prendendole dalle query sql al database? Per favore aiutatemi !!! SONO DISPERATO !!!

Questo è il codice del mio form html chiamato select.html
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Form Example</title>
</head>
<body background="sfondo1.jpg">
<form action="name.php" method="get">
<div>
<label for="firstname"><b><font color="lime">Inserisci città:</font></b></label>
<input type="text" name="firstname" id="firstname">
</div>
<div>
<label for="categoria"><b><font color="lime">Categoria:</font></b></label>
<select id="categoria" name="categoria" onChange="GetLinguaggi(this.options[this.selectedIndex].text)">
<option value=""></option>
<option>programmazione</option>
<option>scripting</option>
</select>
</div>
<div>
<label for="categoria"><b><font color="lime">Linguaggio:</font></b></label>
<select name="linguaggio" id="linguaggio"></select>
</div>
<div style="margin-top: 20px;">
<input type="submit" value="GO">
</div>
</form>
<script src="ajax.js" type="text/javascript"></script>
<script type="text/javascript">
var url = "select.php";
var what = "SetLinguaggi(req.responseText)";

function GetLinguaggi(Categoria)
{
InviaDati("categoria="+Categoria);
}

function SetLinguaggi(Linguaggi)
{
var linguaggioBox = document.getElementById("linguaggio");
linguaggioBox.options.length = 0;
if(Linguaggi != "")
{
var arrLinguaggi = Linguaggi.split(",");
for(i = 0; i < arrLinguaggi.length; i++)
{
if(arrLinguaggi != "")
{
linguaggioBox.options[linguaggioBox.options.length] =
new Option(arrLinguaggi, arrLinguaggi);
}
}
}
}
</script>
</body>
</html>
 
Ultima modifica di un moderatore:
E' vietato postare la stessa domanda in più sezioni, quella in ajax è stata cancellata.
Utilizza i tag code presenti sulla barra di formattazione per racchiudere il codice che posti.
Per risolvere il tuo problema devi modificare il file select.php inserendo una connessione al database e la query per l'estrazione dei record. Non serve modificare il file html che hai postato.
 
E' vietato postare la stessa domanda in più sezioni, quella in ajax è stata cancellata.
Utilizza i tag code presenti sulla barra di formattazione per racchiudere il codice che posti.
Per risolvere il tuo problema devi modificare il file select.php inserendo una connessione al database e la query per l'estrazione dei record. Non serve modificare il file html che hai postato.
Grazie per la risposta e scusami per le "incongruenze" ma sono disperato! Avevo intuito che dovevo fare quello che mi dici, ma come lo faccio? Nel senso che anche nel file select.html vi è una porzione di codice, dove le scelte le inserisco io "staticamente" ovvero
HTML:
<option value=""></option>
<option>programmazione</option>
<option>scripting</option>
Infatti così siamo noi a dire che ci sono queste 2 opzioni, mentre io devo prendere le possibili opzioni di linguaggio da una tabella del database, dopo questo attraverso ajax vado a selezionare il secondo menù "concatenato". Come posso fare ciò? Ti ringrazio di cuore sperando in una tua risposta!
 
Per favore qualcuno mi può rispondere? Anche un'idea, un aiuto, un consiglio, insomma qualcosa per piacere, sono disperato !!!
 
PHP:
$sql = new mysqli("hostname", "username", "password", "database");
$query = "SELECT * FROM tabella ";
$result = $sql->query($query);
while ($row = $result->fetch_assoc()) {
    echo "<option value='" . $row['nome_campo'] . "'>" . $row['nome_campo'] . "</option>";
}
devi cambiare l'estensione della pagina in .php
 
ok grazie, quindi ricapitolando il mio file select.hmtl diventa php e aggiungo il codice che mi hai postato per poter "prendere" le opzioni dal database. Il file ajax rimane uguale? Chiedo conferma. Mentre il vecchio file select.php ovvero quello della guida https://www.mrw.it/ajax/menu-select-dinamici-ajax-php_7219.html che serve per selezionare le opzioni del secondo menù, quello concatenato al primo, come faccio anche in questo caso a prendere le opzioni dal database? Mi servirebbe soltanto quest'ultimo passaggio, ti ringrazio di cuore, attendo con ansia un tuo consiglio in merito!
 
nel select php fai la stessa cosa solo che cambi la query per creare gli array
Codice:
$query = "SELECT * FROM tabella WHERE nome_campo = '" . $_REQUEST['categoria'] . "'";
 
nel select php fai la stessa cosa solo che cambi la query per creare gli array
Codice:
$query = "SELECT * FROM tabella WHERE nome_campo = '" . $_REQUEST['categoria'] . "'";
Ok, ma come interfaccio il tutto? Cioè il file ajax.js rimane uguale ma allora il vecchio file select.php adesso se inserisco solo la query che mi hai indicato come diventa?
Prima era così
PHP:
<?php
$linguaggi = array();
$linguaggi["programmazione"] = array(
  "Java",
  "Cobol",
  "Delphi",
  "C",
  "Python"
);
$linguaggi["scripting"] = array(
  "PHP",
  "ASP",
  "Jsp",
  "Ruby",
  "Javascript"
);
if(isset($_POST["categoria"]) && isset($linguaggi[$_POST["categoria"]]))
{
  foreach($linguaggi[$_POST["categoria"]] as $linguaggio)
  {
    printf("%s,", $linguaggio);
  }
}
?>
Adesso devo inserire quello che mi hai indicato, ma il mio dubbio è come comunica con gli altri 2 file? Infatti ci si aspetta 2 array:
$linguaggi["scripting"] = array( "PHP", "ASP", "Jsp", "Ruby", "Javascript");
$linguaggi["programmazione"] = array( "Java", "Cobol", "Delphi", "C", "Python");
Come devo strutturare il file?
 
dovrebbe essere cosi
PHP:
if (isset($_POST["categoria"])) {
    $sql = new mysqli("hostname", "username", "password", "database");
    $query = "SELECT * FROM tabella WHERE categoria = '" . $_POST['categoria'] . "'";
    $result = $sql->query($query);
    while ($row = $result->fetch_assoc()) {
        printf("%s,", $row['categoria']);
    }
}
 
dovrebbe essere cosi
PHP:
if (isset($_POST["categoria"])) {
    $sql = new mysqli("hostname", "username", "password", "database");
    $query = "SELECT * FROM tabella WHERE categoria = '" . $_POST['categoria'] . "'";
    $result = $sql->query($query);
    while ($row = $result->fetch_assoc()) {
        printf("%s,", $row['categoria']);
    }
}
Quindi il "vecchio" file select.php conterrà solo l'ultimo codice che mi hai postato, perchè i 2 array adesso non servono più? Grazie ancora!
 
si, l'array si crea con la query
L'ho provato ma mi funziona solo il primo menù !!! Il secondo mi scrive questo errore: FATAL ERROR: CALL TO A MEMBER FUNCTION FETCH_ASSOC ON NULL ed è riferito al file select.php da te modificato
Codice:
if (isset($_POST["categoria"])) {
    $sql = new mysqli("hostname", "username", "password", "database");
    $query = "SELECT * FROM tabella WHERE categoria = '" . $_POST['categoria'] . "'";
    $result = $sql->query($query);
    while ($row = $result->fetch_assoc()) {
        printf("%s,", $row['categoria']);
    }
}
AIUTAMI PER FAVORE !!!
 
spero che hai messo il nome della tua tabella e i parametri di connessione al tuo database
dopo
PHP:
$result = $sql->query($query);
aggiungi
PHP:
<?php
if(!$result) {
echo "error : " . $sql->error;
}
ti stamperà l'errore
 

Discussioni simili