[PHP] Undefined index form di registrazione

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
edoz90
Prode Principiante
Messaggi: 242
Iscrizione: giovedì 26 agosto 2010, 18:40
Desktop: Cinnamon
Distribuzione: Arch Linux

[PHP] Undefined index form di registrazione

Messaggio da edoz90 »

Ciao a tutto, ho creato un form per la registrazione ad sito web in PHP ecco il codice:

Codice: Seleziona tutto

<?php
include ('conf.inc.php');

// creiamo il nostro modulo di registrazione
?>
<form action="?inviodati=ok" method='POST'>
<b>Nickname</b><br>
<input type="text" name="nickname" value=""><br>
<b>Mail</b><br>
<input type="text" name="mail" value=""><br>
<b>Password</b><br>
<input type="password" name="pass" value=""><br>
<b>Ripeti Password</b><br>
<input type="password" name="pass2" value=""><br>
<input type="submit" name="submit" value="Completa Registrazione"><br>
</form>

<?php
//attraverso un if controllio che il form sia stato inviato 
if ($_GET['inviodati'] == "ok") {
    // recuperiamo i dati inviati con il form
    $username = $_POST['nickname'];
    $email = $_POST['mail'];
    $pass1 = $_POST['pass'];
    $pass2 = $_POST['pass2'];
    
    //controllo che i campi siano stati tutti compilati
    if ($email == TRUE && $username == TRUE && $pass1 == TRUE && $pass2 == TRUE)  {
        
        //controllo se il campo mail è stato scritto in maniera errata
        if (isset($_POST['mail'])) {
            $email = filter_var($_POST['mail'], FILTER_SANITIZE_EMAIL);
            $email = filter_var($email, FILTER_VALIDATE_EMAIL);
        }

        if ( $email == TRUE ) {
            //controllo se l'mail è presente già nel database
            $sql = mysql_query("SELECT * FROM utenti WHERE mail = '$email'") or die ("Mail già occupata");
            $num_rows = mysql_num_rows($sql); 

            if ( $num_rows == 0 ) {
                //ora controllo che le password inserite siano identiche
                if ( $pass1 == $pass2 ) {
                    $username = mysql_real_escape_string($username);
                    mysql_query("INSERT INTO utenti (nick, password, mail)
                                VALUES ('$username', MD5('$pass1'), '$email')") 
                                OR DIE(mysql_error());
                    mysql_close($db_connect); // Closes the connection.

                    //e invio una mail con la riuscita registazione
                    //mail($email, "Registrazione OK", "Complimenti registrazione effettuata con successo");
                    echo "Complimenti registrazione effettuata con successo.";
                } else {
                    echo "Le password non corrispondono";
                }
            } else {
                echo "Indirizzo mail gia utilizzato.";
            }
        } else {
            echo "La tua mail non è idonea per la registrazione.";
        }
    } else {
    echo "Tutti i campi sono obbligatori.";
    }
}
?>
ma al momento del run:

Codice: Seleziona tutto

Notice: Undefined index: inviodati in C:\xampp\htdocs\provaLAM\register.php on line 20
come posso risolvere??
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [PHP] Undefined index form di registrazione

Messaggio da Zoff »

Con:
[php]if ( isset($_GET['inviodati']) && $_GET['inviodati'] == "ok") {[/php]

al posto di:
[php]if ($_GET['inviodati'] == "ok") {[/php]
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
edoz90
Prode Principiante
Messaggi: 242
Iscrizione: giovedì 26 agosto 2010, 18:40
Desktop: Cinnamon
Distribuzione: Arch Linux

Re: [PHP] Undefined index form di registrazione

Messaggio da edoz90 »

ora non da errore grazie mille; ma posso chiederti perchè ora fa?
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [PHP] Undefined index form di registrazione

Messaggio da Zoff »

I Notice sono avvertimenti di possibili problematiche che certe istruzioni possono causare.

Accade perché se accedi alla pagina $_GET['inviodati'] non è assegnato per cui ti avverte che stai leggendo qualcosa che in realtà non è stato inviato.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
edoz90
Prode Principiante
Messaggi: 242
Iscrizione: giovedì 26 agosto 2010, 18:40
Desktop: Cinnamon
Distribuzione: Arch Linux

Re: [PHP] Undefined index form di registrazione

Messaggio da edoz90 »

ho capito... grazie ancora!!!
Avatar utente
Sorriso.
Prode Principiante
Messaggi: 29
Iscrizione: martedì 30 agosto 2011, 20:56

Re: [PHP] Undefined index form di registrazione

Messaggio da Sorriso. »

Zoff. Avrei risposto io.
Un consiglio, fai il controllo di tutte le variabili che vengono da $_POST, rende lo script più completo ;).
Guardando attentamente il tuo script ho notato un piccolo errore.

Isset di norma si usa per verificare una variabile globale (POST, GET, etc. etc.). Quindi, di norma, bisogna controllare la variabile prima che essa venga usata in un qualsiasi modo.
Detto in poche parole:

Codice: Seleziona tutto

...

if ($_GET['inviodati'] == "ok") {
    // recuperiamo i dati inviati con il form
    $username = $_POST['nickname'];
    $email = $_POST['mail'];
    $pass1 = $_POST['pass'];
    $pass2 = $_POST['pass2'];

...

if (isset($_POST['mail'])) {
            $email = filter_var($_POST['mail'], FILTER_SANITIZE_EMAIL);
            $email = filter_var($email, FILTER_VALIDATE_EMAIL);
        }

...

Questo non va bene... Metti prima il controllo e poi salva il contenuto della variabile, in un'altra.
Ultima modifica di Sorriso. il giovedì 8 settembre 2011, 20:49, modificato 1 volta in totale.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [PHP] Undefined index form di registrazione

Messaggio da Zoff »

Sorriso. ha scritto: Zoff. Avrei risposto io.
??? Penso che chiunque sapesse la risposta avrebbe potuto rispondere no?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
edoz90
Prode Principiante
Messaggi: 242
Iscrizione: giovedì 26 agosto 2010, 18:40
Desktop: Cinnamon
Distribuzione: Arch Linux

Re: [PHP] Undefined index form di registrazione

Messaggio da edoz90 »

così può andare?

Codice: Seleziona tutto

if (isset($_GET['inviodati']) && $_GET['inviodati'] == "ok") {
    // recuperiamo i dati inviati con il form
    $username = $_POST['nickname'];
    //controllo se il campo mail è stato scritto in maniera errata
    if (isset($_POST['mail'])) {
            $email = filter_var($_POST['mail'], FILTER_SANITIZE_EMAIL);
            $email = filter_var($email, FILTER_VALIDATE_EMAIL);
            if ($email == TRUE)
                $email = $_POST['mail'];
    } else 
        $email = FALSE;   
    $pass1 = $_POST['pass'];
    $pass2 = $_POST['pass2'];
-------------------------------------- etc-----------
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [PHP] Undefined index form di registrazione

Messaggio da Zoff »

No. Come detto da Sorriso. priam della prima lettura di ogni variabile POST devi prima controllare che sia presente con isset.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
edoz90
Prode Principiante
Messaggi: 242
Iscrizione: giovedì 26 agosto 2010, 18:40
Desktop: Cinnamon
Distribuzione: Arch Linux

Re: [PHP] Undefined index form di registrazione

Messaggio da edoz90 »

ok e soprattutto farlo per tutte le variabili non solo per la mail!!!  ;D
Avatar utente
garak
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1647
Iscrizione: lunedì 13 giugno 2005, 13:37
Desktop: Gnome
Distribuzione: Ubuntu 24.04
Sesso: Maschile
Località: Roma
Contatti:

Re: [PHP] Undefined index form di registrazione

Messaggio da garak »

Sorriso. ha scritto:
Isset di norma si usa per verificare una variabile globale (POST, GET, etc. etc.). Quindi, di norma, bisogna controllare la variabile prima che essa venga usata in un qualsiasi modo.
Questa affermazione è fuorviante.
La funzione isset() si usa normalmente su qualsiasi variabile, sia essa superglobal (che è il nome corretto per $_GET e soci) sia essa una qualsiasi variabile.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti