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

    [Sessioni e dati via $_POST] Nessun return dei dati in caso di errore. Perchè?

    Ciao a tutti,

    ho una pagina .php con un form per l'invio di un email. Il form non ha nessuna action, quindi agisce su se stessa ( action="" ).

    Lo script integrato nella pagina effettua un controllo sui campi (Email, Oggetto e Testo).

    Se l'utente sbaglia l'indirizzo email, ecc, e preme su "Invio", lo script visualizza una modale che appare/scompare con il relativo messaggio di errore.

    Ecco io dovrei far ritornare il valore (errato) passato dall'utente allo script, in modo tale che possa correggerlo.

    Ma la funzione return non mi va. Perchè?

    Qui di seguito un un esempio:

    Codice PHP:
    <?php

    session_start
    (); // Inizio pagina e sessione

    /*
    ################
    ###Qui c'è il form####
    ################
    */

    // Inizia lo script che controlla

    $email $_POST['email']; // Raccolgo l'email passata dall'utente
    $_SESSION['email'] = $email// ..e la immetto nella sessione


    if(isset($_POST['invia_dati'])) {  // Se clicca sul pulsante di invio..

       
    if($_POST['email'] != **diversa da espressione regolare**) { // E si commette l'errore..

          
    echo $variabile_modale_on"Inserisci email corretta"$variabile_modale_off// Appare la modale e..
          
    return $_SESSION['email']; // ..dovrebbe riportare il dato sbagliato..cosa che non succede. Perchè??
       
    }

    }
    ?>
    Sapreste darmi qualche indicazione?

  2. #2
    Utente di HTML.it L'avatar di hyde82
    Registrato dal
    Feb 2010
    Messaggi
    243
    il form non agisce su stesso come fai tu.....nella action va : $_SERVER['PHP_SELF'] o il nome del file stesso....

  3. #3
    Ok ho aggiunto PHP_SELF . Il problema però non si è risolto. Come posso fare?

  4. #4
    Anzi ti dirò di più: se aggiungo PHP_SELF o il nome della stessa pagina mi da ancora più problemi!

    - Mi sparisce il pulsante di invio (dopo aver inviato)
    - Non mi appaiono le modali di errore (dopo aver sbagliato)

    ..e sono sicuro che non invierebbe neanche i dati tramite mail se lo testassi in rete.
    -------------------------------------------------------------------------------------

    Credo che lo lascerò così: action="" . E' meglio.

    -------------------------------------------------------------------------------------

    Per il fatto dei dati da returnare in caso di errore, hai una soluzione da consigliarmi?

  5. #5
    Utente di HTML.it L'avatar di hyde82
    Registrato dal
    Feb 2010
    Messaggi
    243
    posta il form e ti scrivo il cod corretto

  6. #6
    Eccolo qui, con qualche modifica perchè sarebbe troppo lungo.

    Codice PHP:
    <?php
    session_start
    ();
    ?>

    <html>
    <head><title></title></head>
    <body>

    <form method="post" action="">
      <span>Email:</span>
        <input name="email" type="text" title="Inserisci il tuo indirizzo email" size="50" maxlenght="50" />
           

       <span>Oggetto:</span>
         <select name="oggetto">
            <option value="vuoto" selected="selected"></option>
            <option value="opz_1">Opzione 1</option>
            <option value="opz_2">Opzione 2</option> 
          </select>
               

         <span>Testo:</span>
           <textarea name="testo" title="Scrivi il tuo testo" rows="13" cols="61"></textarea>
              

                 <input type="submit" name="invia" value="Invia email" />
    <?php
    // Script che controlla

    $email $_POST['email'];
    $_SESSION['email'] = $email;

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

       if (
    $email != **diversa da espressione regolare**) {

           echo 
    $apriModale"Email non valida"$chiudiModale;
           return 
    $_SESSION['email'];

       }
    }
    ?>

    </body>
    </html>
    <?php
    session_destroy
    ();
    ?>

  7. #7
    Utente di HTML.it L'avatar di hyde82
    Registrato dal
    Feb 2010
    Messaggi
    243
    Prova così....

    <?php session_start();?>
    <!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" xml:lang="it-it" lang="it-it" dir="ltr" id="minwidth" >
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>test</title>
    <html>
    <head><title></title></head>
    <body>
    <?php if(isset($_POST['invia'])){

    $testo =$_POST['testo'];
    $email = $_POST['email'];
    $_SESSION['email'] = $email;

    echo "Dati inviati al server:
    ";
    echo "Sessione email :" .$_SESSION['email']."
    ";
    echo "POST email :" .$email."
    ";
    echo "POST test :" .$testo."
    ";

    echo "Ora puoi effettuare validazioni";

    //qui le validazioni dei campi del form....
    }else{


    <form method="post" action="<?php $_SERVER['PHP_SELF'];?>">
    <span>Email:</span>
    <input name="email" type="text" title="Inserisci il tuo indirizzo email" size="50" maxlenght="50" />


    <span>Oggetto:</span>
    <select name="oggetto">
    <option value="vuoto" selected="selected"></option>
    <option value="opz_1">Opzione 1</option>
    <option value="opz_2">Opzione 2</option>
    </select>


    <span>Testo:</span>
    <textarea name="testo" title="Scrivi il tuo testo" rows="13" cols="61"></textarea>


    <input type="submit" name="invia" value="Invia email" />

    </body>
    </html>
    <?php }?>

  8. #8
    Utente di HTML.it L'avatar di hyde82
    Registrato dal
    Feb 2010
    Messaggi
    243
    cmq....di solito è preferibile utilizzare un'impostazione diversa.....potresti delegare la validazione ad un file diverso.....così il codice è più pulito e manutenibile....e poi puoi eventualmente utilizzare anche javascript...

  9. #9
    Cavolo..ti ringrazio moltissimo per il tempo che ci hai dedicato. Mi sà che il tuo consiglio (impostazione diversa) sarebbe preferibile.

    Solo una cosa però...

    ...delegando il controllo all'action che rimanda allo script differente che controlla, in caso di errore (in questo caso), come faccio a rimandare l'utente indietro e far apparire la modale con all'interno il messaggio che dice che ha sbagliato?

    Della serie: se ad esempio su Facebook scrivi sulla bacheca, ma i caratteri superano un certo limite, Facebook sempre sulla stessa pagina ti fa apparire la modale di avviso e ANCHE ti lascia il testo che avevi scritto inalterato.

    Capito cosa voglio dire? Credo di si...

  10. #10
    Utente di HTML.it L'avatar di hyde82
    Registrato dal
    Feb 2010
    Messaggi
    243
    ajax......e tagli la testa al toro.....Io per questi lavori utilizzo jquery....è na bomba....

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.