Bonjour,
Voila je rencontre un problème avec mon code , j'arrive pas à inserer les données dans ma BD .
J'ai un bouton nommé 'D' , aprés le clique sur ce bouton un formulaire s'affiche dans la même page pour remplir les infos necéssaires , et ensuite insérer ces données dans une table nommée, mais je sais pourqoui l'insertion ne l'insertion ne ça se fait pas.
Pouvez -vous m'aider s'ils vous plaît , j'arrive pas à trouver l'erreur.
Décrivez ici votre code ou ce que vous cherchez à faire
echo'<form method="post" action="admin.php">
<input type="hidden" name="ok" value="ok" />
<input type="submit" name="D" value="Demande une formation" /></form>'
__________________________________________
<?php
if(isset($_POST["D"]))
{
echo'<center><h2> Demander une formation</h2></center>
<center><form method"post" class="pure-form">
<fieldset>
<legend>Veuillez indiquer les information ci-dessus</legend>
Nom: <input type="text" placeholder="Nom" name="Nom"><br/><br/>
Fonction:<input type="text" placeholder="Fonction" name="Fonction"><br/><br/>
Service:<input type="text" placeholder="Service" name="Service"><br/><br/>
Description: <input type="text" placeholder="Description" name="Description"><br/><br/>
<button type="submit" class="pure-button pure-button-primary" name="Sign in">Sign in</button>
</fieldset>
</form></center>';}
$conn=new PDO('mysql:host=localhost;dbname=sfe2','root','');
if(isset($_POST['Nom'])&& isset($_POST['Fonction']) && isset($_POST['Service']) && isset($_POST['Description'])&& isset($_POST['Sign in'])){
$req="INSERT INTO demande VALUES ('".$_POST['Nom']."','".$_POST['Fonction']."','".$_POST['Service']."','".$_POST['Description']."')";
$result=$conn->exec($req);}
?>
Ma table demande:
demande(id_demande(auto_increment),Nom,Fonction,Service,Description).
Merci d'avance.
Bonjour.
Tu devrais penser à debuguer ton code et si tu n'as pas recopier ton code exactement comme tu l'as en local, fais le immédiatement.
Ensuite; tu devrais éviter de mettre des espaces dans les noms des champs d'un formulaire.
Si je comprend bien, le premier formulaire est sur une autre page, c'est ça ?
Tu devrais faire attention quand tu codes, car dans ton second formulaire, tu définies mal tes attributs html : <form method"post" class="pure-form">
, il manque le signe =
pour l'attribut method.
Pour terminer, tu devrais revoir la syntaxe pour un INSERT.
Salut,
tu devrais éviter de mettre des espaces dans les noms des champs d'un formulaire.
Absolument !
Et moins important, mais tant qu'a faire,
ne leur mets pas de majuscules non plus.
Aussi,
pour la requête INSERT
, il manque les champs de la table avant les "VALUES
".
Et ce n'est pas ça qui fait que ton code plante mais,
ça ne sert à rien de faire des isset(...)
sur les name
de ton form
, ça retourne toujours TRUE.
J'imagine que tu veux mettre !empty(...)
à la place.
Par contre si tu mets des !empty(...)
, c'est bien de laisser les isset(...)
pour éviter les bugs.
if (isset($_POST['nom']) && !empty($_POST['nom'] &&
isset($_POST['fonction']) && !empty($_POST['fonction'] &&
isset($_POST['service']) && !empty($_POST['service'] &&
isset($_POST['description']) && !empty($_POST['description'] &&
isset($_POST['sign_in']) && !empty($_POST['sign_in'])
{
...
}
La chose la plus grave celon moi est :
$req="INSERT INTO demande VALUES ('".$_POST['Nom']."','".$_POST['Fonction']."','".$_POST['Service']."','".$_POST['Description']."')";
$result=$conn->exec($req);}
Tu est sensible à une injection SQL tel que "description vaut :
$_POST['Description'] = "blabla); INSERT into user VALUE('hacker','hacker','ROLE_ADMIN')";
Cela est un exemple, mais virtuellement tu peux imaginer ajouter un nouvel utilisateur non voulu dans la table utilisateur avec pour role ADMIN.
préfère les requêtes préparé tel quel :
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
@yanis-git , ou virer tous les users :D
c'est plus chaud la :D
$_POST['Description'] = "blabla); DELTE user WHERE ID>0;
@SLK, depuit PHP 5.5 empty = isset ;)
Aucune alerte n'est générée si la variable n'existe pas. Cela signifie que empty() est strictement équivalent à !isset($var) || $var == false.
@plus
Pierre
Bonjour,
vraiment je savais pas que j'ai commis toutes ces erreurs , dans une seule requête c'est embarassant
@Lartak , non le premier formulaire est dans la même page aussi , et pour les espaces je l'ai enlevé , aussi pour les majuscules.
@yanis-git , merci pour la remaque importante, je savais pas cette méthode de préparer les requêtes , je l'appliquerai pour tout mon code maintenant, Merci beaucoup
@SLK, depuit PHP 5.5 empty = isset ;)
Non.
empty($var)
équivalent à !isset($var) || $var == false
DONC
empty = isset
???
du coup,
isset, c'est comme : !isset($var) || $var == false
???
Juste : Non.
Si tu travail sur une variable $_POST
qui existe, et qui est remplie :
isset renverra TRUE
empty renverra FALSE
Si tu travail sur une variable $_POST
qui existe, et qui n'est pas remplie :
isset renverra TRUE
empty renverra TRUE
Si tu travail sur une variable $_POST
qui existe n'existe pas :
isset renverra FALSE
empty renverra TRUE, et génèrera une erreur, en disant que la variable n'est pas définie.
Bref,
pas du tout le même comportement,
pas la même chose.