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
A voir également:
- Problème de code php
- Code ascii - Guide
- Code de déverrouillage oublié - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
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:
essayez donc le code suivant:
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:
- 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.
"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.