Visualizzazione risultati 1 fino 9 di 9

Discussione: Problema per media

  1. #1
    Guest

    Predefinito 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?

  2. #2
    Guest

    Predefinito

    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?

  3. #3
    Guest

    Predefinito

    Ops XD ho corretto, ma il risultato è sempre lo stesso :(

  4. #4
    Guest

    Predefinito

    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';
    }

  5. #5
    Guest

    Predefinito

    Grazie, ho corretto, ma non funziona comunque :(
    http://angeange.altervista.org/voti.php?materia=storia (dovrebbe venire 8)

  6. #6
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    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.

  7. #7
    Guest

    Predefinito

    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)

  8. #8
    Guest

    Predefinito

    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.

  9. #9
    Guest

    Predefinito

    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

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •