php - 在 php 中向我的数据库发送请求

标签 php mysql

大家好,首先抱歉,我的英语不是很好,所以在这里我尝试通过我的数据库中的请求表单发送,但我仍然有同样的错误。有人可以帮我吗

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。第一个问题:

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

应该是

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

问题在于您以逗号结束查询。

<强>2。第二个问题:

您的代码容易受到 MySQL injection 的攻击.

<强>3。第三个问题:

调用重定向 header 后,始终使用 exitdie ,像这样:

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

否则,未经身份验证的人可能会查看您经过身份验证的页面。

关于php - 在 php 中向我的数据库发送请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50250217/

相关文章:

php - ajax不向php发送数据

php - Laravel 5 如何在 select 子句中使用 Carbon 转换日期相关列?

MySql 和 Entity Framework 6

php - Heroku PHP 和 Apache dyno 崩溃并出现错误 H10

php - 为什么这个随机字符串生成器的性能这么差?

php - 将 '&' 字符串从 xcode 传递到 php?

php - 我想在我的网站上添加一些检测;这些是好的选择吗?

php - 基于导航菜单ajax加载json/mysql内容列表?

mysql - 如何输出第二天的日期时间

mysql - 我在mysql中尝试了这段代码,但它是行操作,如何插入按列数据