2017-05-06 4 views
1

Je veux créer un formulaire pour mon site web. Mais je faisais face à l'erreur et voici mon code:

<?php 

/* Registration process, inserts user info into the database 
and sends account confirmation email message 
*/ 

// Set session variables to be used on profile.php page 

$_SESSION['email'] = $_POST['email']; 
$_SESSION['first_name'] = $_POST['firstname']; 
$_SESSION['last_name'] = $_POST['lastname']; 


$mysqli = mysqli_connect("localhost","root","","data"); 

// Check connection 
if (mysqli_connect_errno()) 
{ 
echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

// Escape all $_POST variables to protect against SQL injections 
$first_name = $mysqli->escape_string($_POST['firstname']); 
$last_name = $mysqli->escape_string($_POST['lastname']); 
$email = $mysqli->escape_string($_POST['email']); 
$password = $mysqli->escape_string(password_hash($_POST['password'],      
PASSWORD_BCRYPT)); 
$hash = $mysqli->escape_string(md5(rand(0,1000))); 

    // Check if user with that email already exists 
    $result = $mysqli->query("SELECT * FROM login WHERE email='$email'") or   
die($mysqli->error()); 

// We know user email exists if the rows returned are more than 0 
if ($result->num_rows > 0) { 

$_SESSION['message'] = 'User with this email already exists!'; 
header("location: error.php"); 

    } 
else { // Email doesn't already exist in a database, proceed... 

// active is 0 by DEFAULT (no need to include it here) 
$sql = "INSERT INTO login (first_name, last_name, email, password, hash)" 
     ."VALUES ('$first_name','$last_name','$email','$password',  '   
    $hash')"; 

// Add user to the database 
if ($mysqli->query($sql)){ 

    $_SESSION['active'] = 0; //0 until user activates their account with  

    verify.php 
    $_SESSION['logged_in'] = true; // So we know the user has logged in 
    $_SESSION['message'] = 

      "Confirmation link has been sent to $email, please verify 
      your account by clicking on the link in the message!"; 

    // Send registration confirmation link (verify.php) 
    $to  = $email; 
    $subject = 'Account Verification (clevertechie.com)'; 
    $message_body = ' 
    Hello '.$first_name.', 

    Thank you for signing up! 

    Please click this link to activate your account: 

    http://localhost/login-system/verify.php?email='.$email.'&    
    hash='.$hash; 

    mail($to, $subject, $message_body); 

    header("location: profile.php"); 

    } 


else { 
    $_SESSION['message'] = 'Registration failed!'; 
    header("location: error.php"); 
    exit(); 
} 

} 

L'état d'erreur:

Undefined index: firstname, lastname, email, password 

à des variables de session mis en ligne et en ligne pour échapper tous $ _POST pour protéger l'injection SQL. Quelqu'un sait comment corriger cette erreur. Je vous remercie.

Répondre

0

Il vous manque session_start() au début de votre code, cela doit être appelé avant que vous ne renvoyiez quoi que ce soit au navigateur. Vous devrez également ajouter session_start à votre error.php pour y lire la session.

Lorsque session_start() est appelée ou au démarrage d'un auto de session, PHP appelleront l'ouvrir et lire de sauvegarde de session manutentionnaires ...

Le rappel de lecture récupérera des données de session existantes (stockées dans une spéciale format sérialisé) et sera non sérialisé et utilisé pour remplir automatiquement la superglobale $ _SESSION lorsque le rappel en lecture renvoie les données de session sauvegardées à la gestion de session PHP.

Voir: http://php.net/manual/en/function.session-start.php

0
If(isset($_POST['first_name']) &&  isset($_POST['last_name']) && isset($_POST['email'])){ 
// Escape all $_POST variables to protect against SQL injections 
$first_name = $mysqli->escape_string($_POST['firstname']); 
$last_name = $mysqli- >escape_string($_POST['lastname']); 
} 

En PHP, un élément variable ou une matrice qui n'a jamais été fixé est différent d'un dont la valeur est nulle; tenter d'accéder à une telle valeur non définie est une erreur d'exécution.

C'est ce que vous recherchez: le tableau $ _POST n'a aucun élément à l'index "nom d'utilisateur", donc l'interpréteur interrompt votre programme avant même qu'il ne parvienne au test de nullité.