[PHP] Creare un menu a tendina con pdo

Max61

Utente Attivo
2 Mar 2014
616
3
18
Salve, andando avanti nella conversione da PHP 5 A PHP 7, mi sorgono altri problemi che da solo anche con esempi presi in rete non ce la faccio.
PHP:
$sql = "SELECT *

FROM tblanagrafica
WHERE Anno <> 0
GROUP BY Anno
ORDER BY Anno";
$result = mysql_query($sql);

echo "<select name='Anno'>";
while ($row = mysql_fetch_array($result)) {
    echo "<option value='" . $row['Anno'] ."'>" . $row['Anno'] ."</option>";
}
echo "</select>";
Ho provato questo codice ma da questo errore
Fatal error: Uncaught Error: Call to undefined function mysql_query()
in questa riga
PHP:
$result = mysql_query($sql);
come posso risolvere?
Grazie
Max61
 

marino51

Utente Attivo
28 Feb 2013
2.589
130
63
Lombardia
prova così
PHP:
$sql = "SELECT *
FROM tblanagrafica
WHERE Anno <> 0
GROUP BY Anno
ORDER BY Anno";

$result = $db->query($sql)->fetchAll();

echo "<select name='Anno'>";
while ($result as $row)
{
    echo "<option value='" . $row['Anno'] ."'>" . $row['Anno'] ."</option>";
}
echo "</select>";
 

Max61

Utente Attivo
2 Mar 2014
616
3
18
Provato...mi da questo errore
Parse error: syntax error, unexpected 'as' (T_AS)
in questa riga
PHP:
while ($result as $row)
 

macus_adi

Utente Attivo
5 Dic 2017
1.028
58
48
IT/SW
La sintassi da utilizzare con "as" è foreach o foreachelse , quest'ultima è disponibile solo se utilizzi un template engine.
In definitiva non si usa il while in questo modo!
while ($result as $row)
Il while si aspetta un confronto, non assegna nulla nè per riferimento nè per valore!
PHP:
while (expr):
   statement
   ...
endwhile;
http://php.net/manual/en/control-structures.while.php

Sintassi corretta con l'utilizzo di "as"
PHP:
foreach($result as row){
}
Altra sintassi
PHP:
for($i=0;$i<count($result);$i++){
    echo $result[$i]['Dato'];
}
Sintassi con while
PHP:
$i=0;
while($i<count($result)){

echo $result[$i]['Dato'];
$i++;
}
Se vuoi la ricorsione:
PHP:
$test=range('a','z');
function print_my_data(&$i,$data){
   if(($i<=>count($data)-1)<=0){
      echo $data[$i];
      $i++;
      return print_my_data($i,$data);
   }
}
$i=0;
print_my_data($i,$test);
 
Ultima modifica:

Max61

Utente Attivo
2 Mar 2014
616
3
18
Ciao, ho provato ma mi da errore sulle parentesi, ho provato a seguirlo ma... niente
PHP:
$sql = "SELECT *
FROM tblanagrafica
WHERE Anno <> 0
GROUP BY Anno
ORDER BY Anno";

$result = $db->query($sql)->fetchAll();

echo "<select name='Anno'>";
foreach($result as row){
}
    echo "<option value='" . $row['Anno'] ."'>" . $row['Anno'] ."</option>";
}
echo "</select>";
errore qua
PHP:
foreach($result as row){
Parse error: syntax error, unexpected ')', expecting '[' in
 

macus_adi

Utente Attivo
5 Dic 2017
1.028
58
48
IT/SW
hai chiuso prima!!!!!!!!!
echo "<select name='Anno'>";
foreach(
$result as row){
}
echo
"<option value='" . $row['Anno'] ."'>" . $row['Anno'] ."</option>";
}
echo
"</select>";
Aperta { metti codice chiudi }..
PHP:
foreach($result as row){
    echo "<option value='" . $row['Anno'] ."'>" . $row['Anno'] ."</option>";
}
 

Max61

Utente Attivo
2 Mar 2014
616
3
18
oK..questa è la query completa
PHP:
$sql = "SELECT *
FROM tblanagrafica
WHERE Anno <> 0
GROUP BY Anno
ORDER BY Anno";

$result = $db->query($sql)->fetchAll();

echo "<select name='Anno'>";
foreach($result as row){
    echo "<option value='" . $row['Anno'] ."'>" . $row['Anno'] ."</option>";
}
stesso riga, stessa errore
Parse error: syntax error, unexpected ')', expecting '[' in
dove sbaglio?
 

macus_adi

Utente Attivo
5 Dic 2017
1.028
58
48
IT/SW
Sorry colpa mia... copiando e incollando mi sono perso un pezzo....
PHP:
//qui manca l'ass variabile "$row"
foreach($result as $row){
    echo "<option value='" . $row['Anno'] ."'>" . $row['Anno'] ."</option>";
}
 

Max61

Utente Attivo
2 Mar 2014
616
3
18
Ho provato così, ma ora da errore alla riga 245
PHP:
$sql = "SELECT *
FROM tblanagrafica
WHERE Anno <> 0
GROUP BY Anno
ORDER BY Anno";

$result = $db->query($sql)->fetchAll();

echo "<select name='Anno'>";
foreach($result as $row){

    echo "<option value='" . $row['Anno'] ."'>" . $row['Anno'] ."</option>";
}
echo "</select>";
riga 245
PHP:
$result = $db->query($sql)->fetchAll();
Fatal error: Uncaught Error: Call to a member function query()
 

Max61

Utente Attivo
2 Mar 2014
616
3
18
installato e abilitato, la versione è:
  • Apache/2.4.37 (Win32) OpenSSL/1.1.1a PHP/7.3.1
 

Max61

Utente Attivo
2 Mar 2014
616
3
18
query completa
PHP:
require('Connessione.php');

    try {
  // stringa di connessione al DBMS
  $connessione = new PDO("mysql:host=$host;dbname=$db", $user, $password);
  // imposto dell'attributo necessario per ottenere il report degli errori
  $connessione->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // selezione e visualizzazione dei dati estratti
  $sql = "SELECT *
FROM tblanagrafica
WHERE Anno <> 0
GROUP BY Anno
ORDER BY Anno";

$result = $db->query($sql)->fetchAll();

echo "<select name='Anno'>";
foreach($result as $row){

    echo "<option value='" . $row['Anno'] ."'>" . $row['Anno'] ."</option>";
}
echo "</select>";

  // chiusura della connessione
  $connessione = null;
}
catch(PDOException $e)
{
  // notifica in caso di errore nel tentativo di connessione
  echo $e->getMessage();
}
 

macus_adi

Utente Attivo
5 Dic 2017
1.028
58
48
IT/SW
try {
// stringa di connessione al DBMS
$connessione = new PDO("mysql:host=$host;dbname=$db", $user, $password);
// imposto dell'attributo necessario per ottenere il report degli errori
$connessione->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// selezione e visualizzazione dei dati estratti
$sql = "SELECT *
FROM tblanagrafica
WHERE Anno <> 0
GROUP BY Anno
ORDER BY Anno"
;

$result = $db->query($sql)->fetchAll();
PHP:
$result=$connessione->query($sql)->fatchAll()
$db non è definita.... devi usare $connessione!!!!!
 

Max61

Utente Attivo
2 Mar 2014
616
3
18
fatto, adessso
Fatal error: Uncaught Error: Call to undefined method PDOStatement::fatchAll()
 

Max61

Utente Attivo
2 Mar 2014
616
3
18
scusate, ma se io volessi un valore vuoto nella tendina tipo
echo "<option value =''>seleziona</option>";//valore vuoto
prima dei dati?
 

macus_adi

Utente Attivo
5 Dic 2017
1.028
58
48
IT/SW
echo "<select name='Anno'>";
foreach(
$result as $row){

echo
"<option value='" . $row['Anno'] ."'>" . $row['Anno'] ."</option>";
}
echo
"</select>";
PHP:
echo "<select name='Anno'>";
echo "<option value=''>Seleziona Anno</option>";
foreach($result as $row){

    echo "<option value='" . $row['Anno'] ."'>" . $row['Anno'] ."</option>";
}
echo "</select>";