Problème de code php

Résolu
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

A voir également:

3 réponses

ktm620enduro Messages postés 293 Date d'inscription   Statut Membre Dernière intervention   38
 
oui car entrer la chaine vide ne suffit par a supprimer une variable, il faut utiliser la fonction
unset($nom);
0
kadeh Messages postés 334 Date d'inscription   Statut Membre Dernière intervention   92
 
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.
0
Julien
 
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 ^^
0