• Super User

    Ciao Vanilla,
    ti consiglio vivamente di dare una lettura alla guida di giorgio su php e magari, se hai intenzione di approfondire il linguaggio e la programmazione, di acquistare un buon manuale giusto per avere una guida di riferimento che ti segua nell'apprendimento della programmazione.

    Per gli elementi basilari la guida di giorgio è fatta molto bene.


  • User

    Bene, ho studiato i primi capitoletti della guida al php, ma gli erori escono sempre: questo è quello che ho appana fatto:
    codice pagina html:

    <html>
    <body>
    <form method=get action="controllo.php">
    <center>
    Inserisci qui i tuoi dati:<br>
    I campi contrassegnati da * sono obbligatori!<br>
    <form method=get action="tapullino.php">
    <table>
    *Nome:
    <br><input typ="text" name="nome" size="40">
    <br>
    *Cognome:<br>
    <input typ="text" name="cognome" size="40">
    <br>
    *Email:<br>
    <input typ="text" name="email" size="40">
    <br>
    *Cellulare:<br>
    <input typ="number" name="cellulare" size="40">
    <br>
    Città:
    <br><input type="text" name "citta" size=40"><br>
    Cap:<br>
    <input type="number" name="cap" size =40"><br>
    Tel. fisso:<br>
    <input type="number" name="fisso" size="40"><br>
    Nome azienda:<br>
    <input type="text" name="azienda" size="40"><br>
    Posizione lavorativa:<br>
    <select name="posizione_lavorativa">
    <option value="studente">Studente
    <option value="libero">Libero professionista
    <option value="segretario">Segretario
    <option value="insegnante">Insegnante
    <option value="ricercatore">Ricercatore
    <option value="altro">Altro
    </select>
    <br>
    <br>
    *Accetta il trattamento dei dati personali:
    <input type="radio" name="accetta"><br>
    <br>
    <input type= submit name="submit" value="Invia">
    <input type=reset name="reset" value="Annulla">
    </form>
    </table>
    </body>
    </html>

    e questa la pagina di controllo php:

    <html>
    <body>
    <center>
    <h1>Controllo dati da lei inseriti:</h1>
    <?php
    echo "Gentile $cognome $nome ,<br>";
    echo "abbiamo registrato il suo indirizzo email: $email <br>";
    echo "il suo numero di cellulare è $cellulare . <br>";
    echo "Lei è residente a $città , cap $cap , il suo numero di telefono fisso è $fisso <br> ";
    echo "Nome della sua azienda: $azienda . <br>";
    echo "Le sarà inviata una mail di conferma, grazie!<br>";
    ?>
    </body>
    </html>

    Facendo una prova e compilando i dati del form -> invia, appare un messaggio di errore così:
    Notice: Undefined variable: cognome in c:\programmi\easyphp1-8\www\controllo.php on line 7
    fino adf altre righe successive alla 7.
    Ho salvato entrambi i file nella cartella www di easy php, ci sto diventando scema, non capisco quale e dove sia l'errore? Avrò dimenticato qualcosa?


  • User

    ok ho dimenticato delle e a type, ma correggendo l'errore c'è sempre non cambia nulla..
    😞


  • User

    Ok ho appena fatto un nuovo codice php così:

    <html>
    <head>

    <?php

    $cognome= "cognome";
    $nome= "nome";
    $email= "email";
    $città= "città";
    $cap= "cap";
    $telefonofisso= "telefonofisso";
    $enteazienda= "enteazienda";
    $posizionelavorativa= "posizionelavorativa";
    $accetta= "accetta";
    ?>
    </head>
    <body>
    <center>
    <h1>Controllo dati da lei inseriti:</h1>
    <?php
    echo "Gentile $cognome $nome ,<br>";
    echo "abbiamo registrato il suo indirizzo email: $email <br>";
    echo "il suo numero di cellulare è $cellulare . <br>";
    echo "Lei è residente a $città , cap $cap , il suo numero di telefono fisso è $fisso <br> ";
    echo "Nome della sua azienda: $azienda . <br>";
    echo "Le sarà inviata una mail di conferma, grazie!<br>";
    ?>
    </body>
    </html>

    Ora easyphp mi segnale meno errori, "Undefined variable" alla riga 27,28,29


  • User

    Nel modo seguente, controllando i nomi delle variabili, che per ditrazione avevo scritto sbagliati, inviando i dati dal form viene visualizzato tutto il codice stesso:

    <html>
    <body>

    <?php

    $cognome= "cognome";
    $nome= "nome";
    $email= "email";
    $città= "citta";
    $cap= "cap";
    $telefonofisso= "fisso";
    $azienda= "azienda";
    $posizionelavorativa= "posizione_lavorativa";
    $accetta= "accetta";
    $cellulare=" cellulare";
    ?>

    <center>
    <h1>Controllo dati da lei inseriti:</h1>
    <?php
    echo "Gentile $cognome $nome ,<br>";
    echo "abbiamo registrato il suo indirizzo email: $email <br>";
    echo "il suo numero di cellulare è $cellulare . <br>";
    echo "Lei è residente a $citta , cap $cap , il suo numero di telefono fisso è $fisso <br> ";
    echo "Nome della sua azienda: $azienda . <br>";
    echo "Le sarà inviata una mail di conferma, grazie!<br>";
    ?>
    </body>
    </html>


  • Super User

    quando recuperi i dati prova a fare in questo modo:

    $cognome = $_POST['cognome'];

    :ciauz:


  • User

    ok provo, quindi non uso il metodo get ma il post..


  • Super User

    scusa non avevo visto che usi il get:

    method="GET" -> $_GET[nome_variabile];

    method="POST" -> $_POST[nome_variabile];

    il concetto non cambia.

    quando scrivi codice html ricordati che il valore che assegni ad un parametro va sempre incluso nei doppi apici quindi:

    <form method=get ...> NON VA BENE!!

    <form method="GET" ....> forma corretta.

    il problema delle variabili risiede in un'impostazione del file di configurazione php.ini.

    l'impostazione riguarda il parametro register_globals, se impostato a on ti consente di recuperare i dati interrogando direttamente il nome della variabile (come indicato nella guida e come hai fatto tu), se questo parametro però è impostato a off (impostazione altamente probabile) per recuperare i dati devi utilizzare l'array associativo $_GET o $_POST in relazione al metodo usato dalla form.

    se desideri scrivere codice portabile quanto più indipendente possibile dalle impostazioni del server utilizza sempre l'array associativo.

    in più è buona norma verificare l'esistenza di una variabile che arriva dall'esterno prima di utilizzarla quindi:

    $cognome = isset($_POST['cognome'])?$_POST['cognome']:'';

    questa istruzione dice se esiste l'elemento con key 'cognome' nell'array post assegna alla variabile $cognome il suo contenuto, in caso contrario (definito dai due punti) assegna stringa vuota.

    utilizzando questo controllo non otterrai errori anche se la variabile non esiste.

    ti ricordo che la non esistenza di una variabile è BEN DIVERSA dalla variabile che contiene stringa vuota.


  • User

    Grazie mille, a sto punto credo che il problema sia proprio nel file di configurazione: register_globals è su off, ho controllato il metodo che ho inserito nella pagina html (ok) ma anche usando l'array associativo $_POST la situazione non cambia, non so più che fare, ci rinuncio!


  • User

    ...<form method=get action="tapullino.php">
    prova con <form action="xxx.php" method="get"> anche se preferisco POST

    per il php ti conviene a mio parere mettere tutto insieme
    <?php
    $cognome= $_GET['cognome'];
    $nome= $_GET['nome'];
    $email= $_GET['email'];
    $città= $_GET['citta'];
    $cap= $_GET['cap'];
    $telefonofisso= $_GET['fisso'];
    $azienda= $_GET['azienda'];
    $posizionelavorativa= $_GET['posizione_lavorativa'];
    $accetta= $_GET['accetta'];
    $cellulare= $_GET['cellulare'];
    elseif (trim($name=$_GET['nome']) == "" OR trim($surname=$_GET['cognome']) == "" OR trim($mail=$_GET['email']) == "" OR etc etc):
    echo "Non Tutti i campi sono stati riempiti!";
    echo " <center><h1>Controllo dati da lei inseriti:</h1>";
    echo "Gentile $cognome $nome ,<br>";
    echo "abbiamo registrato il suo indirizzo email: $email <br>";
    echo "il suo numero di cellulare è $cellulare . <br>";
    echo "Lei è residente a $citta , cap $cap , il suo numero di telefono fisso è $fisso <br> ";
    echo "Nome della sua azienda: $azienda . <br>";
    echo "Le sarà inviata una mail di conferma, grazie!<br>";
    echo "</center>";
    ?>

    a questo modo almeno su architettura lamp il tutto funziona..


  • User

    ometti questo pezzo
    elseif (trim($name=$_GET['nome']) == "" OR trim($surname=$_GET['cognome']) == "" OR trim($mail=$_GET['email']) == "" OR etc etc):
    echo "Non Tutti i campi sono stati riempiti!";

    e correggi

    $città
    senno la variabile non viene trovata poi come dicevo funziona tutto.


  • User Attivo

    Io stavo avendo da stamattina lo stesso tuo problema... e il mio caso era ancora più semplice... :arrabbiato:
    Poi sono andato sulla guida di Gt, ho provato secondo l'esempio e in locale non mi fungeva... spostandomi su remoto invece è tutto ok!
    Segui questo esempio preso dalla guida Php di Gt: http://www.giorgiotave.it/guida_php/form.php

    L'unica domanda che ho è: "perchè in locale no e sul server Aruba sì???" :mmm:

    Ho fatto caso che molte volte Dreamweaver non aggiorna subito i file e continua a restituire gli stessi errori che magari erano stati commessi prima della modifica...
    In locale forse dipendeva da quello il problema!


  • User

    Ok, grazie mille a tutti per l'aiuto, domani provo di nuovo... e speriamo sia la volta buona!!


  • User

    Grazie wilma_dammi_la_clava ci sono riuscita!!! :vai:
    Devo inoltre inserire il codice php per far sì che nel campo email sia inserita la "@" , far in modo che alcuni campi siano obbligatori, e mandare una mail di conferma iscrizione all'indirizzo mail inserito dall'utente. Chi mi da una mano? :mmm:


  • User Attivo

    Metti un ciclo if con questa condizione:

    ereg("[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z]+", $variabile_email)
    ``` ciao

  • User

    Funziona!!!!:D ti ringrazio!
    Ciao


  • User Attivo

    Ci sono degli ottimi esempi in rete di come costruire un'area riservata con un alto grado di sicurezza, ma per capirli biosogna avere una buona conoscenza del php... che io per es. non ho 😞


  • User Attivo

    Esatto, in un form di registrazione conviene usare il metodo post, e quando dall'altra parte recuperi i dati ovviamente li recuperi con post:

    $nome=$_POST['nome'];

    ti consiglio inoltre nella pagina controllo.php di togliere il codice html, usa solo php.Ciao

    @Vanilla said:

    ok provo, quindi non uso il metodo get ma il post..


  • User Attivo

    TI RICORDO COMUNQUE CHE IL TUTTO NON PUO' FUNZIONARE CON PAGINE HTML MA SOLO SOTTO ESTENSIONE PHP

    <?php
    if (isset($_POST['invia'])) // SE VIENE PREMUTO IL PULSANTE INVIA DEL MODULO
    {
    $email = strip_tags($_POST['email']);

    // QUESTO CONTROLLO SERVE PER I CAMPI OBBLIGATORI
    if ((!$_POST['intestazione']) || ($_POST['intestazione'] =="") OR
    (!$_POST['cognome']) || ($_POST['cognome'] =="") OR
    (!$_POST['nome']) || ($_POST['nome'] =="") OR
    (!$_POST['indirizzo']) || ($_POST['indirizzo'] =="") OR
    (!$_POST['num']) || ($_POST['num'] =="") OR
    (!$_POST['citta']) || ($_POST['citta'] =="") OR
    (!$_POST['stato']) || ($_POST['stato'] =="") OR
    (!$_POST['tel']) || ($_POST['tel'] =="") OR
    (!$_POST['email']) || ($_POST['email'] =="") OR
    (!$_POST['piva']) || ($POST['piva'] ==""))
    {
    echo "Compilare i campi con asterisco<b><a href='#' onClick='history.go (-1)'>INDIETRO</a></b>";
    }
    else if (!eregi("^[
    .0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$",$email))
    {
    echo "E-M@IL NON VALIDA PREGO REINSERIRLA <b><a href='#' onClick='history.go (-1)'>INDIETRO</a></b>";
    }
    else
    {
    $int = strip_tags($_POST['intestazione']);
    $cognome = strip_tags($_POST['cognome']);
    $nome = strip_tags($_POST['nome']);
    $indirizzo = strip_tags($_POST['indirizzo']);
    $num = strip_tags($_POST['num']);
    $cap = strip_tags($_POST['cap']);
    $citta = strip_tags($_POST['citta']);
    $stato = strip_tags($_POST['stato']);
    $tel = strip_tags($_POST['tel']);
    $fax = strip_tags($_POST['fax']);
    $cell = strip_tags($_POST['cell']);
    $username = strip_tags($_POST['username']);
    // CONTROLLO CHE NON SIA OMESSO O CHE SIA ALMENO DI OTTO CARATTERI LO USERNAME ALTRIMENTI GLI ASSEGNO, COME USERNAME, LA M@IL
    if ($username == "")
    {
    $user = $email;
    }
    else
    {
    $user = $username;
    }
    $user_str = strlen($user);

    if ($user_str < 😎
    {
    echo "USERNAME MINORE DI OTTO CARATTERI <b><a href='#' onClick='history.go (-1)'>INDIETRO</a></b></td>
    </tr>";
    }
    else
    {
    // CODICE CON 12 CARATTERI ALFANUMERICI CASUALI
    // QUESTO SERVE PER RICEVERE CONFERMA DALL'INDIRIZZO INDICATO
    $numcod = 12;
    $strx = '';
    for ($i=1; $i<=$numcod; $i++)
    {
    $set = array(rand(65,90),rand(97,122),rand(48,57));
    $strx .= chr($set[rand(0,2)]);
    }
    $codice = $strx; // QUESTO E' IL CODICE
    $codice_md5 = md5($codice); // CODICE CRIPTATO IN MD5

    // INSERISCO I DATI NEL DATABASE
    $insert = "INSERT INTO tabella (intestazione,cognome,nome,indirizzo,num,cap,citta,stato,tel,fax,cell,email,username,password,
    codice) VALUES ('" . $int . "','" . $cognome . "','" . $nome . "','" . $indirizzo . "','" . $num . "','" . $cap . "','" . $citta . "','" . $stato . "','" . $tel . "','" . $fax . "','" . $cell . "','" . $email . "','" . $user . "','" . $password . "','" . $codice_md5 . "')";
    mysql_query($insert,$conn) or die ("Impossibile eseguire l'operazione richiesta.<br>Cliente <b>$int</b> non inserito nel DB");

    // SPEDISCO LA MAIL AL CLIENTE

    $oggi = date("d/m/Y");
    $ore = date("H:i");
    // VARIABILI CORPO MAIL
    $messaggiox = "<b>ATTIVA ACCOUNT</b>";
    $messaggio_server = $trad['messaggio_server']; // ALTRA VARIABILE

    $da = maildelmittente; // MAIL MITTENTE
    $a = $email; // VARIABILE NELLA FUNZIONE MAIL CLIENTE
    $oggetto = "OGGETTO DELLA MAIL"; // OGGETTO MAIL CLIENTE

    $ind_web = "tuositoweb"; // IL TUO SITO WEB PER EVENTUALI COLLEGAMENTI

    // NUOVO MESSAGGIO MAIL IN FORMATO HTML
    $messaggio = "TUTTO IL CONTENUTO DELLA MAIL - TI CONSIGLIO DI FARE UNA SEMPLICE PAGINA HTML";
    // FINE NUOVA MESSAGGIO MAIL
    $intestazioni = "From: TUO SITO WEB - Registrazione <$da> \r \n";
    $intestazioni .= "Reply-To: TUO SITO WEB - Registrazione <$da> \r \n";
    $intestazioni .= "X-Mailer: PHP/" . phpversion();
    $intestazioni .= "MIME-version: 1.0\n";
    $intestazioni .= "Content-type: text/html; charset=iso-8859-1\r\n"; /impostiamo il formato della mail in HTML/

    $corpo = "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">";
    $corpo .= "<HTML><HEAD>";
    $corpo .= "<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">";
    // SE AL CORPO DEL MESSAGGIO ESISTE SCRIPT JAVA INSERIRLO QUI
    $corpo .= "<script language="JavaScript" type="text/JavaScript">
    <!--
    function MM_openBrWindow(theURL,winName,features) {
    window.open(theURL,winName,features);
    }
    //-->
    <!--
    function MM_displayStatusMsg(msgStr) {
    status=msgStr;
    document.MM_returnValue = true;
    }
    //-->
    </script>";
    $corpo .= "</HEAD>";
    $corpo .= "<BODY>";
    $corpo .= $messaggio;
    $corpo .= "</BODY></HTML>";
    @mail($a, $oggetto, $corpo, $intestazioni);

    // CHIUDO MAIL CLIENTE
    echo "VI E' STATA INVIATA UNA MAIL ALL'INDIRIZZO INDICATO -LEGGERE QUANTO SCRITTO";
    }
    }
    }
    else
    {

    QUI IL FORM CON ACTION POST

    ES:
    <form name="form_registrazione" method="post" action**="<?php echo $_SERVER['PHP_SELF']; ?>**">

    </form>
    }