Problème de code php
Résolu
Julien
-
Julien -
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.