Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    evitare inserimento dati al refresh della pagina

    ciao, ho una select che quando scelgo una delle voci del menu mi tira fuori a fondo pagina i dati relativi a quella voce, poi col pulsante invia clicco e invio i dati nel db, il problema è che dopo aver scelto la voce della select e che mi ha visualizzato i dati di quella voce, mi invia i dati nel db anche se faccio refresh della pagina, si può evitare questo?

    Codice PHP:
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get"> 


    <table width="650" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="650" valign="top">

    <select name="corso" onchange="this.form.submit()"> 
    <option value="">seleziona corso</option> 
    <?php 
    //compila dinamicamente la select 
    while($row mysql_fetch_object($sql)) { 
        if (
    $row->id_corsi==$_GET[corso]){ $sel="SELECTED";}ELSE{$sel="";}
      echo 
    "<option value=\"$row->id_corsi\" $sel>$row->nome_corso</option>\n"

    echo 
    "</select>\n"

    //verifica se è stato passato o meno un valore dalla select 
    if(isset($_GET['corso'])) { 

      
    //memorizza il valore passato dalla select (l'id del corso) 
      
    $IDcorso $_GET['corso']; 

    //recupera il nome del corso scelto tramite $IDcorso 
    $corso mysql_query("SELECT a_corsi.*, a_creacorsi.*
            FROM a_corsi, a_creacorsi
            WHERE a_creacorsi.id_corsi = '
    $IDcorso' AND a_creacorsi.id_corsi = a_corsi.id_corsi") or die(mysql_error()); 
       
      
    //recupera tutte le materie relative ad un corso specifico tramite $IDcorso
    $sql mysql_query("SELECT a_materie.*, a_corsi.*, a_corsi_materie2.*
            FROM a_materie, a_corsi, a_corsi_materie2
            WHERE a_corsi_materie2.id_corsi = '
    $IDcorso' AND a_corsi_materie2.id_corsi = a_corsi.id_corsi AND a_corsi_materie2.id_materie = a_materie.id_materie
            ORDER BY a_materie.nome_materia"
    ) or die(mysql_error()); 

      
    //verifica che ci sia almeno un risultato valido per la query precedente 
      
    if(mysql_num_rows($sql) >= 1) { 

        
    //stampa il nome del corso
         
    $row1 mysql_fetch_object($corso); 
        echo 
    "<table width=\"650\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\">
    <tr><td height=\"12\" colspan=\"2\"></td></tr>
    <tr><td height=\"20\" colspan=\"2\"><span class=\"testo_viola_bold\">Materie del corso 
    $row1->nome_corso svolto a $row1->luogo_corso dal $row1->data1_corso al $row1->data2_corso</span></td></tr>
    <tr><td height=\"1\" bgcolor=\"BF9BB5\" colspan=\"2\"></td></tr>\n"


        
    //stampa tutte le materie del corso scelto                     
        
    while($row2 mysql_fetch_object($sql)) { 
          echo 
    "<tr><td height=\"41\" align=\"left\"><span class=\"testo_grigio_bold\">$row2->nome_materia</span></td><td align=\"right\">
    <select name=\"
    $row2->id_materie\">
          <OPTION VALUE=\"\">seleziona il voto</OPTION>
          <OPTION VALUE=\"1\">1/10</OPTION>
          <OPTION VALUE=\"2\">2/10</OPTION>
          <OPTION VALUE=\"3\">3/10</OPTION>
          <OPTION VALUE=\"4\">4/10</OPTION>
          <OPTION VALUE=\"5\">5/10</OPTION>
          <OPTION VALUE=\"6\">6/10</OPTION>
          <OPTION VALUE=\"7\">7/10</OPTION>
          <OPTION VALUE=\"8\">8/10</OPTION>
          <OPTION VALUE=\"9\">9/10</OPTION>
          <OPTION VALUE=\"10\">10/10</OPTION>
        </select>

    </td></tr><tr><td height=\"1\" bgcolor=\"BF9BB5\"></td><td bgcolor=\"BF9BB5\"></td></tr>\n"

        } 
     echo 
    "</table>\n"
      } else { 
          echo 
    '<span class="testo_viola_bold">non ci sono materie per il corso selezionato</span>'
      } 

    ?> 
    </td>
      </tr>
      <tr>
      <td height="41">

      <select name="allievo"> 
    <option value="" selected="selected">seleziona allievo</option> 
    <?php 
    //compila dinamicamente la select 
    while($row mysql_fetch_object($sql2)) { 
      echo 
    "<option value=\"$row->id_allievi\">$row->cognome</option>\n"

    echo 
    "</select>\n"
    ?> 

    <input type="hidden" name="riga" value="1"><input type="submit" class="pulsante" value="inserisci">

      </td>
      </tr>
    </table>
    </form>

  2. #2
    evita di postare così tanto codice.. o posti cose circostanziate o niente.. nessuno lo leggerà mai ^^

    Comunque ti basta usare una variabile di sessione con cui tener traccia dell'eventuale invio. .al refresh il dato risulta già inviato e via..

    come organizzare la cosa dipende da tante cose.. ma una cosa ragionevole potrebbe essere
    o memorizzare un timestamp e impedire un altro qualsiasi invio prima di un tot secondi dopo quel timestamp
    o memorizzare un qualche id ed impedire l'inserimento dello stesso id

    ..o ancora, potresti semplicemente fare una SELECT prima dell'inserimento.. se quello stesso record è già presente non lo inserisci edai un errore..

    se poi avessi definito una chiave primaria sul DB questo meccanismo sarebbe automatico (darebbe un brutto messaggio d'errore non personalizzato, ma ti bloccherebbe i doppioni)

  3. #3
    Utente di HTML.it L'avatar di neida
    Registrato dal
    Feb 2005
    Messaggi
    1,478
    La soluzione proposta in questa pillola è un'ottimo punto di partenza, se non di arrivo addirittura...

  4. #4
    grazie dei consigli ragazzi, ora mi leggo anche la pillola


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.