Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Passagio di valori select option a pagina php

    Ciao! ho un problema che non riesco a risolvere, non sono molto esperto nei linguaggi che uso quindi se scrivo stupidate, per favore perdonatemi

    Non so se è la sezione adatta, in caso mi scuso con gli amministratori
    Sto facendo un registro elettronico
    Problema:
    Ho una tabella che faccio vedere a video con una colonna formata da nomi e cognomi di studenti, prelevati dal database, a questa colonna affianco un'altra colonna con un select option per ogni studente, quindi queste select vengono create dinamicamente poichè il numero degli studenti può variare a seconda della classe selezionata. Questo mi serve per inserire i voti degli studenti (in ogni select ho i voti da 3 a 10). Ora, io non riesco ad prendere i valori di ogni singola select e metterli dentro un vettore che poi passerei con post(aiutandomi con la funzione serealize), in fine inserire con una query i voti dentro la tabella voti. Le select le chiamo con un nome diverso, assegno il valore del indice che uso per crearle, in questo modo hanno un nome diverso.

    Ho provato con script(anche ajax) - php, ma nulla non riesco a inserire questi voti in un vettore.

    Questa è la pagina in cui si inseriscono i voti:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Documento senza titolo</title>

    <?php
    $id=$_POST['classe'];
    include("config.php");

    $sql=(" select * from studente where studente.classe='$id'");
    $result=mysql_query($sql);

    $righe=mysql_num_rows($result);
    //echo "Il valore di è $id
    ";

    ?>

    <script src="jquery.js" type="text/javascript"></script>

    <script type="text/javascript">

    Non date troppo peso a questa funzione sono delle prove che ho fatto

    $(document).ready(function(){

    function funzione(righe) {

    voto = new Array();

    var cont=righe;

    var frms = document.getElementsByTagname("form");
    var valore;
    for (var i=0; i< frms.length; i++)
    {
    valore = frms[i].getElementsByTagName("select");
    voto[i]=valore;
    }
    valore=666;
    var serializedvoto = JSON.stringify(voto);
    $.post("votiDatabase.php", {voto:serializedvoto, valore:valore});


    //$.post("votiDatabase.php", $("#myform").serialize());
    }
    });
    </script>

    </head>

    <body>


    <h1> INSERIMENTO VOTI</h1>
    <form action="votiDatabase.php" method="post">

    <?php


    for($i=0;$i<$righe;$i++)
    {
    $voto[$i]='-';
    }

    print("<table width='800' border='1'>");
    print("<tr>");
    print("<th scope='col'>STUDENTE</th>");
    print("<th scope='col'>VOTO</th>");
    print("</tr>");
    $cont=3;

    for($i=0;$i<$righe;$i++)
    {
    print("<tr>");
    $fine=mysql_fetch_array($result);
    print("<td>".$fine['nome']." ".$fine['cognome']."</td>");
    $array[$i]=$fine['id_studente'];
    print("<td>");

    print("<select name='$i' id='$i'>");
    print("<option value='NULL'> -");

    for($j=0;$j<15;$j++)
    {
    print("<option value='$j'> $cont ");
    $cont=$cont+0.5;
    }

    $cont=3;
    print("</td>");
    print("</tr>");
    }


    print("</select>");
    print("</table>");

    ?>




    <tt id="results"> </tt> </p>

    <input type="hidden" name="array" value='<?php print(serialize($array));?>'/>

    <input type="submit" onclick='funzione(<?php $righe ?>)' value="Invia" />
    </form>

    </body>
    </html>

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    227
    Non ho ben capito com'è strutturato il database, quindi i codici che vedrai sono basati su un qualcosa del genere

    codice:
    Tabella Classi
    -------------------
    |   ID   | Nome   |
    -------------------
    |   1   |   1A    |
    -------------------
    
    
    Tabella Studenti
    --------------------------------------------------
    |   ID   |   Nome   |   Cognome   |   ID_lasse   |
    --------------------------------------------------
    |    1   |   John   |     Doe     |       1      |
    --------------------------------------------------
    |    2   |  Chiara  |    Rossi    |       1      |
    --------------------------------------------------
    
    Tabella Voti
    ---------------------------------------
    |   ID   |   Voto   |   ID_Studente   |
    ---------------------------------------
    |   1    |     9    |          2      |
    ---------------------------------------
    Detto questo, dato che credo tu sia alle basi ancora, ti consiglio di non pensare a Javascript sotto questo punto di vista Il tutto si può fare benissimo senza JS (e anzi, dovrebbe essere fatto senza, perchè se per esempio un utente ha JS disattivato il form non funzionerà ).

    Codice PHP:
    <form method="post" action="votiDatabase.php">
    <?php
        $id 
    $_GET["id"];
        
        
    $query mysql_query("SELECT * FROM `studenti` WHERE `id_classe`='".$id."');
        if(!
    $query) die(mysql_error()); //Se la query dà problemi, termina la pagina e mostra l'errore
        
        if(mysql_num_rows(
    $query)){ //Se ci sono risultati
            echo "
    <table width=\"800px\" border=\"1\">";
            echo 
    "<tr><td>Studente</td><td>Voto</td></tr>";
            
            while(
    $riga mysql_fetch_array($query)){
                
    $voti "";
                
                
    //Seleziono tutti i voti dello studente
                
    $queryVoti mysql_query("SELECT `voto` FROM `voti` WHERE `id_studente` = '".$riga["id"]."'");
                if(!
    $queryVoti) die(mysql_error());
                
                if(
    mysql_num_rows($queryVoti)){
                    
                    while(
    $voto mysql_fetch_array($queryVoti)){
                        
    $voti .= $voto["voto"]."
    "
    ;
                    }
                    
                }
            
                echo 
    "<tr><td>".$riga["nome]." ".$riga["cognome"]."</td><td>".$voti."</td></tr>";
            }
            
            echo "
    </table>";
        }else{ // Se non ci sono risultati
            echo "
    Non ci sono risultati";
        }
    ?>

    <input type="
    submit" value="Invia" />
    </form>

    Il codice del form è un po' più pulito rispetto a quel che avevi postato inizialmente. Per esempio ho tolto quell'input nascosto di cui non ho capito bene l'esistenza ^^"

    Prova ad adattare questo alla tua pagina, se funziona e hai capito tutto continuo con la pagina dei risultati, altrimenti.. Chiedi

    Thinker

  3. #3
    Prima di tutto grazie per la risposta.
    Il database che hai creato è esatto, il mio ha delle tabelle in più...
    Questa pagina non mi deve visualizzare a video i voti degli studenti, ma deve essere una per l'inserimento dei voti, con due colonne una con i nomi e una con select option per la scelta del voto. In pratica è la pagina dei docenti.
    Sono riuscito a fare l'inserimento e mettere i voti in un vettore con js. Ora devo passare il vettore da js a una pagina php, ed è qui che mi sono bloccato poichè non so quale metodo usare. Sto provando con $.post ma senza risultati poichè il vettore non viene passato.

    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"

  4. #4
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Documento senza titolo</title>

    <?php
    $id=$_POST['classe'];
    include("config.php");
    include 'votiDatabase.php';

    $sql=(" select * from studente where studente.classe='$id'");
    $result=mysql_query($sql);

    $righe=mysql_num_rows($result);
    //echo "Il valore di è $id
    ";

    ?>

    <script src="jquery.js" type="text/javascript"></script>

    <script type="text/javascript" language="javascript">

    funzione per prelevare la scelta della select option e metterla in un vettore

    function funzione(righe) {

    voto = new Array();

    var cont=righe;

    var sel= document.getElementsByTagName("select");

    var count=sel.length;

    for (var i=0; i< count; i++)
    {
    valore=sel[i].value;

    if(valore==0)
    voto[i]=3;
    if(valore==1)
    voto[i]=3.5;
    if(valore==2)
    voto[i]=4;
    if(valore==3)
    voto[i]=4.5;
    if(valore==4)
    voto[i]=5;
    if(valore==5)
    voto[i]=5.5;
    if(valore==6)
    voto[i]=6;
    if(valore==7)
    voto[i]=6.5;
    if(valore==8)
    voto[i]=7;
    if(valore==9)
    voto[i]=7.5;
    if(valore==10)
    voto[i]=8;
    if(valore==11)
    voto[i]=8.5;
    if(valore==12)
    voto[i]=9;
    if(valore==13)
    voto[i]=9.5;
    if(valore==14)
    voto[i]=10;
    }


    Questo è il vettore trasformato in stringa, la devo infiare ad una pagina php, come si fa??????
    elementi= voto.join(',');
    alert(elementi);

    ho provato con $.post ma non funziona
    Nella pagina php con una query inserisco i voto nel database
    Il bottone nascosto serve per passare l'array contenente id_studente a cui associo il voto

    $.post("votiDatabase.php", {elementi: elementi});


    }

    </script>

    </head>

    <body>


    <h1> INSERIMENTO VOTI</h1>
    <form name"form" action="votiDatabase.php" method="post">

    <?php


    for($i=0;$i<$righe;$i++)
    {
    $voto[$i]='-';
    }

    print("<table width='800' border='1'>");
    print("<tr>");
    print("<th scope='col'>STUDENTE</th>");
    print("<th scope='col'>VOTO</th>");
    print("</tr>");
    $cont=3;

    for($i=0;$i<$righe;$i++)
    {
    print("<tr>");
    $fine=mysql_fetch_array($result);
    print("<td>".$fine['nome']." ".$fine['cognome']."</td>");
    $array[$i]=$fine['id_studente'];
    print("<td>");

    print("<select name='$i' id='$i'>");
    print("<option value='NULL'> -");

    for($j=0;$j<15;$j++)
    {
    print("<option value='$j'> $cont ");
    $cont=$cont+0.5;
    }

    $cont=3;
    print("</td>");
    print("</tr>");
    }


    print("</select>");
    print("</table>");

    ?>




    <tt id="results"> </tt> </p>

    <input type="hidden" name="array" value='<?php print(serialize($array));?>'/>

    <input type="submit" onclick="funzione(<?php echo $righe;?>)" value="Invia" />
    </form>





    </body>
    </html>

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    227
    Come consiglio personale, ti direi di pensare prima di tutto al codice base, ovvero interamente in PHP Se questo funziona, dopo possiamo pensare a farlo in "tempo reale" con JS, ma ha poco senso se il codice di base non funziona come si deve

    Prova una cosa simile:

    form.php
    Codice PHP:
    <?php  $id $_GET["classe"]; ?>
    <form method="post" action="votiDatabase.php?classe=<?php echo $id?>"> 
    <?php
         
        $query 
    mysql_query("SELECT * FROM `studenti` WHERE `id_classe`='".$id."'); 
        if(!
    $query) die(mysql_error()); //Se la query dà problemi, termina la pagina e mostra l'errore 
         
        if(mysql_num_rows(
    $query)){ //Se ci sono risultati 
            echo "
    <table width=\"800px\" border=\"1\">"
            echo 
    "<tr><td>Studente</td><td>Voto</td></tr>"
             
            while(
    $riga mysql_fetch_array($query)){ 
                
    $voti "<select name=\"newVoteFor_".$riga["id"]."\">"
                 
                  for(
    $i=3;$i<=9;$i++){
                      
    $voti .= "<option value=\"".$i."\">".$i."</option>";
                  }
                
    $voti .= "</select>";
             
                echo 
    "<tr><td>".$riga["nome]." ".$riga["cognome"]."</td><td>".$voti."</td></tr>"; 
            } 
             
            echo "
    </table>"; 
        }else{ // Se non ci sono risultati 
            echo "
    Non ci sono risultati"; 
        } 
    ?> 

    <input type="
    submit" value="Invia" /> 
    </form>
    votiDatabase.php
    Codice PHP:
    if($_SERVER['REQUEST_METHOD'] === 'POST'){ //Se l'utente è arrivato a questa pagina tramite un form
        
    $query mysql_query("SELECT * FROM `studenti` WHERE `id_classe`='".$id."'); 
        if(!
    $query) die(mysql_error()); //Se la query dà problemi, termina la pagina e mostra l'errore 
         
        if(mysql_num_rows(
    $query)){ //Se ci sono risultati
             
            while(
    $riga = mysql_fetch_array($query)){
                // SE 
    $_POST["newVoteFor_".$riga["id"]] non esiste, lo inizializzo come FALSE
                if(isset(
    $_POST["newVoteFor_".$riga["id"]]) || empty($_POST["newVoteFor_".$riga["id"]]))
                    
    $_POST["newVoteFor_".$riga["id"]] = false;
                    
                if(
                    is_numeric(
    $_POST["newVoteFor_".$riga["id"]]) //Controllo che il valore sia numerico
                    && (
    $_POST["newVoteFor_".$riga["id"]] >= 3) //Controllo che il voto vada da 3 a 10
                    && (
    $_POST["newVoteFor_".$riga["id"]] <= 10)
                ){
                    if(!mysql_query("
    INSERT..."))
                        echo mysql_error() ."
    ";
                }
                    
            }
        }

    In questo modo, la pagina che si occupa di elaborare i voti, richiama ancora una volta tutti gli studenti, e verifica che sia passato tramite POST un nuovo voto. Se è presente lo inserisce, altrimenti ignora tutto il codice
    Ancora più corretto sarebbe analizzare solamente i POST ricevuti, assegnando ad ogni select un nome del tipo name="nuovoVoto[]", ma al momento non posso provarlo quindi non vorrei fare troppi casini

    Thinker

  6. #6
    Allora ho fatto la pagina per l'inserimento e qui tutto bene. Ho dei dubbi riguardanti la pagina dell'inserimento, questa parte:

    codice:
    if(isset($_POST["newVoteFor_".$riga["id"]]) || empty($_POST["newVoteFor_".$riga["id"]])) 
                    $_POST["newVoteFor_".$riga["id"]] = false; 
                     
                if( 
                    is_numeric($_POST["newVoteFor_".$riga["id"]]) //Controllo che il valore sia numerico 
                    && ($_POST["newVoteFor_".$riga["id"]] >= 3) //Controllo che il voto vada da 3 a 10 
                    && ($_POST["newVoteFor_".$riga["id"]] <= 10) 
                ){ 
                    if(!mysql_query("INSERT into sudente(voto) values ($riga['id]) where ")) 
                        echo mysql_error() ."
    ";
    Non riesco a capire come fai a tener conto del Id_studente e del voto relativo a quello studente

  7. #7
    i voti sono contenuti in newVoteFor_? cioè fai un ciclo e a seconda della riga fai un post per ottenere il voto attraverso newVoteFor_?
    Invece gli studenti si ottengono facendo di nuovo una query relativa alla classe selezionata...

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    227
    Codice PHP:
    if(isset($_POST["newVoteFor_".$riga["id"]]) || empty($_POST["newVoteFor_".$riga["id"]]))
                    
    $_POST["newVoteFor_".$riga["id"]] = false
    In queste due righe inizializzo ogni Select, nel caso in cui il campo fosse vuoto. Serve più che altro per non vedere l'errore Undefined Index.

    Codice PHP:
    if( 
                    
    is_numeric($_POST["newVoteFor_".$riga["id"]]) //Controllo che il valore sia numerico 
                    
    && ($_POST["newVoteFor_".$riga["id"]] >= 3//Controllo che il voto vada da 3 a 10 
                    
    && ($_POST["newVoteFor_".$riga["id"]] <= 10
                ) 
    Questo If effettua dei controlli prima di inserire il voto.
    Il primo controlla che il valore ricevuto sia effettivamente numerico, e che qualche utente non abbia cambiato il codice per inserire un'altra cosa nel DB.
    Gli altri due controllano che il voto sia un numero compreso tra 3 e 10.

    La tua query di inserimento dovrebbe essere qualcosa del genere

    codice:
    INSERT INTO `voti` (`id_studente`, `voto`) VALUES ('".$riga["id"]."', '".$_POST["newVoteFor_".$riga["id"]]."');
    i voti sono contenuti in newVoteFor_? cioè fai un ciclo e a seconda della riga fai un post per ottenere il voto attraverso newVoteFor_?
    Invece gli studenti si ottengono facendo di nuovo una query relativa alla classe selezionata...
    Ogni select ha come base (che ovviamente puoi cambiare, era solo per distinguerli meglio)

    newVoteFor_ID_Studente

    Quindi, nella pagina di inserimento, posso
    - Rifare la query e inserire un nuovo voto SOLO se è presente un <select> che finisce con l'ID dello studente corrente ("corrente" cambia automaticamente all'interno del ciclo)

    Oppure
    - Analizzare tutti i $_POST[] che vengono trasmessi alla pagina, verificare che provengano dal Select per inserire un nuovo voto, prendere l'id dello studente, ed infine fare l'Insert

    Se vuoi provare il secondo esempio, ho scritto al volo questo

    Codice PHP:
    foreach ($_POST as $key => $value){ //Per ogni $_POST[] ricevuto
        
    if(substr($key011) == "newVoteFor_"){ //Controllo che abbia come nome di base "newVoteFor_"
            
    $idStudente substr($key11); //Prendo gli ultimi caratteri della stringa
            
            
    if(
                
    is_numeric($value) &&
                (
    $value >= 3) &&
                (
    $value <= 10)
            ){
                if(!
    mysql_query("INSERT INTO `voti` (`id_studente`, `voto`) VALUES ('".$idStudente."', '".$value."');")) 
                        echo 
    mysql_error() ."
    "
    ;
            }
        }

    Ma non l'ho ancora testato quindi non ne sono sicurissimo ^^"

  9. #9
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Quando e se tornerete a parlare di javascript chiedete al moderatore di spostarvi
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  10. #10
    Gradissimo!!!

    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Documento senza titolo</title>

    <?php
    $id
    =$_POST['classe'];
    include(
    "config.php");
    include 
    'votiDatabase.php';

    $sql=("    select * from studente where studente.classe='$id'");
    $result=mysql_query($sql);

    $righe=mysql_num_rows($result);
       
    //echo "Il valore di è $id 
    ";

    ?>

    </head>
    <body>

    <h1> INSERIMENTO VOTI</h1>

    <form method="
    post" action="votiDatabaseprova.php?classe=<?php echo $id?>" method="post">  

    <?php 
          
        $query 
    mysql_query("select * from studente where studente.classe='$id'");  
        
        if(!
    $query) die(mysql_error()); //Se la query dà problemi, termina la pagina e mostra l'errore  
          
        
    if(mysql_num_rows($query)){ //Se ci sono risultati  
            
    echo "<table width=\"800px\" border=\"1\">";  
            echo 
    "<tr><td>Studente</td><td>Voto</td></tr>";  
              
            while(
    $riga mysql_fetch_array($query)){  
                
    $voti "<select name=\"newVoteFor_".$riga["id_studente"]."\">";  
                
    $voti .= "<option value=\"".$i."\">-</option>"
                  for(
    $i=3;$i<=10;$i++){ 
            
                      
    $voti .= "<option value=\"".$i."\">".$i."</option>"
                  } 
                
    $voti .= "</select>"
              
                echo 
    "<tr><td>".$riga["nome"]." ".$riga["cognome"]."</td><td>".$voti."</td></tr>";  
            }  
              
            echo 
    "</table>";  
        }else{ 
    // Se non ci sono risultati  
            
    echo "Non ci sono risultati";  
        }  
    ?>  

    <input type="submit" value="Invia" />  
    </form>
       
    </body>
    </html>
    Codice PHP:

    <?php
    include ("config.php");

    if(
    $_SERVER['REQUEST_METHOD'] === 'POST'){ //Se l'utente è arrivato a questa pagina tramite un form

        
    $id=$_GET['classe'];

        
    $query mysql_query("select * from studente where studente.classe='$id'");  
        if(!
    $query) die(mysql_error()); //Se la query dà problemi, termina la pagina e mostra l'errore  
          
        
    foreach ($_POST as $key => $value){ //Per ogni $_POST[] ricevuto
        
    echo $value
        if(
    substr($key011) == "newVoteFor_"){ //Controllo che abbia come nome di base "newVoteFor_" 
            
    $idStudente substr($key11); //Prendo gli ultimi caratteri della stringa 
             
            
    if( 
                
    is_numeric($value) && 
                (
    $value >= 3) && 
                (
    $value <= 10
            ){ 
                if(!
    mysql_query("INSERT INTO voto (valutazione, studente,insegna) VALUES ('$value','$idStudente', '1');"))  
                        echo 
    mysql_error() ."
    "

            }
        } 
    }
    }
    ?>
    Funziona ora devo risolvere l'ultima cosa, ma credo (spero) di farcela da solo, cioè il valore "insegna" che si riferisce all'id del docente, poichè tengo conto anche dei voti che ogni docente inserisce
    Grazie mille, non sapevo che si potesse risolvere cosi!! Per quanto mi riguarda sei un genio ho ancora tanto da imparare....

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.