Привет всем, во-первых, извините, мой английский не очень хороший, поэтому я пытаюсь отправить через форму запроса в моей базе данных, но у меня все еще та же ошибка. Кто-нибудь может мне помочь, пожалуйста
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-инъекция.
3. Третья проблема:
После вызова заголовка перенаправления всегда используйте выход или умри, например:
header('Location: postedecontrole.php');
exit;
В противном случае ваши аутентифицированные страницы могут быть просмотрены кем-то, кто не аутентифицирован.