IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Insertion requête indésirable [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut Insertion requête indésirable
    Voici ma page de traitement d'inscription à mon site


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    <?php 
    	session_start();
    	$log=$_POST['Pseudo'];
    	$mdp=$_POST['password'];
    	$mail=$_POST['mail'];
        $langue=$_COOKIE['langue'];
    	//connection base
    	require_once("./../BD/connect.php"); //inclusion du fichier connect.php	 
     
        $connexion = mysqli_connect(SERVEUR,NOM,PASSE,BASE);
    	if(!$connexion) //si erreur
        {
        	if($_COOKIE['langue']=="French"){
            	echo "Désolé, connexion à ".SERVEUR." temporairement impossible !";
            	echo "Essayez plus tard !";
            }
            if($_COOKIE['langue']=="English"){
            	echo "Sorry, connection to ".SERVEUR." isn't available for the moment !";
            	echo "Try later !";
            }
        }		  
     
        //CONNEXION OK
        $requete="select pseudo from Utilisateur "; 
        $resultat=mysqli_query($connexion,$requete);
        while($emp=mysqli_fetch_assoc($resultat))
    	{
    		if($emp['pseudo']==$log){
    			$_SESSION['wrongUser']=$log;
    			header('Location: inscription.php');
    			//si pseudo déjà pris on repart à l'inscription
    		}
    	}
    	//on s'inscrit si pseudo libre
    	$inscription="insert into Utilisateur(pseudo,mdp,mail,langue,avatar,nbFile,nbCom) values 
        ('$log','$mdp','$mail','$langue','',0,0)";
     
        $resultat=mysqli_query($connexion,$inscription) or die ('Erreur SQL ! <br />'.mysqli_error());
    ?>
    Je vous explique le problème.

    Lorsque je veux m'inscrire, je vérifie si le pseudo est déjà existant dans la base.
    Si c'est le cas je redirige l'utilisateur vers ma page d'inscription.
    Et si ce n'est pas le cas j'inscris l'utilisateur.


    D'un point de vue utilisateur ça semble fonctionner, mais en faisant des test j'ai vu des anomalies dans ma base.
    Lorsqu'un utilisateur tente de s'inscrire avec un pseudo déjà attribué, il est bien redirigé avec le header sur la page d'inscription MAIS l'insertion des données se font quand même dans la base...sa voudrait dire que le header ne stoppe pas le traitement de la page et je trouve ça vraiment bizarre...alors je pourrais régler le problème avec une simple variable fonctionnant comme un bool mais..j'ai l'impression que ça ne ferait que cacher un problème que je ne vois pas...


    EDIT: Je viens tout juste de faire migrer de my_sql à my_sqli, donc si vous voyez des problèmes liés à ce genre de fonction dans le code, j'aimerais bien savoir aussi

    En outre il y a un truc que je ne comprends pas, sous my sql, pour vérifier la connexion j'aurais eu un truc de ce style là


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    $connexion = mysql_pconnect(SERVEUR,NOM,PASSE);
    	if(!$connexion) //si erreur
        {
        	if($_COOKIE['langue']=="French"){
            	echo "Désolé, connexion à ".SERVEUR." temporairement impossible !";
            	echo "Essayez plus tard !";
            }
            if($_COOKIE['langue']=="English"){
            	echo "Sorry, connection to ".SERVEUR." isn't available for the moment !";
            	echo "Try later !";
            }
        }  
        if(!mysql_select_db(BASE,$connexion))	//si erreur connexion à la base	   
    	{
    		if($_COOKIE['langue']=="French"){
            	 echo "Désolé, accès à la base ".BASE."impossible";
            	 echo "Essayez plus tard !";
            	 exit;
            }
            if($_COOKIE['langue']=="English"){
            	 echo "Sorry, access to the database ".BASE."isn't available for the moment !";
            	 echo "Try later !";
            	 exit;
            }
        }
    En fait, je pouvais déterminer si l'erreur provenait du serveur ou de la base en elle même...avec my sqli cette distinction me semble impossible à faire et je trouve ça pas très cool...ou alors j'ai oublié un truc je ne sais pas..

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Je te propose d'ajouter un exit juste après le header, histoire d'être sûr qu'il fait rien d'autre après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header('Location: inscription.php');
    exit(0);
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Par défaut
    Bonne réponse de Celira, néanmoins pense à changer ton mysql par un mysqli ou PDO.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut
    Citation Envoyé par guibalg Voir le message
    Bonne réponse de Celira, néanmoins pense à changer ton mysql par un mysqli ou PDO.


    C'est déjà sous mysqli...


    Sinon, je trouve quand même cela bizarre qu'il faille un exit alors que la fonction header est censé stoppé la lecture de ma page...mais bon soit.

  5. #5
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Citation Envoyé par Amnael Voir le message
    e trouve quand même cela bizarre qu'il faille un exit alors que la fonction header est censé stoppé la lecture de ma page...
    non non header ne fait qu'écrire une ligne de texte dans l'entête http, php n’interprète pas cette chaine envoyée donc le code continue. C'est uniquement coté client que ton navigateur l'interprète.

    -----------------------------
    sinon,
    il n'y a dans ton code aucune protection, tu envois directement la variable post dans les tables et le mot de passe est en clair

  6. #6
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut
    Ok d'accord merci !


    Du coup, est ce que ça veut dire que on peut faire du pseudo parallélisme grâce aux headers ? J'entends par là exécuter du code serveur et client en même temps plutôt qu'en séquence

    il n'y a dans ton code aucune protection, tu envois directement la variable post dans les tables et le mot de passe est en clair
    Comment peut-on remédier à un ce problème ? Je pensais que le fait de mettre un champ password était suffisant au niveau du form.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PDO] Erreur insert requêtes préparées
    Par Invité dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 13/03/2014, 12h00
  2. Problème insertion requête
    Par Ercan67000 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 09/01/2012, 14h21
  3. [insert] requête d'insertion
    Par mr-ti dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 17/03/2009, 00h26
  4. Insert requête avec des \
    Par hojsimposn dans le forum MySQL
    Réponses: 2
    Dernier message: 16/02/2009, 08h38
  5. [Debutant]Problème Insertion Requête dans un StringGrid
    Par ghan77 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/12/2005, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo