2017-10-05 3 views
-1

Donc je crée un formulaire d'enregistrement et j'obtiens une erreur "Undefined variable", l'erreur complète va comme ceci:Obtenir une erreur "Undefined variable" sur mon formulaire d'inscription et je ne sais pas comment y remédier

Avis: Undefined variable: nom d'utilisateur dans C: \ xampp \ htdocs \ phpacademy \ cm \ admin \ signup.php en ligne 8

Avis: Undefined variable: mot de passe dans C: \ xampp \ htdocs \ phpacademy \ cms \ admin \ signup.php à la ligne 9

Maintenant, tout d'abord ma base de données pour le formulaire d'inscription va comme ceci:

Schema Name:cms 

Tables:users,articles 

Users table:user_id,user_name,user_password 

Maintenant, pour le code que j'ai index.php, connection.php et signup.php Voici le code:

index.php:

 <?php 

echo "<form action='signup.php' method='POST'> 
     <input type='text' name='username' placeholder='Username'><br> 
    <input type='password' name='password' placeholder='Password'><br> 
    <button type='submit'>SIGN UP</button> 
</form>"; 
?> 

signup.php:

<?php 
 

 
require 'connection.php'; 
 

 
$statement = $pdo->prepare("INSERT INTO users (username, password) 
 
    VALUES(:username, :password)"); 
 
$result = $statement->execute(array(
 
    "username" => $username, 
 
    "password" => $password 
 
)); 
 
$statement = null; 
 

 
?>

et connection.php:

<?php 
 

 
try{ 
 
$pdo = new PDO('mysql:host=localhost;dbname=cms', 'root', ''); 
 
} catch (PDOException $e) { 
 
\t exit('Database error.'); 
 
\t 
 
} 
 
if(empty($pdo)) die("pdo variable is empty!"); 
 
?>

Maintenant juste pour que vous les gars savent c'est index.php est une partie d'un code plus grand, aussi parce que cela fait partie d'un beaucoup plus gros fichier quand je mets le connection.php dans un autre dossier je reçois une erreur du connection.php n'a pas pu être trouvé, si vous avez d'autres questions, je vais y répondre, merci!

+4

double possible de [PHP: "Avis: Undefined variable", "Notice: Undefined index" et "Notice: Undefined offset"] (https: // stackoverflow.com/questions/4261133/php-notice-undefined-notice-undefined-index-and-notice-undef) – aynber

+0

Vous ne montrez pas les bonnes lignes de signup.php donc nous ne pouvons pas indiquer le problème exact, mais vérifiez le lien dup. – aynber

+0

Désolé, je ne sais pas ce qui s'est passé, j'ai édité le post espérons que cela aide! – Crepi

Répondre

0

Définissez vos variables.

Dans signup.php

$username = $_POST['username']; 

$password = $_POST['password']; 

Placez cette modification juste en dessous du

require('connection.php'); 

également ne pas stocker les mots de passe en texte clair. C'est très dangereux. Utilisation:

password_hash 

Et

password_verify 

EDIT Vous ne liaient pas correctement les espaces réservés. De plus, vous accédez aux mauvaises colonnes. La version modifiée est inférieure à

$statement = $pdo->prepare("INSERT INTO users (user_name, user_password) 
VALUES(:username, :password)"); 
$result = $statement->execute(array(
":username" => $username, //bind placeholders properly 
":password" => $password // bind placeholders properly 
)); 

$statement = null; 
+0

édité le code et maintenant je ne suis pas une erreur, mais rien est entré dans ma base de données: prepare ("INSÉRER INTO utilisateurs (nom d'utilisateur, mot de passe) VALEURS (: nom d'utilisateur,: mot de passe)"); $ resultat = $ statement-> execute (array ( "nom d'utilisateur" => $ nom d'utilisateur, "mot de passe" => $ mot de passe )); $ instruction = null; ?> – Crepi

+0

Vérifiez la mise à jour – Akintunde007

+0

Désolé, qu'avez-vous réellement changé dans la requête elle-même? Je semble l'avoir manqué. EDIT- Peu importe, je vois les deux-points maintenant. Gardez à l'esprit @Crepi vous pouvez simplement faire VALUES (?,?) ', Puis lier avec' execute ([$ username, $ password]) '. Avec PDO, je crois que c'est la façon dont la requête est envoyée à la base de données de toute façon, et c'est plus facile à lire pour moi. – GrumpyCrouton

0

signup.php n'a pas de valeur pour $ nom d'utilisateur ou $ mot de passe. Vous devez ajouter $username = $_POST['username'] et la même chose pour le mot de passe

+0

il le fait dans la question – CptMisery

+0

Salut édité modifié mon code grâce à l'aide, mais maintenant je n'obtiennent pas une erreur, mais rien est mis dans ma base de données: prepare ("INSÉRER INTO utilisateurs (nom d'utilisateur, mot de passe) VALEURS (: nom d'utilisateur,: mot de passe)"); $ resultat = $ statement-> execute (array ( "nom d'utilisateur" => $ nom d'utilisateur, "mot de passe" => $ mot de passe )); $ instruction = null; ?> – Crepi

+0

Il semble que vos noms de colonne de table soient incorrects. La requête tente d'insérer dans le nom d'utilisateur, mais votre question indique que la table a 'user_name'. Vous devez également activer le rapport d'erreurs PDO: https://stackoverflow.com/questions/8776344/how-to-view-query-error-in-pdo-php – CptMisery