Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    19

    [PHP gestione dei form]

    Ciao a tutti. Sono nuovo del forum, almeno per la scrittura dei post, e del php che ho imparato integrando la lettura di una guida e le sbirciate in rete.
    Ho fatto alcune ricerche nel forum, ma non trovo niente che faccia al caso mio (o, almeno, cosi' pare).

    In un form (con attributi method="POST" e action="<?php echo $_SERVER['PHP_SELF']; ?>") ho un menu a tendina popolato con le righe di una tabella Mysql.
    Ciascuna di esse è posta in relazione con una o due righe di una seconda tabella. Selezionando una voce dal dropdown menu
    una tabella html viene a sua volta popolata con i dati estratti dalla riga (o le righe) della seconda tabella, un altro dropdown menu popolato
    con le righe di un terza tabella Mysql e una casella di testo.
    Quello che sto cercando di fare e' aggiornare la terza tabella con il valore della voce di menu selezionata e con il valore immesso nella casella di testo.


    Le tabelle Mysql coinvolte sono:

    'corso_di_studio' con i campi 'Codice_esame', 'Titolazione_esame';
    'moduli' con i campi 'Codice_modulo', 'Titolazione_modulo', 'Codice_presidente', 'Semestre'
    'docenti' con i campi 'Codice_presidente' e 'Cognome_e_nome'

    C'e' anche una tabella Mysql che crea una relazione tra 'corso_di_Studio' e 'moduli' legando tra loro 'Codice_esame' e 'Codice_modulo'

    Non ho problemi nel creare il primo menu da cui seleziono l'esame, ne' con il riportare nella tabella hmtl il modulo (o i moduli) collegati con esso.

    Quel che non riesco a fare è riportare in 'moduli' il 'Codice_presidente' relativo al docente selezionato dal menu e il valore inserito
    nella casella di testo.

    Una volta selezionata la voce dal primo menu, con un ciclo while creo e popolo la tabella. Il secondo dropdown è popolato
    con un ciclo foreach che pesca entrambi i campi di 'docenti', ma mostra solo i valori di 'Cognome_e_nome'.

    Posto un po' di codice, quello che nelle mie intenzioni dovrebbe aggiornare la tabella 'moduli':

    Codice PHP:
    //nelle righe precedenti inizia il ciclo while che crea 
    //la tabella html che mostra le righe di 'moduli'
    //poste in relazione con 'corso_di_studio'

    if (isset($_POST['scrivi_su_moduli'])) { 

         foreach (
    $_POST['menu_docenti'] as $chiave_docenti => $idocenti) {

              
    $cod_presidente substr ($idocenti05);
              
    $semestre $_POST['semestre']  
              
    $query_su_moduli =  "UPDATE moduli SET ('Semestre' = '".$semestre."', 'Codice_presidente' = '".$cod_presidente."') WHERE ('Codice_modulo' LIKE '%".$Codice_modulo."%')";

                  if (
    mysql_query($query_su_moduli)) {

                        echo
    "Il record &egrave; stato aggiornato";                
                         } else {
                        echo
    "Il record non &egrave; stato aggiornato";                 
                   };
           }   


    'scrivi_su_moduli' è il "nome" che ho dato al pulsante di invio del form
    'menu_docenti' è il dropdown menu e quindi l'array che contiene i dati ricavati dalla tabella 'docenti'
    'semestre' è la casella di testo
    la variabile $Codice_modulo che richiamo nella query viene valorizzata in un'altra parte dello script (ho verificato con un echo
    che il valore arrivi alla query).

    Seleziono il mio docente, inserisco il semestre, clicco sul pulsante di invio, ma la query non vuol saperne di funzionare. Qualcuno sa dirmi dove sbaglio?
    Un'idea che mi sono fatto è che il ciclo foreach annidato all'interno di while possa creare problemi; non so quanto sia azzeccata.

    Ringrazio in anticipo

    Emanuele

  2. #2
    Prova a fare un print della query.
    In questo modo capirai cosa cerca di lanciare. (e con che dati)

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    19
    Ti ringrazio goikiu.

    Ho fatto come mi hai suggerito e vedo che l'array contenente i valori di 'Codice_modulo' e' ordinato "al contrario". Cerchero' di ordinarlo dal'indice 0 all'indice n prima di passarlo alla query. Non appena potro' di nuovo connettermi ti faro' sapere.

    Grazie ancora per la dritta )

    Emanuele

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    19
    Macche'. Non vuol saperne.

    Vedo che tenta di aggiornare tutte le righe della tabella 'moduli'. Mi sto facendo sempre piu' l'idea che diano noia due diversi cicli annidati, anche se non so se sia del tutto azzeccata.

    Non ne esco fuori...

  5. #5
    Se al posto del LIKE metti = ?

    sottointeso nella query

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    19
    Ri-ciao goikiu.

    Niente da fare neanche con =. Quello che succede (sia con LIKE, sia con =) e' che la pagina viene ricaricata e nella tabella html vengono visualizzate tutte le righe della tabella Mysql 'moduli'. Su ciascuna di esse compare la combo box con la casella di testo e il comando print mi permette di vedere che la query tenta di scrivere il valore corrispondente alla voce selezionata dalla combo box su tutte le righe di 'moduli' (ovviamente partendo dall'ultima a ritroso fino alla prima) dove 'Codice_modulo' = al valore che assume su ciascuna riga anziche' limitandosi ad operare sul valore assunto da $Codice_modulo.

    Credendo che il problema fosse l'annidamento di un ciclo foreach in un ciclo while ed entrambi in un altro while, ho imposto dei valori nello script in modo da limitare il "giro" ad una sola riga della tabella 'moduli': anche cosi' non cavo un ragno dal buco.

    Intanto mi rileggo lo script...

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    19
    Ciao Forum!

    Ho riguardato e riguardato lo script senza giungere a nulla.
    Ne ho fatto una copia eliminando le caselle di scelta multipla, imponendo la selezione ad una riga predefinita della tabella Corso_di_studio. Ho eliminato anche gli altri cicli, ma ancora la query non vuol saperne di scrivere gli aggiornamenti...

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    19

    risolto (in parte)!

    Ho trovato l'inghippo ) Era proprio nella query

    Codice PHP:
    $query_su_moduli =  "UPDATE moduli SET ('Semestre' = '".$semestre."', 'Codice_presidente' = '".$cod_presidente."') WHERE ('Codice_modulo' LIKE '%".$Codice_modulo."%')"
    La sintassi corretta e' questa:

    Codice PHP:
     $query_su_moduli =  "UPDATE moduli SET Codice_presidente = '".$cod_presidente."', Semestre = '".$semestre."'  WHERE Codice_modulo = '".$Codice_modulo."'"
    Ora c'e' solo un problemino... L'aggiornamento viene fatto su tutte le righe della tabella 'modulo' che siano in relazione con 'corso_di_studio'. La query, nelle mie intenzioni, dovrebbe limitarsi alla riga in cui 'Codice_modulo' sia quello effettivamente legato all'altra tabella.
    Mi viene in mente che forse dovrei lavorare sull'array che genera la tabella html in cui compaiono le righe correlate alla tabella 'corso_di_studio'... Qualcuno puo' darmi un suggerimento?

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    19

    RISOLTO

    Grazie a goikiu.

    Ho riguardato il codice e spostando alcune istruzioni all'interno dei cicli ho risolto o almeno cosi' pare.

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.