Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    654

    Parere su codice molto complesso!

    Sono giorni che ci sto dietro e forse sono giunto alla soluzione. Si tratta di una visualizzazione.
    In un database sono contenuti: nome alunno, data e voto ottenuto. Passandogli un determinato mese da trovare, deve risultare una tabella che incolonni sotto ogni giorno il voto ottenuto dagli studenti (diciamo un registro di classe).
    Questo è lo schema che deve risultare:
    Codice PHP:
    Alunni  1  2  3  4  5...       ==> giorni del mese
    ___________________
      A      8      6                 
    ==> alunni con voto sotto il rispettivo giorno
      B      5             7 

    Ipotizzo che il mese scelto sia gennaio. Questo è il codice che ho implementato. Se qualcuno ha la pazienza di guardarlo, magari mi potete dire se ci sono errori (non ho modo di provarlo di persona, perchè il database non è ancora funzionante).
    NB: if($i%2==0) serve per colorare le righe diversamente, a seconda che sia una riga pari o dispari; è solo una scelta visuale

    Codice PHP:
                            $classe=$_POST['classe'];
                            
    $sezione=$_POST['sezione'];
                            
    $fascia=$_POST['fascia'];
                            
    $materia=$_POST['materia'];
                            
    $mese=$_POST['mese'];

                            if(
    $mese=='gennaio'){
                            
    $q "SELECT * FROM valutazioni WHERE Valutazione_classe='$classe' AND 

    valutazione_sezione='
    $sezione' AND Valutazione_fascia='$fascia' AND Valutazione_data_voto='%-01-%'";
                            }

                            echo 
    "<table width='80%' cellpadding='3' cellspacing='1' border='0' 

    class='sfondomenu' align='center'>"
    ;
                            echo 
    "<tr><th>Voti per classi e per data</th></tr>";
                            echo 
    "<tr class='row1'><td align='center' nowrap>";
                                    echo 
    "<table class='sottomenu' cellpadding='5' cellspacing='0' border='0' 

    width='100%' align='center'>"
    ;

                            if((
    $mese=='gennaio') OR ($mese=='marzo') OR ($mese=='maggio') OR 

    (
    $mese=='luglio') OR ($mese=='agosto') OR ($mese=='ottobre') OR ($mese=='dicembre')){ 

            echo 
    "<tr><td class='tabsup'>Alunno</td>";
            echo 
    "<td class='tabsup'>1</td>";
            echo 
    "<td class='tabsup'>2</td>";
            echo 
    "<td class='tabsup'>3</td>";
            echo 
    "<td class='tabsup'>4</td>";
            echo 
    "<td class='tabsup'>5</td>";
            echo 
    "<td class='tabsup'>6</td>";
            echo 
    "<td class='tabsup'>7</td>";
            echo 
    "<td class='tabsup'>8</td>";
            echo 
    "<td class='tabsup'>9</td>";
            echo 
    "<td class='tabsup'>10</td>";
            echo 
    "<td class='tabsup'>11</td>";
            echo 
    "<td class='tabsup'>12</td>";
            echo 
    "<td class='tabsup'>13</td>";
            echo 
    "<td class='tabsup'>14</td>";
            echo 
    "<td class='tabsup'>15</td>";
            echo 
    "<td class='tabsup'>16</td>";
            echo 
    "<td class='tabsup'>17</td>";
            echo 
    "<td class='tabsup'>18</td>";
            echo 
    "<td class='tabsup'>19</td>";
            echo 
    "<td class='tabsup'>20</td>";
            echo 
    "<td class='tabsup'>21</td>";
            echo 
    "<td class='tabsup'>22</td>";
            echo 
    "<td class='tabsup'>23</td>";
            echo 
    "<td class='tabsup'>24</td>";
            echo 
    "<td class='tabsup'>25</td>";
            echo 
    "<td class='tabsup'>26</td>";
            echo 
    "<td class='tabsup'>27</td>";
            echo 
    "<td class='tabsup'>28</td>";
            echo 
    "<td class='tabsup'>29</td>";
            echo 
    "<td class='tabsup'>30</td>";
            echo 
    "<td class='tabsup'>31</td>";
            echo 
    "</tr>";


                            if(
    $mese=='gennaio'){
                            for(
    $i=0;$i<$num;$i++){
                                
    $cognome=mysql_result($query,$i"Valutazione_alunno_cognome");
                                
    $nome=mysql_result($query,$i"Valutazione_alunno_nome");
                                if(
    $i%2==0){
                                    echo 
    "<tr>";
                                        echo 
    "<td class="."tabDispari".">$nome 

    $cognome</td>";
                                }
                                else{
                                    echo 
    "<tr>";
                                        echo 
    "<td class="."tabPari".">$nome $cognome</td>";
                                }

                                for(
    $k=1;$k<31;$k++){
                                    
    $ris "SELECT * FROM Valutazioni WHERE 

    Valutazione_alunno_cognome='
    $cognome' AND valutazione_alunno_nome='$nome' AND Valutazione_data_voto='%-01-$k'";
                                    
    $data=mysql_result($ris,$k"Valutazione_data_voto");
                                    
    $voto=mysql_result($ris,$k"Valutazione_voto");        

                            


                                if(
    $i%2==0){
                                        echo 
    "<td class="."tabDispari".">$voto</td>";

                                }
                                else{
                                        echo 
    "<td class="."tabPari".">$voto</td>";
                                }

                                    echo 
    '</tr>';
                                }
                            }
                            }
                        } 

  2. #2
    e il codice molto complesso dov'è ? :master:

    io vedo una sfilza di echo (sconsigliabile), nessun controllo per le POST (pericoloso), un database che usa i nomi invece delle date (sconsigliabile) ed un risultato che ... se funziona, non mi fa capire il motivo di questo 3D


    [edit]
    ah ... no, usi gennaio in questo modo %-01-% senza usare LIKE ne date ...
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    654
    io vedo una sfilza di echo (sconsigliabile)
    Lo so, devo ancora sistemare la struttura visuale (la base l'avevo creata all'inizio, quando ancora credevo che fossero necessari...). Tutti quegli echo spariranno. Il parere che volevo era sull'impostazione del codice.

    nessun controllo per le POST (pericoloso)
    :master: Purtroppo questo non sono ancora in grado di farlo. Dovrò studiarmelo in un prossimo futuro, sono ancora un dilettante...

    un database che usa i nomi invece delle date (sconsigliabile)
    Aspetta... questa non l'ho capita. Perchè è sconsigliato usare i nomi al posto delle date?

    ed un risultato che ... se funziona, non mi fa capire il motivo di questo 3D
    Se rileggi quello che ho scritto sopra, voglio un vostro parere "espero" se il codice funziona perchè non ho modo di provarlo. So solo che non mi dà errori di sintassi

    ah ... no, usi gennaio in questo modo %-01-% senza usare LIKE ne date ...
    Il like è una sintassi che non conosco... Tutto quello che so lo faccio da autodidatta (sono uno stagista anche se mi hanno commissionato un sito da incubo). Come dovrei fare usando il LIKE?

    Grazie per le risposte, comunque

  4. #4
    Originariamente inviato da Horus-Ra
    Tutti quegli echo spariranno. Il parere che volevo era sull'impostazione del codice.
    è impostato con tutti echo


    Originariamente inviato da Horus-Ra
    :master: Purtroppo questo non sono ancora in grado di farlo. Dovrò studiarmelo in un prossimo futuro, sono ancora un dilettante...
    non puoi fare molto se non studi prima i problemidi sicurezza o rischi di tirar su un progetto che farà acqua da tutte le parti ... il prossimo futuro ti consiglio quindi di renderlo meno prossimo ...


    Originariamente inviato da Horus-Ra
    Aspetta... questa non l'ho capita. Perchè è sconsigliato usare i nomi al posto delle date?
    perchè se esistono le date ed i campi DATE dovresti usare i nomi ?



    Originariamente inviato da Horus-Ra
    Se rileggi quello che ho scritto sopra, voglio un vostro parere "espero" se il codice funziona perchè non ho modo di provarlo. So solo che non mi dà errori di sintassi
    non avere errori di sintassi è facile e non basta per sviluppare ...


    Originariamente inviato da Horus-Ra
    Il like è una sintassi che non conosco... Tutto quello che so lo faccio da autodidatta
    si, come molti qui


    Originariamente inviato da Horus-Ra
    Come dovrei fare usando il LIKE?
    usando LIKE ... WHERE campo LIKE "%qualcosa%"
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    654
    Il nome del mese mi è necessario, purtroppo è questo che mi è stato commissionato.
    Tra l'altro ora ho avuto modo di provarlo e ho visto che non funziona... Non mi visualizza niente (se non l'intestazione della tabella). Sarà dura adesso trovare il bug, in mancanza di conoscenze sono andato secondo la "logica del programmatore", ma a quanto pare non è bastata e ho poco tempo a disposizione :master:

    Questo codice è davvero MOLTO complesso, almeno per me.

    Non capisco dove faccia acqua... Ho seguito questo procedimento:

    1) Faccio la SELECT in base al mese selezionato.
    Codice PHP:
    if($mese=='gennaio'){
        
    $q "SELECT * FROM valutazioni WHERE Valutazione_classe='$classe' AND valutazione_sezione='$sezione' AND Valutazione_fascia='$fascia' AND Valutazione_data_voto='%-01-%'";

    2) Divido il codice in tre parti, una per ogni lunghezza dei mesi (30 giorni, 31 giorni e 29):
    Codice PHP:
    if(($mese=='gennaio') OR ($mese=='marzo') OR ($mese=='maggio') OR ($mese=='luglio') OR ($mese=='agosto') OR ($mese=='ottobre') OR ($mese=='dicembre')){ 
    //creazione intestazione tabella di 31 giorni 
    3) Estraggo le informazioni per uno specifico mese.
    Codice PHP:
    if($mese=='gennaio'){
    for(
    $i=0;$i<$num;$i++){
        
    $cognome=mysql_result($query,$i"Valutazione_alunno_cognome");
        
    $nome=mysql_result($query,$i"Valutazione_alunno_nome");
        echo 
    "<tr>";                                echo "<td class="."tabDispari".">$nome 
    $cognome</td>"
    4) all'interno dello stesso for, creo un altro for per visualizzare i voti di ogni alunno estranno.
    Codice PHP:
    for($k=1;$k<31;$k++){
        
    $ris "SELECT * FROM Valutazioni WHERE Valutazione_alunno_cognome='$cognome' AND valutazione_alunno_nome='$nome' AND Valutazione_data_voto='%-01-$k'";                            
    $data=mysql_result($ris,$k"Valutazione_data_voto");                
    $voto=mysql_result($ris,$k"Valutazione_voto");                
    echo 
    "<td class="."tabDispari".">$voto</td>"
    Potrebbe essere colpa di quest'ultima parte di codice. Siccome gli alunni hanno il voto solo in certi giorni del mese, magari quando controlla un giorno in cui non c'è nulla (e dunque non trova il record) gli dà fastidio... Se è questo c'è un modo per dirgli: "se non lo trovi, lascia uno spazio bianco"?

  6. #6
    Andr3a ti ha gia' detto tutto e forse anche di piu'... scusa, ma pare tu voglia reinventare l'acqua calda

    se per i caratteri jolly ci vuole like e non = ... significa che ci vuole like. Quindi il seguente:

    Valutazione_data_voto = '%-01-%'";

    deve diventare: Valutazione_data_voto LIKE '%-01-%'";


    salvo cose strane da altre parti che non ho valutato. che e' strana pure questa che ti becca tutti i mesi di gennaio di tutti gli anni

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    654
    Non sono duro d'orecchi, ho inteso quello che ha detto Andrea :rollo:
    Ho rimesso il codice originario perchè appena ho cambiato = con LIKE mi ha dato una valanga di errori di questo tipo:

    Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /onlineschool/Docenti/votiClasseT.php on line 214


    Quindi, a meno che non ci sia un'altra parte di codice da modificare, significa che con il LIKE non funziona
    A scanso di equivoci l'ho cambiato così (ovviamente ho cambiato ugualmente ogni codice con caratteri jolly):

    Codice PHP:

    if($mese=='gennaio'){
        
    $q "SELECT * FROM valutazioni WHERE Valutazione_classe='$classe' AND valutazione_sezione='$sezione' AND Valutazione_fascia='$fascia' AND Valutazione_data_voto LIKE '%-01-%'";


  8. #8
    utilizza il DIE() nella query e ti rendera' l'errore che fai.

    $ris = mysql_query("la query") or DIE(mysql_error());

    mysql_result e' sconsigliato. Gia' lo abbiamo detto.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    654
    Sì, infatti nelle altre pagine ho già sostituito il mysql_result... credevo che fosse più che altro un problema di forma, per questo avevo lasciato la pagina così com'era (è bella lunga da cambiare). Comunque adesso la sto modificando, in questo modo:

    Codice PHP:

    if($mese=='gennaio'){
        while(
    $row=mysql_fetch_assoc($query)){
            
    $cognome=$row["Valutazione_alunno_cognome"];
            
    $nome=$row["Valutazione_alunno_nome"]; 

    Questo pezzo di codice però non riesco a metterlo con il mysql_fetch_assoc (si trova all'interno del while che ho scritto sopra).

    Codice PHP:
    for($k=1;$k<31;$k++){
        
    $ris "SELECT * FROM Valutazioni WHERE Valutazione_alunno_cognome='$cognome' AND valutazione_alunno_nome='$nome' AND Valutazione_data_voto LIKE '%-01-$k'";
                                    
    $data=mysql_result($ris,$k"Valutazione_data_voto");
                                    
    $voto=mysql_result($ris,$k"Valutazione_voto"); 
    Come faccio a dirgli che deve eseguire il ciclo while per 31 volte? La Variabile $k mi servirebbe per passare tutti i giorni della data.
    Il Die l'avevo già messo, mi butta fuori solo quell'errore di prima.

    PS: vi ringrazio in ogni caso per la pazienza, purtroppo ne devo fare ancora di strada nel mysql e questioni semplici a volte per me sono piuttosto complicate

  10. #10
    non so esattamente cosa devi fare, bisognerebbe sapere prima di tutto la struttura della tabella, il formato della data. La variabile $k passa tutti i giorni???? ma ci sono tutti i giorni nella tabella? il mysql_result punta al record estratto non al giorno.

    Il while va fino a quanto dalla funzione mysql_fetch_assoc riceve un false.

    prenderei in considerazione di raccogliere il result set in un array e gestirlo dopo.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.