-
Problema per media
Codice PHP:
$connessione=mysqli_connect(localhost,angeange,miapassword,my_angeange);
$materia=$_GET['materia'];
$sql='SELECT AVG(voto) AS media FROM voti WHERE materia="'.$materia.'" and s_o=s';
$query=mysqli_query($sql,$connessione);
if(mysql_num_rows($query)>0){
while($row=mysql_fetch_assoc($query)){
echo $row['voto'];}
else{echo 'Non ci sono voti';}
Dovrebbe restituirmi la media dei valori presenti nella colonna "materia" della tabella "voti" dove materia è uguale a quella specificata tramite GET dall'utente, ma, anche se sono presenti record che soddisfano la condizioni, viene fuori "non ci sono voti".
Cosa ho sbagliato? :???:
-
Ciao, credo sia dovuto al fatto che hai usato le funzioni mysql_num_rows() e mysql_fetch_assoc() quando invece la connessione e la query sono state gestite con le funzioni di MySQLi. Non ti restituisce nessun errore lo script?
-
Ops XD ho corretto, ma il risultato è sempre lo stesso :(
-
Ho riguardato il codice un po' più attentamente e ho modificato alcune cose. Le modifiche te le ho commentate nel codice stesso ;)
Codice PHP:
<?php
$connessione = mysqli_connect('localhost', '', '', '');
$materia = $_GET['materia'];
// Ho modificato i vari apici della query: MySQL solitamente usa gli apici singoli ' e non quelli doppi "
$sql = "SELECT AVG(voto) AS media FROM voti WHERE materia = '{$materia}' and s_o = 's'";
$query = mysqli_query($sql, $connessione);
if(mysqli_num_rows($query) > 0) {
while($row = mysqli_fetch_assoc($query)) {
echo $row['media']; // Qui avevi scritto $row['voto'], ma nella query hai usato AS per rinominare AVG(voto) in media
}
} else {
echo 'Non ci sono voti';
}
-
Grazie, ho corretto, ma non funziona comunque :(
http://angeange.altervista.org/voti.php?materia=storia (dovrebbe venire 8)
-
Dire 'non funziona' è come chiedere aiuto, senza aggiungere altro.
Se non funziona, ci sarà un problema, un errore; nel codice non c'è alcun controllo su possibili errori di sintassi della query, quindi ti consiglio di usare mysqli_error.
Inoltre dicci come è strutturata la tabella: campi e tipi di dati. Sinceramente non capisco il senso dell'AND s_o = 's' nella query stessa.
-
Hai ragione, chiedo scusa!
Ho aggiornato il codice così
Codice PHP:
$connessione=mysqli_connect(localhost,angeange,pw,my_angeange);
if(!$connessione){echo mysqli_error;}
$materia = $_GET['materia'];
$sql = "SELECT AVG(voto) AS media FROM voti WHERE materia = '{$materia}' and s_o = 's'";
$query = mysqli_query($sql, $connessione);
if(!query){echo mysqli_error;}
if(mysqli_num_rows($query) > 0) {
while($row = mysqli_fetch_assoc($query)) {
echo $row['media'];
}
} else {
echo 'Non ci sono voti';
}
Ma non stampa alcun errore.
La tabella si chiama "voti" ed ha come colonne: id_voto,voto,materia,s_o.
Nella prima c'è, come si può intuire, l'ID univoca del voto, nella seconda c'è il voto (numero da 0 a 10, di cui devo fare la media), nella terza la materia a cui si riferisce il voto, nella quarta c'è un valore uguale ad s oppure ad o (sta per scritto od orale, questo è un programma che servirebbe per una facile gestione dei voti da parte degli studenti)- e questo spiega il motivo della presenza di and s_o = 's' nella query (mi servirebbe fare la media solo dei voti scritti, poi di quelli orali e, infine, una media tra i due valori, una volta risolto il problema nel fare la media degli scritti non dovrei avere altri grattacapi nell'implementare le altre due)
-
Attenzione, mysqli_error() è una funzione e, come puoi vedere dalla documentazione di PHP, ha bisogno di un parametro che è la risorsa della connessione al database. La chiamata corretta quindi è:
Codice PHP:
mysqli_error($connessione);
Comunque credo di aver individuato l'errore (spero). Come puoi sempre vedere dal manuale di PHP, l'ordine degli argomenti della funzione è: risorsa della connessione, codice SQL da eseguire. Quindi la chiamata corretta è:
Codice PHP:
mysqli_query($connessione, $sql);
Così dovrebbe andare :)
PS: quando stai testando uno script, in cima al codice metti sempre un
Codice PHP:
error_reporting(E_ALL);
In questo modo individui subito l'errore e perdi molto meno tempo per risolvere il problema. Ovviamente ricordati di toglierlo una volta che hai testato tutto e hai appurato che lo script funziona bene.
-
Ho corretto l'esecuzione della query, e ora funziona!
Grazie mille dell'aiuto e del prezioso suggerimento su come stampare tutti gli errori, me lo sono appuntato :D