Problème de code php
Résolu
Julien
-
Julien -
Julien -
Bonjour,
Voilà, j'ai un petit problème, toutes les parties de mon code fonctionnent sauf une: la partie des champs manquant: quand les champs ne sont pas remplis, le message d'erreur s'affiche bien mais le reste des infos sont quand même envoyés à ma BDD.
Voici le code: (partie défectueuse soulignée)
<?php
// Paramètres persos
$host = "localhost"; // hébergeur
$user = "*******"; // utilisateur
$pass = "*******"; // mot de passe
$bdd = "ancestra_other"; // nom de la BDD
// connexion
@mysql_connect($host,$user,$pass)
or die("Service temporairement inaccessible. Veuillez le signaler à l'administrateur général");
@mysql_select_db("$bdd")
or die("Service temporairement inaccessible. Veuillez le signaler à l'administrateur général");
// récupérer les champs
if(isset($_POST['nom'])) $nom=$_POST['nom'];
else $nom="";
if(isset($_POST['pass'])) $pass=$_POST['pass'];
else $pass="";
if(isset($_POST['classe'])) $classe=$_POST['classe'];
else $classe="";
if(isset($_POST['serveur'])) $serveur=$_POST['serveur'];
else $serveur="";
// On vérifie si les champs sont vides
if(empty($nom) OR empty($pass))
{
echo '<font color="red">Veuillez remplir tous les champs.</font>';
}
// on regarde si l'info existe déjà
$sql = "SELECT id FROM service_classe WHERE nom='$nom'";
$req = mysql_query($sql) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql.'<br>'.mysql_error());
// on compte le nombre de résultats
$res = mysql_num_rows($req);
if($res!=0) // l'info existe déjà, on affiche un message d'erreur
{
echo '<center><font color="red">Vous avez déjà validé ce service avec ce compte, veuillez attendre une semaine avant de pouvoir l\'activer de nouveau.</font></center>';
}
// on vérifie si l'utilisateur existe
$sql2 = "SELECT guid FROM accounts WHERE account='$nom'";
$req2 = mysql_query($sql2) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql2.'<br>'.mysql_error());
// on compte le nombre de résultats
$res2 = mysql_num_rows($req2);
if($res2!=1) // l'utilisateur n'existe pas, on affiche un message d'erreur
{
echo '<center><font color="red">Ce nom de compte n\'existe pas!</font></center>';
}
// on vérifie si le mot de passe existe
$sql3 = "SELECT guid FROM accounts WHERE pass='$pass'";
$req3 = mysql_query($sql3) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql3.'<br>'.mysql_error());
// on compte le nombre de résultats
$res3 = mysql_num_rows($req3);
if($res3!=1) // le mot de passe n'existe pas, on affiche un message d'erreur
{
echo '<center><font color="red">Ce mot de passe n\'existe pas!</font></center>';
}
// Aucun champ n'est vide, on peut enregistrer dans la table
else
{
// Requete d'insertion MYSQL
$requete = "INSERT INTO service_classe (id, nom, pass, classe, serveur) VALUES ('','$nom','$pass','$classe','$serveur')";
// on insère les informations du formulaire dans la table
mysql_query($requete) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql.'<br>'.mysql_error());
// on affiche le résultat pour le visiteur
echo "Vos infos on été ajoutées.";
}
?>
Merci d'avance pour votre aide,
Julien
Voilà, j'ai un petit problème, toutes les parties de mon code fonctionnent sauf une: la partie des champs manquant: quand les champs ne sont pas remplis, le message d'erreur s'affiche bien mais le reste des infos sont quand même envoyés à ma BDD.
Voici le code: (partie défectueuse soulignée)
<?php
// Paramètres persos
$host = "localhost"; // hébergeur
$user = "*******"; // utilisateur
$pass = "*******"; // mot de passe
$bdd = "ancestra_other"; // nom de la BDD
// connexion
@mysql_connect($host,$user,$pass)
or die("Service temporairement inaccessible. Veuillez le signaler à l'administrateur général");
@mysql_select_db("$bdd")
or die("Service temporairement inaccessible. Veuillez le signaler à l'administrateur général");
// récupérer les champs
if(isset($_POST['nom'])) $nom=$_POST['nom'];
else $nom="";
if(isset($_POST['pass'])) $pass=$_POST['pass'];
else $pass="";
if(isset($_POST['classe'])) $classe=$_POST['classe'];
else $classe="";
if(isset($_POST['serveur'])) $serveur=$_POST['serveur'];
else $serveur="";
// On vérifie si les champs sont vides
if(empty($nom) OR empty($pass))
{
echo '<font color="red">Veuillez remplir tous les champs.</font>';
}
// on regarde si l'info existe déjà
$sql = "SELECT id FROM service_classe WHERE nom='$nom'";
$req = mysql_query($sql) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql.'<br>'.mysql_error());
// on compte le nombre de résultats
$res = mysql_num_rows($req);
if($res!=0) // l'info existe déjà, on affiche un message d'erreur
{
echo '<center><font color="red">Vous avez déjà validé ce service avec ce compte, veuillez attendre une semaine avant de pouvoir l\'activer de nouveau.</font></center>';
}
// on vérifie si l'utilisateur existe
$sql2 = "SELECT guid FROM accounts WHERE account='$nom'";
$req2 = mysql_query($sql2) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql2.'<br>'.mysql_error());
// on compte le nombre de résultats
$res2 = mysql_num_rows($req2);
if($res2!=1) // l'utilisateur n'existe pas, on affiche un message d'erreur
{
echo '<center><font color="red">Ce nom de compte n\'existe pas!</font></center>';
}
// on vérifie si le mot de passe existe
$sql3 = "SELECT guid FROM accounts WHERE pass='$pass'";
$req3 = mysql_query($sql3) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql3.'<br>'.mysql_error());
// on compte le nombre de résultats
$res3 = mysql_num_rows($req3);
if($res3!=1) // le mot de passe n'existe pas, on affiche un message d'erreur
{
echo '<center><font color="red">Ce mot de passe n\'existe pas!</font></center>';
}
// Aucun champ n'est vide, on peut enregistrer dans la table
else
{
// Requete d'insertion MYSQL
$requete = "INSERT INTO service_classe (id, nom, pass, classe, serveur) VALUES ('','$nom','$pass','$classe','$serveur')";
// on insère les informations du formulaire dans la table
mysql_query($requete) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql.'<br>'.mysql_error());
// on affiche le résultat pour le visiteur
echo "Vos infos on été ajoutées.";
}
?>
Merci d'avance pour votre aide,
Julien
3 réponses
-
oui car entrer la chaine vide ne suffit par a supprimer une variable, il faut utiliser la fonction
unset($nom);
-
Bonjour,
"quand les champs ne sont pas remplis, le message d'erreur s'affiche bien mais le reste des infos sont quand même envoyés à ma BDD"
parce que selon votre code, l'insertion des données dans la base est indépendante de votre test sur le remplissage des champs.
il faut que vous procéder de la manière suivante:
if(champs vides) { // message d'erreur } else { // les sont champs sont remplis, insertion des données dans la BDD }
essayez donc le code suivant:
<?php // Paramètres persos $host = "localhost"; // hébergeur $user = "*******"; // utilisateur $pass = "*******"; // mot de passe $bdd = "ancestra_other"; // nom de la BDD // connexion @mysql_connect($host,$user,$pass) or die("Service temporairement inaccessible. Veuillez le signaler à l'administrateur général"); @mysql_select_db("$bdd") or die("Service temporairement inaccessible. Veuillez le signaler à l'administrateur général"); // récupérer les champs if(isset($_POST['nom'])) $nom=$_POST['nom']; else $nom=""; if(isset($_POST['pass'])) $pass=$_POST['pass']; else $pass=""; if(isset($_POST['classe'])) $classe=$_POST['classe']; else $classe=""; if(isset($_POST['serveur'])) $serveur=$_POST['serveur']; else $serveur=""; // On vérifie si les champs sont vides if(empty($nom) OR empty($pass)) { // champs vides => message d'erreur echo '<font color="red">Veuillez remplir tous les champs.</font>'; } else { // les champs ne sont pas vides => on regarde si l'info existe déjà $sql = "SELECT id FROM service_classe WHERE nom='$nom'"; $req = mysql_query($sql) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql.'<br>'.mysql_error()); // on compte le nombre de résultats $res = mysql_num_rows($req); if($res!=0) { // l'info existe déjà, on affiche un message d'erreur echo '<center><font color="red">Vous avez déjà validé ce service avec ce compte, veuillez attendre une semaine avant de pouvoir l\'activer de nouveau.</font></center>'; } else { // on vérifie si l'utilisateur existe $sql2 = "SELECT guid FROM accounts WHERE account='$nom'"; $req2 = mysql_query($sql2) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql2.'<br>'.mysql_error()); // on compte le nombre de résultats $res2 = mysql_num_rows($req2); if($res2!=1) { // l'utilisateur n'existe pas, on affiche un message d'erreur echo '<center><font color="red">Ce nom de compte n\'existe pas!</font></center>'; } else { // on vérifie si le mot de passe existe $sql3 = "SELECT guid FROM accounts WHERE pass='$pass'"; $req3 = mysql_query($sql3) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql3.'<br>'.mysql_error()); // on compte le nombre de résultats $res3 = mysql_num_rows($req3); if($res3!=1) { // le mot de passe n'existe pas, on affiche un message d'erreur echo '<center><font color="red">Ce mot de passe n\'existe pas!</font></center>'; } else { // Aucun champ n'est vide, => Requête d'insertion MYSQL $requete = "INSERT INTO service_classe (id, nom, pass, classe, serveur) VALUES ('','$nom','$pass','$classe','$serveur')"; // on insère les informations du formulaire dans la table mysql_query($requete) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql.'<br>'.mysql_error()); // on affiche le résultat pour le visiteur echo "Vos infos on été ajoutées."; } } } } ?>
Remarque:
- vous testez le compte et le mot de passe indépendamment, donc si le mot de passe existe, comment vous savez qu'il correspond à ce compte. je pense qu'il vaut mieux faire:$sql = "SELECT guid FROM accounts WHERE account='$nom' AND pass='$pass'";
- code mal sécurisé, faites attention aux injections sql, il faut traiter les données avant de les utiliser dans les requêtes.
bonne chance. -
Merci à vous, mon problème est résolu.
Pour ce qui est de la sécurité, je n'allais pas l'oublié, je test juste les fonctionnalités de mon code petit à petit, car je ne suis pas vraiment un pro en php ^^