Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    232

    passaggio variabili in risposta di un form

    Ciao a tutti, premetto che sono alle primissime armi con php, ho creato un form di invio dati via mail. Ora il form come action ha la pagina engine.php al cui interno ho scritto questo codice:
    codice:
    <?php  session_start(); 
               /* preparazione invio mail */
    $destinatario = "xxxx@xxx.it";
    $oggetto = $_POST['oggetto'];
    $messaggio = "Nome:". $_POST['nome'] ." \n";
    $messaggio .= "Cognome:" . $_POST['cognome'] . "\n";
    $messaggio .= "Email del mittente: " . $_POST['email'] . "\n";
    $messaggio .= $_POST['testo'];
    
    if (($destinatario != NULL) and  ($oggetto != NULL) and ($_POST['nome'] != NULL) and ($_POST['cognome'] != NULL) and ($_POST['testo'] != NULL) and (ereg ("@",$_POST['email'])))
    	{
                  mail ($destinatario,$oggetto,$messaggio);
    	      $_SESSION['ris_ok'] = '<p id="risok">Messaggio inviato correttamente</p>';
    	      header ( "location: http://miosito/contatti.php");
            }
    elseif ($_POST['nome'] == NULL)
           {
                $_SESSION['ris_no_n'] = '<p id="risno">Inserisci il tuo nome, grazie.</p>';
     	    header ( "location: http://miosito/contatti.php");
    	}
    elseif ($_POST['cognome'] == NULL)	 				                                       
           { 					
               $_SESSION['ris_no_c'] = '<p id="risno">Inserisci il tuo cognome, grazie.</p>'; 
    	   header ( "location: http://miosito/contatti.php");
    	}
    elseif ($_POST['testo'] == NULL)
    	{
    	   $_SESSION['ris_no_t'] = '<p id="risno">Inserisci il messaggio, grazie.</p>';
    	   header ( "location: http://miosito/contatti.php");
    	}
    elseif (!ereg("@",$_POST['email']))
    	{
    	   $_SESSION['ris_no_e'] = '<p id="risno">Inserisci un indirizzo email valido, grazie.</p>';
    	   header ( "location: http://miosito/contatti.php");
    	}
    elseif ($_POST['oggetto'] == NULL)
    	{
     	  $_SESSION['ris_no_o'] = '<p id="risno">Inserisci oggetto del messaggio, grazie.</p>';
    	  header ( "location: http://miosito/contatti.php");
    	}
     ?>
    la pagina contatti.php inizia subito con una
    codice:
    <?php session_start(); ?>
    poi all'inerno del form all'altezza di dove voglio mettere il messaggio o di successo o di errore ho messo questo codice (ne metto uno per esempio):
    codice:
    <?php
    	if ($_SESSION['ris_no_n'])
                     {
    			echo $_SESSION['ris_no_n'];
    		  }
    ?>
    che poi mi stamperà il messaggio. In fondo alla pagina ho inserito un session_unset() per azzerare la sessione.
    Il problema è questo, quando comèpilo per la prima volta il form e clicco invia, non mi viene restituito nessun messaggio.... poi dal secondo invio funziona tutto, perchè? dov'è che sbaglio?
    Grazie mille a tutti

  2. #2
    Premetto che non ho guardato a fondo il tuo script.
    Comunque, se sei alle prime armi é meglio partire con il piede giusto.

    1. Non capisco che bisogno ci sia di scomodoare le sessioni per passare l'esito di un controllo.

    Non sarebbe più semplice passare l'esito in GET?

    Codice PHP:
    header "location: [url]http://miosito/contatti.php?error=1[/url]"); 
    Ed in contatti.php recuperi la variabile error ed a dipendenza del valore stampi un messagio di errore.

    2. $destinatario != NULL per verificare che il campo non sia vuoto non è proprio la forma migliore

    Codice PHP:
    if(!empty($destinatario)) //.... 
    3. ereg("@" .... per verificare che un email sia valido é un po' pochino
    3.1 ereg é deprecata da php5 e rimossa in PHP 6

    Codice PHP:
    preg_match ('/^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\@([a-z0-9])(([a-z0-9-])*([a-z0-9]))+(\.([a-z0-9])([-a-z0-9_-])?([a-z0-9])+)+$/i'$_POST['email']); 
    4. Che approccio é verificare se tutto è giusto, in quel caso inviare l'email e poi verificare se c'é qualcosa di sbagliato?

    Verifica se c'è qualcosa di sbagliato, in quel caso interrompi l'esecuzione rinviando alla pagina contatti.php.
    Se tutti i controlli sono stati superati, allora invia l'email

    PHP LEARN - Guide, tutorial e articoli sempre aggiornati
    NUOVO: standardLib; il potente framework PHP é ora disponibile
    *******************************************
    Scarica oggi la tua copia di MtxEventManager

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    232
    Grazie mille mtx_maurizio, per quel che riguarda il punto 3 e 3.1 avevo visto nel manuale ufficiale php e lo dovevo correggere.
    per quanto riguarda il discorso di passare le variabili con il GET, mi potresti spiegare meglio, scusami ma sono alle primissima armi. Il form attualmente usa il metodo POST, quindi dovrei cambiare metodo? Poi la variabile che dovrei creare, se non ho capito male $error, potrà assumere solo un valore giusto? mi potresti fare un piccolo esempio per capire meglio? ora invertirò i controlli che effettivamente ha più senso. Grazie ancora

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    232
    Ho ancora problemi, ho fatto le modifiche ma le variabili non me le passa.... ecco il codice:

    codice del form della pagina "contatti.php"
    codice:
    <?php
    	if ($true == 1)
    	      { 
    		echo '<p id="risok">Messaggio inviato correttamente</p>';
    	      }
    ?>
    <form id="form_info" action="engine/engine.php" method="post" name="info">
    <fieldset>                    	
    <legend>Informazioni</legend>
    <p class="none">
       <label for="nome">Nome:</label>
       <input type="text" name="nome" id="nome" tabindex="10" />
    </p>
    <?php
        if ($error == 1)
                {
    		print '<p id="risno">Inserisci il tuo nome, grazie</p>';
                }
    ?>
    ......................
    omissis (sono ripetizioni)
    ............................
    <p class="none">
    <input type="submit" name="invia" id="invio" value="Invia" />
    <input type="reset" name="cancella" id="cancella" value="Cancella"  />
    </p>
    </fieldset>
    </form>
    mentre per la pagina engine.php

    codice:
    <?php
    
    /* preparazione invio mail */
    	
    	$destinatario = "xxx@xxxxxx.it";
    	$oggetto = htmlspecialchars ($_POST['oggetto']);
    	
    	$messaggio = "Nome:". htmlspecialchars ($_POST['nome']) ." \n";
    	$messaggio .= "Cognome:" . htmlspecialchars ($_POST['cognome']) . "\n";
    	$messaggio .= "Email del cliente: " . htmlspecialchars ($_POST['email']) . "\n";
    	$messaggio .= htmlspecialchars ($_POST['testo']);
    	
    /* iniziamo con i controlli */
    
    
    	if (empty($_POST['oggetto']))
    		{
    			$error = 4;
    		}
    	elseif (empty($_POST['nome']))
    		{
    			$error = 1;				
    		}
    	elseif (empty($_POST['cognome']))
    		{
    			$error = 2;
    		}
    	elseif ((empty($_POST['email'])) or (!preg_match('/^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*@([a-z0-9])(([a-z0-9-])*([a-z0-9]))+(.([a-z0-9])([-a-z0-9_-])?([a-z0-9])+)+$/i', $_POST['email'])))
    		{
    			$error = 3;
    		}
    	elseif (empty($_POST['testo']))
    		{
    			$error = 5;
    		}
    /* ridiamo i messaggi d'errore */
    	
    	switch ($error)
    		{
    			case 1:
    			    header ( 'location: http:/miosito/contatti.php?error=1');
    				break;
    			case 2:
    				header( 'Location: http://miosito/contatti.php?error=2');
    				break;
    			case 3:
    				header( 'Location: http://miosito/contatti.php?error=3');
    				break;
    			case 4:
    				header( 'Location: http://miosito/contatti.php?error=4');
    				break;
    			case 5:	
    				header( 'Location: http://miosito/contatti.php?error=5');
    				break;
    			default:
    				mail($destinatario,$oggetto,$messaggio);
    				header( 'Location: http://miosito/contatti.php?true=1');
    		}
    ?>
    Perchè con questo codice non mi restituisce nessun messaggio di errore o corretto inserimento sulla pagina contatti.php?

  5. #5
    if($_GET['error'] == 1)
    PHP LEARN - Guide, tutorial e articoli sempre aggiornati
    NUOVO: standardLib; il potente framework PHP é ora disponibile
    *******************************************
    Scarica oggi la tua copia di MtxEventManager

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    232
    grazie mille ho appena risolto!!!!! Grazie mille!!!!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    232
    invece per ripassare le variabili (nome, cognome eccc....) nella pagina contatti.php, in value="....", in modo da non far reinserire tutti i dati del form all'utente? Devo usare le sessioni qui, giuso?

  8. #8
    E' una possibilità.
    Il meglio sarebbe eseguire i controlli in javascript o in ajax. Ci sono moltissimi tutorial se scegli questa opzione
    PHP LEARN - Guide, tutorial e articoli sempre aggiornati
    NUOVO: standardLib; il potente framework PHP é ora disponibile
    *******************************************
    Scarica oggi la tua copia di MtxEventManager

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    539
    puoi anche rinviare le variabili e fare una cosa del tipo...

    Codice PHP:

    if(isset($_POST['nome'])){
       
    $nome $_POST['nome'];
    }
    else{
       
    $nome "";

    e poi nel form

    Codice PHP:
    <input type="text" name="nome" id="nome" value="<?php print $nome?>">

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    232
    cosi fa bene se il form e il codice sono sulla stessa pagina, no? Se li ho su due pagine diverse funzionerà lo stesso?

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.