[RESOLU] script de registration

Petit nouveau ! | 8 Messages

12 sept. 2014, 22:00

salut, j'essaye d’écrire un script pour enregistrer des nouveaux utilisateurs dans ma base de données mais bizarrement ça fonctionne pas.

Nom de base de données: users
Nom du Table: login


page d#inscription:
<html>
<head>
<title> login</title>
</head>
<body>
<form action="checklogin.php" method="post">
<p> Username:</p> 
<input type="text" name="username">
<p> Password:</p>
<input type="password" name="password">
<p> Email:</p>
<input type="text" name="email">
<p> Address:</p>
<input type="text" name="address"></br></br>
<input type="submit" name="register" value="register">
</form>
</body>
</html>
Checklogin.php :
<?php

$con= mysqli_connect('localhost', 'root', '') or die(mysqli_error());
$db= mysqli_select_db(users, $con);
$sql= "INSERT INTO login(username, password, email, address) VALUES ('$_POST['username']', '$_POST['password']', '$_POST['email']', '$_POST['address']')";
$mysqli_query= ($sql,$con);
$mysqli_close($con);

?>


ou es le problème?
j'utilise WAMP server version actuelle

Nestecha
Invité n'ayant pas de compte PHPfrance

13 sept. 2014, 15:28

Y'a pas de mot de passe dans ta base de données ?

Erreur de syntaxe dans le mysqli_select_db :
$db= mysqli_select_db(users, $con);
Doit être :
$db= mysqli_select_db($con, 'users');
Erreur de syntaxe dans ta requête SQL, si tu veux absolument utiliser les $_POST[] dedans, la syntaxe c'est :

{$_POST[user]}
$sql= "INSERT INTO login(username, password, email, address) VALUES ('{$_POST['username']}', '{$_POST['password']}', '{$_POST['email']}', '{$_POST['address']'})";
mais ça te rend vulnérable à des injections SQL, genre très vulnérables, surtout dans ton cas (si c'était pour faire un backoffice tu t'en foutrais, là c'est des utilisateurs donc n'importe qui peut écrire un bout de code dans ton input).

Donc vaut mieux utiliser :
$sql= "INSERT INTO login(username, password, email, address) VALUES (' ". mysql_escape_string('$_POST['username']) ." ', ' ". mysql_escape_string($_POST['password']) ." ', ' " . mysql_escape_string($_POST['email']) ." ', ' " . mysql_escape_string($_POST['address'])." ')";
Ma syntaxe du dessus est peut être pas parfaite j'suis un peu fatigué :D

Nestecha
Invité n'ayant pas de compte PHPfrance

13 sept. 2014, 15:30

Voilà plutôt le bon code, mysql_escape_string est ancien, faut utiliser mysql_real_escape_string !
$sql= "INSERT INTO login(username, password, email, address) VALUES (' ". mysql_real_escape_string($_POST['username']) ." ', ' ". mysql_real_escape_string($_POST['password']) ." ', ' " . mysql_real_escape_string($_POST['email']) ." ', ' " . mysql_real_escape_string($_POST['address'])." ')";

Petit nouveau ! | 8 Messages

13 sept. 2014, 20:17

j'ai changé un peu le code pour être plus lisible, oublions maintenant le SQL Injection, on s'occupera plus tard ;)
le problème est que rien ne se passe dans ma base de données! aucun le moindre changement! comme si il y pas aucune connexion établie!!! c bizarre. même si je change le nom du base de données avec un nom erroné aucune erreur ne s'affiche!

voici le code modifé:
<?php
$username=$_POST['username'];
$password=$_POST['password'];
$email=$_POST['email'];
$address=$_POST['address'];

$con= mysqli_connect('localhost', 'root', '') or die(mysqli_error());
$db= mysqli_select_db($con,users);
$sql= "INSERT INTO login(username, password, email, address) VALUES ('$username', '$password', '$email', '$address')";
$mysqli_query= ($con, $sql);
$mysqli_close($con);

?>
merci ;)

Nestecha
Invité n'ayant pas de compte PHPfrance

13 sept. 2014, 20:39

j'ai changé un peu le code pour être plus lisible, oublions maintenant le SQL Injection, on s'occupera plus tard ;)
le problème est que rien ne se passe dans ma base de données! aucun le moindre changement! comme si il y pas aucune connexion établie!!! c bizarre. même si je change le nom du base de données avec un nom erroné aucune erreur ne s'affiche!

voici le code modifé:
<?php
$username=$_POST['username'];
$password=$_POST['password'];
$email=$_POST['email'];
$address=$_POST['address'];

$con= mysqli_connect('localhost', 'root', '') or die(mysqli_error());
$db= mysqli_select_db($con,users);
$sql= "INSERT INTO login(username, password, email, address) VALUES ('$username', '$password', '$email', '$address')";
$mysqli_query= ($con, $sql);
$mysqli_close($con);

?>
merci ;)
$db= mysqli_select_db($con,users);
Tu as ré écris cette ligne de la mauvaise façon, c'est 'users' (une string).

Je n'utilise pas mysqli, plutôt PDO, mais ça me semble étrange d'écrire :
$con= mysqli_connect('localhost', 'root', '') or die(mysqli_error());
J'aurais plutôt écrit :
$con= mysqli_connect('localhost', 'root') or die(mysqli_error());
En fait, même ça ça me semble étrange. mysqli_select_db est censé être utilisée juste pour changer la DB par défaut de mysqli_connect, mais là y'en a même pas.

Donc essaie plutôt d'utiliser QUE mysqli_connect, avec la syntaxe suivante :
$con = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');

Nestecha
Invité n'ayant pas de compte PHPfrance

13 sept. 2014, 20:44

LOL j'suis vraiment fatigué, évidemment qu'il ne se passera strictement rien, la ligne suivante :
$mysqli_query= ($con, $sql);


n'accomplit RIEN !

Il faut plutôt écrire :
$sQuery = mysqli_query($con, $sql);
pour que la requête se lance :)

Petit nouveau ! | 8 Messages

17 sept. 2014, 01:12

merci pour la réponse, oui j'ai corrigé l'erreur mais WAMP que j'utilise ne fonctionne pas proprement alors j'utilise maintenant XAMPP.
le code suivant résulte le message suivant : Input data is fail

Base de données : mybase
table: mytable
<?php

$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$address = $_POST['address'];



$con= mysqli_connect('localhost', 'root', '') or die(mysqli_error($con));
$db= mysqli_select_db($con, 'mybase') or die(mysqli_error($con));;
$sql = "INSERT INTO mytable('username', 'password', 'email', 'address') VALUES ('$username', '$password', '$email', '$address')";
$result=mysqli_query($con, $sql);
if($result){
echo "Input data is succeed";
} else{
echo "Input data is fail";
}
mysqli_close($con);
 
?>


pourquoi je peux pas passer ces informations dans ma base de données?

PS: j'utilise Notepad++ comme éditeur, mais les noms de ma base de données et la table sont soulignés en rouge!

ViPHP
xTG
ViPHP | 7331 Messages

17 sept. 2014, 07:47

Dans ton else, affiches le retour de mysqli_error. ;)

Petit nouveau ! | 8 Messages

17 sept. 2014, 18:01

et comment puis je faire ca? simplement ajouter un sql exception dans la clause Else?

ViPHP
xTG
ViPHP | 7331 Messages

17 sept. 2014, 19:00

Tu peux utiliser le même principe que pour le mysqli_select_db. :)

Petit nouveau ! | 8 Messages

17 sept. 2014, 19:59

je suis pas certain d'avoir comprendre :)
pourrais tu me montrer un exemple? :)

ViPHP
xTG
ViPHP | 7331 Messages

17 sept. 2014, 20:27

Repris de ton propre code :
$db= mysqli_select_db($con, 'mybase') or die(mysqli_error($con));

Petit nouveau ! | 8 Messages

17 sept. 2014, 20:40

J'ai trouvé la solution, il fallait que j’élimine les guillemets dans les champs du ma table :
$sql = "INSERT INTO mytabe(username,password,email,address) VALUES ('$username','$password','$email','$address')";
merci ;)