0

hello everyone, first of all sorry my English is not very good, so here I try to send through a request form in my database but I still have the same error. Can somebody help me please

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1

 <?php include('head.php'); ?>
            <?php

            //connexion à la base de données:
            $BDD = array();
            $BDD['host'] = "localhost";
            $BDD['user'] = "root";
            $BDD['pass'] = "";
            $BDD['db'] = "domoserre";
            $mysqli = mysqli_connect($BDD['host'], $BDD['user'], $BDD['pass'], $BDD['db']);
            if(!$mysqli) {
                echo "Connexion non établie.";
                exit;
            }

                //création automatique de la table membres, une fois créée, on peux supprimer les lignes de code suivantes:

                //echo mysqli_query($mysqli,"CREATE TABLE IF NOT EXISTS `".$BDD['db']."`.`membres` ( `id` INT NOT NULL AUTO_INCREMENT , `pseudo` VARCHAR(25) NOT NULL , `mdp` CHAR(32) NOT NULL , PRIMARY KEY (`id`)) ENGINE = MyISAM;")?"Table membres créée avec succès, vous pouvez maintenant supprimer la ligne ". __LINE__ ." de votre fichier ". __FILE__ ."!":"Erreur création table membres: ".mysqli_error($mysqli);


            //par défaut, on affiche le formulaire (quand il validera le formulaire sans erreur avec l'inscription validée, on l'affichera plus)
            $AfficherFormulaire=1;
            //traitement du formulaire:
            if(isset($_POST['pseudo'],$_POST['mdp'],$_POST['mail'])){//l'utilisateur à cliqué sur "S'inscrire", on demande donc si les champs sont défini avec "isset"
                if(empty($_POST['mail'])){//le champ mail est vide
                    echo '<a id="annotation">le champ mail est vide.</a>';
                } elseif(empty($_POST['pseudo'])){//le champ pseudo est vide, on arrête l'exécution du script et on affiche un message d'erreur
                    echo '<a id="annotation">le champ pseudo est vide.</a>';
                } elseif(!preg_match("#^[a-z0-9]+$#",$_POST['pseudo'])){//le champ pseudo est renseigné mais ne convient pas au format qu'on souhaite qu'il soit, soit: que des lettres minuscule + des chiffres (je préfère personnellement enregistrer le pseudo de mes membres en minuscule afin de ne pas avoir deux pseudo identique mais différents comme par exemple: Admin et admin)
                    echo '<a id="annotation">Le Pseudo doit être renseigné en lettres minuscules sans accents, sans caractères spéciaux.</a>';
                } elseif(strlen($_POST['pseudo'])>15){//le pseudo est trop long, il dépasse 25 caractères
                    echo '<a id="annotation">Le pseudo est trop long, il dépasse 15 caractères.</a>';
                } elseif(empty($_POST['mdp'])){//le champ mot de passe est vide
                    echo '<a id="annotation">Le champ Mot de passe est vide.</a>';
                } elseif(mysqli_num_rows(mysqli_query($mysqli,"SELECT * FROM membres WHERE pseudo='".$_POST['pseudo']."'"))==1){//on vérifie que ce pseudo n'est pas déjà utilisé par un autre membre
                    echo '<a id="annotation">Ce pseudo est déjà utilisé.</a>';
                } elseif(mysqli_num_rows(mysqli_query($mysqli,"SELECT * FROM membres WHERE mail='".$_POST['mail']."'"))==1){//on vérifie que ce mail n'est pas déjà utilisé par un autre membre
                    echo '<a id="annotation">Ce mail est déjà utilisé.</a>';
                } else {

                    // INSERT INTO membres VALUES('', 'mail', 'pseudo', 'mdp', NOW);
                    if(!mysqli_query($mysqli,"INSERT INTO membres SET pseudo='".$_POST['pseudo']."',mail='".$_POST['mail']."', mdp='".md5($_POST['mdp'])."'," )){
                        echo 'Une erreur s est produite: '.mysqli_error($mysqli);
                    } else {
                        echo '<a id=annotation>Vous êtes inscrit avec succès!</a>';
                        header('Location: postedecontrole.php');
                    }
                }
            }
            ?>

            if($AfficherFormulaire==1){
                <h1>INSCRIPTION</h1>
                <form method='post' id='formulaireinscription' action='inscription.php'>

                    Email : <input type='text' name='mail'>    

                    Pseudo : <input type='text' name='pseudo'>

                    Mot de passe : <input type='password' name='mdp'>

                    <input type='submit' value='S inscrire'>
                </form>
                                            }
            }

1 Answer 1

1

1. First problem:

if(!mysqli_query($mysqli,"INSERT INTO membres SET pseudo='".$_POST['pseudo']."',mail='".$_POST['mail']."', mdp='".md5($_POST['mdp'])."'," )){

should be

if(!mysqli_query($mysqli,"INSERT INTO membres SET pseudo='".$_POST['pseudo']."',mail='".$_POST['mail']."', mdp='".md5($_POST['mdp'])."'" )){

The problem was that you are ending a query with a comma.

2. Second problem:

Your code is vulnerable to MySQL injection.

3. Third problem:

After calling a redirect header, always use exit or die, like this:

header('Location: postedecontrole.php');
exit;

Otherwise, your authenticated pages might be viewed by someone that is not authenticated.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.