Je sollicite votre aide car j'ai un petit problème avec le script PHP que j'ai développé. Alors j'ai mis en place un formulaire HTML où on doit renseigner le nom, prénom etc..
Et j'aimerais que toutes ces informations aillent directement au niveau de ma base de données. Mais je n'y arrive pas et je n'arrive pas à trouver mon erreur non plus.
Si vous pouviez me faire un retour s'il vous plait histoire que je puisse terminer mon projet au plus vite (je suis en stage).
Aprés avoir suivi les tutos, j'ai par la suite installé le serveur WAMP et créé ma base de données sous PHPMyadmin.
Sur mon éditeur de texte notepad++, j'ai développé mon script PHP avec l'extension PDO (comme vous m'aviez conseillé de le faire) mais jusqu'a présent je n'arrive pas à insérer des données au sein de ma base de données (Pas faute d'avoir essayé !!)
Voici le code :
<?php
try
{
//Connexion à MYSQL via PDO sur la base cbb
$bdd = new PDO(mysql:host=localhost;dbname=cbb charset=utf8', 'root', '', array(PDO::ATTR_ERRMODEXCEPTION));
}
catch(Exception $e)
{
//En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
//Insertion de la requête SQL
$req = $bdd->prepare('INSERT INTO cbb VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)')
$req->execute(array($_POST['Nom'], $_POST['Prénom'], $_POST['Statut'], $_POST['Date de Naissance'], $_POST{Date Adhésion'], $_POST['Durée Adhésion'], $_POST['Email'], $_POST['Sexe'], $_POST['Numéro Téléphone']));
?>
Tu ne donnes pas assez d'infos (que fais ton code, des errreurs ?), mais il y a déjà un problème dans ta connexion (manque un point-virgule).
Ensuite, dans ta requête, il faut nommer les colonnes concernées (à moins que ta table soit mal conçue et qu'on ait là toutes les colonnes, mais de toute façon c'est à éviter).
Pour vous répondre : Après avoir rempli le formulaire et cliqué sur le bouton "Ajouter", je suis redirigée vers une page (cbb.php) où il y a l'intégralité de mon code PHP (celui qui est juste au dessus).
Or ce n'est pas cela l'objectif malheureusement.
@philodick : J'ai nommé les colonnes concernées comme tu me l'as conseillé mais toujours la même erreur. Et pourrais tu stp me dire où manque le point-virgule ?
@christouphe : J'ai enlevé les accents sur les noms de champs de $_POST mais toujours la même erreur lol
@philodick : J'ai nommé les colonnes concernées comme tu me l'as conseillé mais toujours la même erreur. Et pourrais tu stp me dire où manque le point-virgule ?
lis l'erreur elle te la donne la ligne ET le nom du script
Voici mon code php un peu revisité (même si ça ne change pas grand chose lol):
<?php
try
{
//connexion à Mysql via PDO sur la base cyber
$bdd = new PDO('mysql:host=localhost;dbname=cyber;charset=utf8', 'root', '', [
PDO::ATTR_ERRMODE =>PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false
]);
}
catch(Exception $e)
{
//En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
$insert = $bdd->prepare('INSERT INTO cyber (Nom, Prénom, Statut, Date_de_Naissance, Date_Adhésion, Durée_Adhésion, Email, Sexe, Numéro_Téléphone) VALUES (:Nom, :Prénom, :Statut, :Date_de_Naissance, :Date_Adhésion, :Durée_Adhésion, :Email, :Sexe, :Numéro_Téléphone)');
$insert->execute(array('Nom' => $_POST['Nom'], 'Prénom' => $_POST['Prénom'], 'Statut' => $_POST['Statut'], 'Date_de_Naissance' => $_POST['Date_de_Naissance'], 'Date_Adhésion' => $_POST['Date_Adhésion'], 'Durée_Adhésion' => $_POST['Durée_Adhésion'], 'Email' => $_POST['Email'], 'Sexe' => $_POST['Sexe'], 'Numéro_Téléphone' => $_POST['Numéro_Téléphone']));
?>
Aprés avoir rempli mon formulaire html, je suis redirigée vers la page cbb.php, au niveau du navigateur, où il y a l'intégralité de mon code ci-dessus (ce qui n'est pas normal) et après consultation de ma base de données, il n'y a rien dans celle-ci bien évidemment
Je ne reçois aussi pas de message d'erreur même après avoir activé les erreurs PDO. Ce qui n'est pas normal encore une fois de plus lol !
P.S : Est ce normal lorsque je tape l'URL http://localhost/cbb.php, on me sort 404 Not Found et truc du genre ??
> il me semble qu'on ta dit de ne pas mettre de caractères accentués dans les noms de table, ni de variables
Ceux des colonnes ne sont pas véritablement un problème tant que le fichier est bien encodé en UTF-8 vu qu'il déclare le jeu de caractères de la connexion PDO/MySQL. Ceux qui ne passeront pas surtout, ce sont au niveau des marqueurs.
Ceux des colonnes ne sont pas véritablement un problème tant que le fichier est bien encodé en UTF-8 vu qu'il déclare le jeu de caractères de la connexion PDO/MySQL.
Au contraire, c'est un problème de mettre des accents ou autres caractères spéciaux dans les noms de colonnes, l'encodage sert uniquement pour les valeurs.
Et puis ça n'a aucun sens de mettre des accents et caractères spéciaux (hormis le underscore) pour les noms de colonnes étant donné que ce n'est pas le genre de chose que l'on compte afficher.
- Edité par Lartak 17 mai 2019 à 1:36:46
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Note que j'ai dit que c'était parfaitement possible, je n'en suis pas à en encourager la pratique (chose que j'évite aussi comme 99% des gens).
Par contre, les marqueurs, sûr et certain que ça ne passe pas : le parser intégré à PDO n'attend que des lettres ASCII pour ceux-ci, il reconnaîtrait encore moins les lettres encodées en UTF-8 (codées sur 2 octets ou plus pour commencer).
J'ai changé complètement mon formulaire et je suis passée sous mysqli_ car se rapprochant beaucoup de l'extension mysql_ avec laquelle j'ai l'habitude de travailler.
En espérant que cela ne pose problème, voici mon code:
<?php
function connectMaBase(){
$conn = mysqli_connect('localhost', 'root', '', 'cyber');
}
//Check for errors
if(mysqli_connect_errno()){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>
Cependant, même si je ne reçois aucune message d'erreur, je n'arrive pas à insérer les données dans la base. J'ai même supprimé ma base de données, ma table pour en refaire une nouvelle, mais cela ne marche toujours pas malheureusement.
Où est la préparation de la requête ou les échappements avec mysqli_real_escape_string : documentes-toi sur les injections SQL, tu ne fais toujours rien pour ne pas en avoir ni ne serait-ce que laisser passer les " (une " dans tes données et ta requête plante lamentablement) ?
Ensuite, il n'y a aucune gestion d'erreur : voir mysqli_error ou mieux mysqli_report.
Quand une requête ne fait rien, c'est qu'elle plante et dans ce cas, on va chercher l'erreur SQL puisque PHP ne les donne JAMAIS par défaut (décidément, on a beau le répéter 10 fois par jour minimum, ça ne rentrera jamais et personne ne doit chercher non plus avant de poster)
EDIT : il faudrait aussi jeter une oeil à la documentation de PHP sur les variables, la partie portée des variables : ta variable $conn n'existe pas en dehors de ta fonction. Je ne comprends même pas que tu ne le vois pas, ça devrait te valoir une notice: undefined variable conn et une erreur fatale (NULL peut difficilement passer par une instance mysqli comme mysqli_query l'attend).
En même temps, si tu définis le même nom à tous tes input de type text, tu ne récupérera la valeur que de l'un d'eux.
Et encore, là tu n'en récupère aucun d'eux, étant donné que dans ton traitement tu utilises des index du tableau $_POST totalement différents de ceux que tu as défini dans ton formulaire.
Au passage, une variable définie dans une fonction, n'est pas accessible depuis l'extérieur de celle-ci, à moins bien sur de la retourner et de la stocker dans une variable lorsque la fonction est appelée (connectMaBase).
- Edité par Lartak 22 mai 2019 à 17:41:02
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
J'ai réédité mon code (pour la énième fois je sais) :
<?php
//On teste si le formulaire a été soumis
if (isset($_POST['cbb']) && ($_POST['cbb']) == 'cbb') {
//On se connecte à la base
$connexion = mysqli_connect('localhost', 'root', '', 'cyber');
//On recherche si l'email est déjà utilisé par un autre membre
$sql = "'SELECT count(*) FROM trappes Email="'.mysqli_escape_string($connexion, $_POST['Email']).'"'";
$rep = mysqli_query($connexion, $sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysqli_error($connexion));
$data = mysqli_fetch_array($rep);
if ($data[0] == 0) {
//On prépare la commande sql d'insertion
$sql = 'INSERT INTO trappes VALUES("", "'.mysqli_escape_string($connexion, $_POST['Civilite']).'", "'.mysqli_escape_string($connexion, $_POST['Nom']).'", "'.mysqli_escape_string($connexion, $_POST['Prenom']).'", "'.mysqli_escape_string($connexion, $_POST['Statut']).'", "'.mysqli_escape_string($connexion , $_POST['DateNaissance']).'", "'.mysqli_escape_string($connexion, $_POST['DateAdhesion']).'", "'.mysqli_escape_string($connexion, $_POST['DureeAdhesion']).'", "'.mysqli_escape_string($connxeion, $_POST['Email']).'", "'.mysqli_escape_string($connexion, $_POST['Sexe']).'", "'.mysqli_escape_string($connexion, $_POST['NumeroTelephone']).'")';
//On envoie la requête
$req = mysqli_query($connexion, $sql) or die('Erreur SQL !'.$sql.'<br />'.mysqli_error($connexion));
echo "Utilisateur ajoute";
}
}
?>
Cette fois-ci, je reçois bien les erreurs (merci beaucoup pour l'astuce mysqli_escape_string et mysqli_error).
La première erreur que je reçois et d'ailleurs je ne comprends pas pourquoi est celle-ci:
Apparemment lorsque j'établis la connexion avec ma base, il n'y a pas de point-virgule à la fin de la ligne de commande. Bon je l'ai supprimé (je ne voyais pas d'autres solutions) et après avoir relancé, une deuxième erreur a été générée :
Pour celle-ci par contre je n'arrive vraiment pas à la résoudre. J'ai essayé d'indiquer un "return $sql" mais même avec cela, ça ne marche pas. Je ne comprends plus et sincèrement je n'arrive plus à beaucoup réfléchir; je suis juste épuisée donc toute aide serait la bienvenue
Et apparemment il y aurait également un problème avec les noms de mes input de type text (qui sont tous les mêmes). Je vais y jeter un coup d’œil et je vous reviens dans les plus brefs délais.
Quant tu as une erreur de syntaxe, tu la corriges, normalement c'est au dessus de la ligne citée, comme dans une dictée à l'école, tu supprime pas la phrase
la seconde découle de la suppression de la ligne en question <=> tu as supprimé le script de connexion à la base.
DONC, je te conseille vivement de poser ce script et d'aller apprendre les base de la programmation + php + inclusion de fichier en php
Insérer des data dans une BDD depuis un formulaire
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Activer les erreurs PDO / (julp) htmlspecialchars / FAQ PHP / Pas d'aide par MP
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
N'oubliez pas d'activer les erreurs PDO.
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
N'oubliez pas d'activer les erreurs PDO.
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Activer les erreurs PDO / (julp) htmlspecialchars / FAQ PHP / Pas d'aide par MP
N'oubliez pas d'activer les erreurs PDO.
Activer les erreurs PDO / (julp) htmlspecialchars / FAQ PHP / Pas d'aide par MP
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales