Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    327

    Perdita dati $_POST dopo header();

    Ciao a tutti,

    ho una form che all'action effettua una chiama a index.php?ucomm=do_register.
    All'interno della pagina se ucomm = do_register chiama la funzione do_register.
    Controlla che i campi obbligatori siano tutti compilati, se così non fosse effettua una header(); e richiama la pagina dove ho definito il form; nel form devo riproporre i dati inseriti precedentemente dall'utente e l'errore.

    Il problema è che quando effettuo l'header per poi segnalare l'errore la variabile $_POST si svuota e io non posso riproporre i dati nel form.
    Avevo pensato ad un'array da immettere nella sessione ma speravo ci fosse qualche altra soluzione.

    Grazie in anticipo ^^
    By Games

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    potresti usare javascript per controllare prima di fare il submit della form

  3. #3
    Non ci sono altri sistemi, o fai come ti suggerisce bstefano79 oppure butti i dati in sessione. Dopo il redirect i valori in POST vengono persi.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  4. #4
    Meglio la sessione del JS... che comunque puoi usare per agevolare l'utente...
    Ciao!

  5. #5
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    Originariamente inviato da fmortara
    Meglio la sessione del JS... che comunque puoi usare per agevolare l'utente...
    e perchè meglio la sessione? inutile intasare il server se alcuni campi obbligatori non sono riempiti ^_^

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    327
    Originariamente inviato da bstefano79
    potresti usare javascript per controllare prima di fare il submit della form
    Ciao,
    grazie per la risp

    Intendi fare dei controlli ed eventualmente segnalare l'errore con un alert?

    Perchè attualmente il mio form, in caso di errore, attiva delle scritte rosse per dare risalto all'errore.

    Intanto ti incollo qui il codice php

    Codice PHP:
     FUNCTION do_register()
     {
      IF(
    $_POST["username"]!=NULL AND
         
    $_POST["password"]!=NULL AND
         
    $_POST["rip_pass"]!=NULL AND
         
    $_POST["mail"]    !=NULL AND
         
    $_POST["rip_mail"]!=NULL AND
         
    $_POST["name"]    !=NULL AND
         
    $_POST["surname"] !=NULL AND
         
    $_POST["street"]  !=NULL AND
         
    $_POST["city"]    !=NULL AND
         
    $_POST["cap"]     !=NULL AND
         
    $_POST["land"]    !=NULL AND
         
    $_POST["tel"]     !=NULL )
      {
    //Ha inserito tutti i campi, procedo con la registrazione.
       
    IF($_POST["password"] != $_POST["rip_pass"])
       {
    //Le due password inserite sono diverse
        
    header("Location: index.php?view=register&result=3");
        EXIT;
       }
       IF(
    $_POST["mail"] != $_POST["rip_mail"])
       {
    //Le due email sono diverse
        
    header("Location: index.php?view=register&result=4");
        EXIT;
       }
       
    $db DO_CONNECTION();
       
    $query "SELECT * 
                   FROM os_customer
                  WHERE os_customer.username='
    $_POST[username]'";
       
    $result mysql_query($query$db);
       IF(
    $record mysql_fetch_array($result))
       {
    //Username già esistente.
        
    mysql_close($db);
        
    header("Location: index.php?view=register&result=5");
        EXIT;
       }
       
    $password md5($_POST["password"]);
       
    $query "INSERT INTO os_customer (username,
                                          pass,
                                          name,
                                          surname,
                                          street,
                                          city,
                                          cap,
                                          land,
                                          tel,
                                          mail)
                                   VALUES('
    $_POST[username]',
                                          '
    $password',
                                          '
    $_POST[name]',
                                          '
    $_POST[surname]',
                                          '
    $_POST[street]',
                                          '
    $_POST[city]',
                                          '
    $_POST[cap]',
                                          '
    $_POST[land]',
                                          '
    $_POST[tel]',
                                          '
    $_POST[mail]');";
       IF(
    $result mysql_query($query$db))
       {
    //Registrazione effettuata con successo
        
    mysql_close($db);
        
    header("Location: index.php?view=register&result=1");
        EXIT;
       }
       ELSE
       {
    //Errore in fase di registrazione - questo non dovrebbe mai accadere
        
    mysql_close($db);
        
    header("Location: index.php?view=register&result=6");
        EXIT;
       }
      }
      ELSE
      {
    //Non ha inserito tutti i campi obbligatori
       
    header("Location: index.php?view=register&result=2");
       EXIT;
      }     
     } 
    Codice PHP:
    FUNCTION show_register($db,$template)
     {
      IF(!ISSET(
    $_GET["result"]) OR
                
    $_GET["result"] != "1")
      {
      
    //Form utente per la registrazione
       
    $tmp_temp implode("",file("template/register.html"));
       
    $template preg_replace("//"$tmp_temp,$template);
       
    //Qui devo riproporre i dati inseriti precedentemente nella form
       
    IF(ISSET($_GET["result"]))
       {
           
           SWITCH(
    $_GET["result"])
           {
    // 2 = Campi obbligatori
    // 3 = Le due password inserite sono diverse
    // 4 = Le due email inserite sono diverse
    // 5 = Username già esistente. 
    // 6 = Errore interno!!!!!           
            
    CASE "2":
             
    $template preg_replace("//","",$template);
             
    $template preg_replace("//","*",$template);
            BREAK;
            CASE 
    "3":
             
    $template preg_replace("//","",$template);
            BREAK;
            CASE 
    "4":
             
    $template preg_replace("//","",$template);
            BREAK;
            CASE 
    "5":
             
    $template preg_replace("//","",$template);
            BREAK;
            CASE 
    "6":
             
    $template preg_replace("//","",$template);
            BREAK;        
           }                
       }
      }
      ELSE
      {
      
    //Registrazione effettuata con successo
        
    $tmp_temp implode("",file("template/register_ok.html"));
        
    $template preg_replace("//"$tmp_temp,$template);       
       }
       RETURN 
    $template;
     } 
    Questo è il template dove definisco il form
    Codice PHP:
    <form name="register" action="index.php?ucomm=do_register" method="POST">
     <
    table class="register" align="center">
      <
    tr>
       <
    td colspan="2"><font color="RED">[b][/b]</font></td>
      </
    tr>
      <
    tr>
       <
    td colspan="2" align="center"></td>
      </
    tr>
      <
    tr>
       <
    td colspan="2" align="center"></td>
      </
    tr>
      <
    tr>
        <
    td align="right">[b][/b]</td>
        <
    td><input type="text" name="username" value=""><font color="RED">[b][/b]</font></td>
      </
    tr>
      <
    tr>
        <
    td align="right">[b][/b]</td>
        <
    td><input type="password" name="password"><font color="RED">[b][/b]</font></td>
      </
    tr>
      <
    tr>
        <
    td align="right">[b][/b]</td>
        <
    td><input type="password" name="rip_pass"><font color="RED">[b][/b]</font></td>
      </
    tr>
      <
    tr>
        <
    td align="right">[b][/b]</td>
        <
    td><input type="text" name="mail"><font color="RED">[b][/b]</font></td>
      </
    tr>
      <
    tr>
        <
    td align="right">[b][/b]</td>
        <
    td><input type="text" name="rip_mail"><font color="RED">[b][/b]</font></td>
      </
    tr>
      <
    tr>
       <
    td colspan="2" align="center"></td>
      </
    tr>
      <
    tr>
        <
    td align="right">[b][/b]</td>
        <
    td><input type="text" name="name"><font color="RED">[b][/b]</font></td>
      </
    tr>
      <
    tr>
        <
    td align="right">[b][/b]</td>
        <
    td><input type="text" name="surname"><font color="RED">[b][/b]</font></td>
      </
    tr>
      <
    tr>
        <
    td align="right">[b][/b]</td>
        <
    td><input type="text" name="street"><font color="RED">[b][/b]</font></td>
      </
    tr>
      <
    tr>
        <
    td align="right">[b][/b]</td>
        <
    td><input type="text" name="city"><font color="RED">[b][/b]</font></td>
      </
    tr>
      <
    tr>
        <
    td align="right">[b][/b]</td>
        <
    td><input type="text" name="cap"><font color="RED">[b][/b]</font></td>
      </
    tr>
      <
    tr>
        <
    td align="right">[b][/b]</td>
        <
    td><input type="text" name="land"><font color="RED">[b][/b]</font></td>
      </
    tr>
      <
    tr>
        <
    td align="right">[b][/b]</td>
        <
    td><input type="text" name="tel"><font color="RED">[b][/b]</font></td>
      </
    tr>
      <
    tr>
       <
    td colspan="2" align="center"><input type="submit" class="register_button" value=""></td>
      </
    tr>
     </
    table>
    </
    form
    By Games

  7. #7
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    manche l'index potresti postare anche quello?

    come non detto l'hai fatto

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    327
    Originariamente inviato da bstefano79
    manche l'index potresti postare anche quello?

    come non detto l'hai fatto
    Eccoti l'index.php

    Codice PHP:
    <?php
    //STEP INIZIALI - INIZIO
    ob_start();
    INCLUDE(
    "function_kernel.php");      //Includo le funzioni kernel
    INCLUDE("function_main_public.php"); //Includo le funzioni main
    session_start(); //Avvio o continuo una sessione utente
    AUTO_LOGIN();    //Autologin se utente già registrato
    SET_LANGUAGE();  //Selezione del linguaggio
    INCLUDE("language/$_SESSION[language].php"); //Includo il file lingue
    //STEP INIZIALI - FINE 

    //GESTIONE PROCESSI - INIZIO//
    IF (!ISSET($_GET["ucomm"]))
    {
     
    PROCESS_BEFORE_OUTPUT($wa_lang);    
    }
    ELSE
    {
     
    PROCESS_AFTER_INPUT($_GET["ucomm"]);    
    }
    //GESTIONE PROCESSI - FINE//

    //STEP INIZIALI - INIZIO
    ob_end_flush();
    //STEP INIZIALI - FINE 
    ?>
    By Games

  9. #9
    Originariamente inviato da bstefano79
    e perchè meglio la sessione? inutile intasare il server se alcuni campi obbligatori non sono riempiti ^_^
    Se un utente ha js disattivato, con la sessione hai lo stesso funzionamento, con il solo js avresti un problema.

    Il js dovrebbe essere un di più per agevolare l'utente (evitare un invio della pagina e la seguente attesa), non per controllare un campi user defined...
    Ciao!

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.