insertion de donnee dans la bdd mysql
- Accueil
- Forum
- Discussions
- Divers
- insertion de donnee dans la bdd mysql
alandebcod Le 22 novembre 2020 Ă 17:57 (ĂditĂ© le 1 janvier 1970 Ă 01:00)
PrimFX Le 22 novembre 2020 Ă 19:28 (ĂditĂ© le 1 janvier 1970 Ă 01:00)
Hello @alandebcod,
Juste une petite remarque : n'hĂ©site pas Ă utiliser les balises de code de l'Ă©diteur du forum pour publier des blocs de PHP (ou autre langage), c'est un peu plus pratique Ă lire que des captures d'Ă©cran 😉
Je remarque deux points Ă corriger dans ta requĂȘte SQL :
- Il y a une virgule en trop aprĂšs
modele_vt
- Les
?
devraient ĂȘtre utilisĂ©s dans la requĂȘte SQL sans guillemets
Voici Ă quoi ressemble la requĂȘte "dĂ©bugguĂ©e" :
"INSERT INTO voitures (marques_vt, modele_vt) VALUES (?, ?)"
Tu peux Ă©galement afficher les erreurs liĂ©es Ă ta requĂȘte en ajoutant quelques paramĂštres lors de la connexion Ă ta base de donnĂ©es :
$bdd = new PDO("mysql:host=127.0.0.1;dbname=test", "alan", "", [
PDO::ATTR_EMULATE_PREPARES=>false,
PDO::MYSQL_ATTR_DIRECT_QUERY=>false,
PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION
]);
Ăa te donnera peut-ĂȘtre davantage d'informations sur la provenance de l'erreur !
N'hésite pas également à envoyer une capture d'écran de la structure de ta table "voitures" : il se peut qu'un champ obligatoire (i.e. not null
) ou juste une faute de frappe empĂȘche ta requĂȘte de fonctionner correctement.
En espérant avoir pu t'aider,
A bientĂŽt,
Boris ('PrimFX')
alandebcod Le 22 novembre 2020 Ă 19:31 (ĂditĂ© le 1 janvier 1970 Ă 01:00)
ok je vais essayer deja ce que tu as dit merci ;)
alandebcod Le 22 novembre 2020 Ă 19:43 (ĂditĂ© le 22 novembre 2020 Ă 20:55)
une chose que je n arrive pas a conprendre dans la requete sql il faut mettre le nom qu il ya dans la base de donnee ou le nom donee a l input
voici mon code complet
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://ajax.googleapi.com/ajax.libs/jquery/1.11.3/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcnd.com/bootstrap/jquery/3.3.6/js/bootstrap.min.js"></script>
<link rel = "stylesheet" href="styles.css">
<meta charset="utf-8">
<title>voitures</title>
</head>
<body>
<h3><script type="text/javascript" src="date_heure.js"></script></h3>
<h3>voiture faite:</h3>
<a href="base.php">liste de voiture finit</a>
<form method="POST">
<strong>rechercher une voiture:</strong><input type="search" name="bar" placeholder="recherche une voiture"/>
<a href="" class="btn"><span class = "glyphicon glyphicon-ok"></span>valider</a>
</form>
<form method="POST" action="resultat.php">
<div class="identifiant-vehicule">
<p>marques:<input type="text" name="marque_du_vehicule"></p>
<p>modele:<input type="text" name="modele"></p>
<p>VIN:<input type="text" name="VIN"></p>
<p>kilometrage:<input type="text" name="kilometrage"></p>
<p>1er mise en circulation:<input type="text" name="premiere_mise_en_circulation"></p>
<p>immatriculation:<input type="text" name="immatriculation"></p>
<p>huile:<select name="choix">
<option value="0w30">0w30</option>
<option value="5w30">5w30</option>
<option value="10w40">10w40</option>
</select></p>
<p>quantite huile:<input type="text" name="huile2"></p>
<p>date de travaux:<input type="date" name="travail_fait"></p>
<label for ="travaux">travaux effectue </label>
<textarea name="travaux">
<?php
try{
$bdd = new PDO("mysql:host=127.0.0.1;dbname=test","alan","",[
PDO::ATTR_EMULATE_PREPARES=>false,
PDO::MYSQL_ATTR_DIRECT_QUERY=>false,
PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION]);
}
catch(PDOException $e)
{
die($e->getMessage());
}
$req = $bdd->prepare("INSERT INTO voitures(marques_vt,modele_vt) VALUES(?,?)");
$req->execute(array($_POST["marques_vt"],$_POST["modele_vt"]));
?>
</body>
</html>
PrimFX Le 22 novembre 2020 Ă 20:36 (ĂditĂ© le 1 janvier 1970 Ă 01:00)
Je pense qu'il y a eu un petit raté dans le copier/coller du code (il manque la partie PHP), tu peux éditer ton message précédent si tu le souhaites; pas la peine de reposter la totalité du code !
Pour rĂ©pondre Ă ta question : les champs indiquĂ©s dans ta requĂȘte SQL (INSERT INTO table (champ1, champ2, etc.)...
) doivent correspondre aux champs de ta base de données.
Les valeurs de ton formulaire envoyé avec la méthode "POST" seront stockés dans une variable superglobale en PHP : la variable $_POST
.
Du coup, voici à quoi devrait théoriquement correspondre ton code PHP/SQL :
$req = $bdd->prepare("INSERT INTO table (champ_mysql_1, champ_mysql_2, etc.) VALUES (?, ?, etc.)");
$req->execute(array($_POST['champ_formulaire_1'], $_POST['champ_formulaire_2'], etc.));
Avec ce code, tu indiques Ă PHP que tu vas stocker le "champ du formulaire #1" dans le "champ MySQL #1" et ainsi de suite pour chaque champ Ă remplir. Tu peux faire, si tu le souhaites, un var_dump()
de la superglobale $_POST
par exemple tout en haut ou tout en bas de ton code PHP/HTML. Ăa te permettra de mieux visualiser ce que cette variable contient :
var_dump($_POST);
Je remarque effectivement dans ton code HTML qu'il n'y a aucun champ du formulaire nommé marques_vt
ou modele_vt
. Tu as par contre marque_du_vehicule
et modele
. Si on applique donc le raisonnement indiquĂ© plus haut Ă ta requĂȘte, on devrait obtenir quelque chose comme :
$req = $bdd->prepare("INSERT INTO table (marques_vt, modele_vt) VALUES (?, ?)");
$req->execute(array($_POST['marque_du_vehicule'], $_POST['modele']));
Pour la capture de la base de donnĂ©es, le nom des champs semble Ă priori ok; est-ce que tu pourrais aller dans l'onglet "Structure" et Ă©galement le prendre en screenshot ? Ăa permettra de voir si ta table contient des champs obligatoires qui n'ont pas Ă©tĂ© renseignĂ©s dans ta requĂȘte SQL !
A bientĂŽt,
Boris ('PrimFX')
alandebcod Le 22 novembre 2020 Ă 20:58 (ĂditĂ© le 1 janvier 1970 Ă 01:00)
j ai essayer ce que tu as dit a la fin de mette dans mon array execute marque du vehicule et modele mais ca ne change rien je te met la structude de la bdd et depuis quelque heures g c 3 erreures Notice: Undefined index: marque_du_vehicule in C:\xampp\htdocs\voitures.php on line 55
Notice: Undefined index: modele in C:\xampp\htdocs\voitures.php on line 55
Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'marques_vt' cannot be null in C:\xampp\htdocs\voitures.php:55 Stack trace: #0 C:\xampp\htdocs\voitures.php(55): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\voitures.php on line 55 mais je ne comprend pas
PrimFX Le 23 novembre 2020 Ă 00:26 (ĂditĂ© le 1 janvier 1970 Ă 01:00)
Doucement mais sĂ»rement, on se rapproche du but 😄
Il faut bien distinguer les deux erreurs que tu vois. La premiĂšre avec les deux Undefined index marque_du_vehicule et modele
vient de ta superglobale $_POST
qui ne connait ces index (i.e. ces noms de variables de formulaires) qu'Ă partir du moment oĂč le formulaire a Ă©tĂ© envoyĂ© ! Autrement dit, il te faut une condition, type isset()
ou !empty()
pour vérifier si les éléments que tu cherches sont bien connus de la variable $_POST
. Tu peux pour cela utiliser quelque chose comme :
// On exĂ©cute la requĂȘte SEULEMENT si l'on a bien les Ă©lĂ©ments 'marque_du_vehicule' et 'modele' qui existent et contiennent quelque chose
if (!empty($_POST['marque_du_vehicule']) AND !empty($_POST['modele'])) {
$req = $bdd->prepare("INSERT INTO table (marques_vt, modele_vt) VALUES (?, ?)");
$req->execute(array($_POST['marque_du_vehicule'], $_POST['modele']));
}
Avec ça, les problÚmes de Undefined index
sont réglés.
Ensuite, l'erreur fatale est liĂ©e Ă PDO (l'objet que tu utilises pour communiquer avec ta base de donnĂ©es MySQL), d'oĂč le nom de l'exception PDOException
. En lisant l'erreur Integrity constraint violation: 1048 Column 'marques_vt' cannot be null
, celle-ci t'indique que "marques_vt" ne peut pas ĂȘtre null
(c'est-Ă -dire ne peut pas "ne rien contenir"). En effet, puisque tu ne testais pas l'existence de $_POST['marque_du_vehicule']
, MySQL croit que tu essaies de lui faire enregistrer des informations vides tant que le formulaire n'a pas été envoyé.
Au passage, si tu regardes bien la structure de ta base de données, tous les champs de ta table "voitures" ont pour valeur Non
dans la colonne Null
: ça veut dire que lorsque tu ajoutes une entrĂ©e dans ta base de donnĂ©es (e.g. via une requĂȘte SQL), il faut que tous les champs contiennent quelque chose ! Tu as donc deux options :
- Soit il faut traiter tous les champs du formulaire d'un coup et crĂ©er une plus grande requĂȘte SQL (dans laquelle tu remplis tous les champs requis)
- Soit il faut rendre des champs
Null: Oui
dans ta base de données pour accepter qu'ils ne contiennent rien (i.e. qu'ils soient vides)
Je te recommenderais d'opter pour la seconde option pour l'instant, ce qui te permettra dĂ©jĂ d'avancer correctement sur ton code avec un petit nombre de champs avant de rajouter les champs manquants (ce sera certainement plus limpide surtout si tu dĂ©butes avec tout ça) 😉
A bientĂŽt,
Boris ('PrimFX')
PS : On a pour rĂšgle sur le forum d'essayer de soigner l'orthographe (mĂȘme si personne ne peut ĂȘtre irrĂ©prochable Ă ce sujet Ă©videmment),je t'invite juste Ă Ă©viter le langage SMS type « g c 3 erreurs » pour les prochains messages; merci !
alandebcod Le 23 novembre 2020 Ă 12:19 (ĂditĂ© le 1 janvier 1970 Ă 01:00)
ok je vais essayer ca ok pour l orthographe je m en souviendrais
alandebcod Le 23 novembre 2020 Ă 12:30 (ĂditĂ© le 1 janvier 1970 Ă 01:00)
ok c est bon je n est plus d erreur mais toujour rien ne s ajoute a ma bdd merci de prendre le temps de m aider c est sympa
PrimFX Le 24 novembre 2020 Ă 15:31 (ĂditĂ© le 1 janvier 1970 Ă 01:00)
Hello !
C'est dĂ©jĂ un bon dĂ©but s'il n'y a plus d'erreurs. Est-ce que tu peux poster le code HTML/PHP que tu as actuellement ? Histoire de jeter un coup d'oeil aux mises Ă jour que tu as faites et peut-ĂȘtre comprendre ce qui bloque encore 😉
A bientĂŽt,
Boris ('PrimFX')
alandebcod Le 24 novembre 2020 Ă 17:58 (ĂditĂ© le 24 novembre 2020 Ă 17:58)
ca c est le formulaire
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://ajax.googleapi.com/ajax.libs/jquery/1.11.3/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcnd.com/bootstrap/jquery/3.3.6/js/bootstrap.min.js"></script>
<link rel = "stylesheet" href="styles2.css">
<meta charset="utf-8">
<title>voitures</title>
</head>
<body><div class= "fixe">
<h3><script type="text/javascript" src="date_heure.js"></script></h3>
<h3>voiture faite:</h3>
<a href="base.php">liste de voiture finit</a>
</div>
<form method="POST">
<strong>rechercher une voiture:</strong><input type="search" name="bar" placeholder="recherche une voiture"/>
<a href="" class="btn"><span class = "glyphicon glyphicon-ok"></span>valider</a>
</form>
<?php
try{
$bdd = new PDO("mysql:host=127.0.0.1;dbname=test","alan","",[
PDO::ATTR_EMULATE_PREPARES=>false,
PDO::MYSQL_ATTR_DIRECT_QUERY=>false,
PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION]);
}
catch(PDOException $e)
{
die($e->getMessage());
}
if(isset($_POST["marque_du_vehicule"]) AND isset($_POST["modele"]) AND isset($_POST["VIN"]) AND isset($_POST["kilometrage"])AND isset($_POST["premiere_mise_en_circulation"]) AND isset($_POST["immatriculation"]) AND isset($_POST["choix"]) AND isset($_POST["huile2"]) AND isset($_POST["travail_fait"]) AND isset($_POST["travaux"])){
$req = $bdd->prepare("INSERT INTO voitures(marques_vt,modele_vt,VIN_vt,kilometre_vt,mise_en_circulation,immat,huile,quantite,date_travaux,travaux_fait) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$req->execute(array($_POST['marque_du_vehicule'],$_POST['modele'],$_POST['VIN'],$_POST['kilometrage'],$_POST['premiere_mise_en_circulation'],$_POST['immatriculation'],$_POST['choix'],$_POST['huile2'],$_POST['travail_fait'],$_POST['travaux']));
}
?>
<form method="POST" action="resultat.php">
<div class="identifiant-vehicule">
<p>marques:<input type="text" name="marque_du_vehicule"></p>
<p>modele:<input type="text" name="modele"></p>
<p>VIN:<input type="text" name="VIN"></p>
<p>kilometrage:<input type="text" name="kilometrage"></p>
<p>1er mise en circulation:<input type="text" name="premiere_mise_en_circulation"></p>
<p>immatriculation:<input type="text" name="immatriculation"></p>
<p>huile:<select name="choix"class="oile">
<option value="0w30">0w30</option>
<option value="5w30">5w30</option>
<option value="10w40">10w40</option>
</select></p>
<p>quantite huile:<input type="text" name="huile2"></p>
<p>date de travaux:<input type="date" name="travail_fait"></p>
<label for ="travaux">travaux effectue </label>
<textarea name="travaux">
alandebcod Le 24 novembre 2020 Ă 18:02 (ĂditĂ© le 1 janvier 1970 Ă 01:00)
ca c est ma base quand je rajoute une voiture et j aimerais rajouter la barre de recherche mais a chaque fois que je tappe quelque chose dedans ca me donne une erreur <!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://ajax.googleapi.com/ajax.libs/jquery/1.11.3/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcnd.com/bootstrap/jquery/3.3.6/js/bootstrap.min.js"></script>
<link rel = "stylesheet" href="styls.css">
<meta charset="utf-8">
<title>voitures faite</title>
<?php
try{
$bdd = new PDO("mysql:host=127.0.0.1;dbname=test","alan","");
}
catch(Exception $e)
{
die($e->getMessage());
}?>
</head>
<body>
<?php
$req = $bdd->query("SELECT * FROM voitures");
if(isset($_GET["bar"]) AND !empty($_GET["bar"])){
$req = $bdd->query("SELECT * FROM voitures WHERE * LIKE "%". $bar ."%"");
}?>
<form method="GET">
<strong>rechercher une voiture:</strong><input type="search" name="bar" placeholder="recherche une voiture">
<input type="submit" value="valider" class="btn"></input>
<a href="voitures.php" class="racourci">ajouter une voiture</a>
</form>
<table border="4">
<thead>
<tr>
<th>marques</th>
<th>modele</th>
<th>VIN</th>
<th>kilometrage</th>
<th>1er mise en circulation</th>
<th>immatriculation</th>
<th>huile</th>
<th>quantite huile</th>
<th>date de travaux</th>
<th>travaux effectue</th>
</tr>
</thead>
<tbody>
<?php
while($vhl=$req->fetch())
{?>
<tr>
<td><?php echo $vhl["marques_vt"];?></td>
<td><?php echo $vhl["modele_vt"];?></td>
<td><?php echo $vhl["VIN_vt"];?></td>
<td><?php echo $vhl["kilometre_vt"];?></td>
<td><?php echo $vhl["mise_en_circulation"];?></td>
<td><?php echo $vhl["immat"];?></td>
<td><?php echo $vhl["huile"];?></td>
<td><?php echo $vhl["quantite"];?></td>
<td><?php echo $vhl["date_travaux"];?></td>
<td><?php echo $vhl["travaux_fait"];?></td>
</tr>
<?php } ?>
</table>
</body>
</html>
alandebcod Le 24 novembre 2020 Ă 18:03 (ĂditĂ© le 1 janvier 1970 Ă 01:00)
PrimFX Le 26 novembre 2020 Ă 10:16 (ĂditĂ© le 1 janvier 1970 Ă 01:00)
Hello @alandebcode,
Pour le problĂšme d'insertion je ne vois pas d'un ça vient Ă premiĂšre vue. Je te recommande 2-3 petits tests qui pourront peut-ĂȘtre t'aiguiller :
- Ajouter un
var_dump()
ouecho
tout simple aprĂšs ton test deisset()
sur les champs du formulaire pour voir si le code entre bien dans la condition. Par exemplevar_dump(1)
tout simplement. Si rien n'est affiché, ça veut dire que ta condition n'est pas respectée et que le problÚme vient de là . - Tu peux ajouter un
var_dump($_POST)
tout en haut de ton code PHP, ça te permettra de voir exactement quels champs sont envoyĂ©s depuis le formulaire. - Tu peux Ă©galement vĂ©rifier l'exĂ©cution de ta requĂȘte en faisant Ă©galement un
var_dump()
du résultat, par exemple :
$resultat = $req->execute(array($_POST['marque_du_vehicule'],$_POST['modele'],$_POST['VIN'],$_POST['kilometrage'],$_POST['premiere_mise_en_circulation'],$_POST['immatriculation'],$_POST['choix'],$_POST['huile2'],$_POST['travail_fait'],$_POST['travaux']));
var_dump($resultat);
Si le var_dump()
affiche False
, c'est qu'il y a en effet un problĂšme avec la requĂȘte. Si aucune erreur n'est affichĂ©e par MySQL lors de l'exĂ©cution de la requĂȘte alors qu'elle rencontre un problĂšme, tu peux aussi essayer de la mettre dans un bloc try { ... } catch(Exception $e) { exit($e->getMessage()); }
. Ăa te permettra d'ĂȘtre certain de capturer une Ă©ventuelle erreur đ
Concernant le problÚme de barre de recherche, quelle erreur rencontres-tu ? Je pense que tu peux appliquer des tests similaires à ceux évoqués ci-dessus pour tenter de débugguer ce formulaire dans la foulée !
A bientĂŽt,
Boris ('PrimFX')
alandebcod Le 26 novembre 2020 Ă 20:38 (ĂditĂ© le 1 janvier 1970 Ă 01:00)
l insertion fonctionne mais pour la barre de recherche ca me met ca <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <script src="https://ajax.googleapi.com/ajax.libs/jquery/1.11.3/jquery.min.js"></script> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> <script src="https://maxcdn.bootstrapcnd.com/bootstrap/jquery/3.3.6/js/bootstrap.min.js"></script> <link rel = "stylesheet" href="styls.css"> <meta charset="utf-8"> <title>voitures faite</title> <?php try{ $bdd = new PDO("mysql:host=127.0.0.1;dbname=test","alan",""); } catch(Exception $e) { die($e->getMessage()); }?> </head> <body> <?php $req = $bdd->query("SELECT * FROM voitures");
if(isset($_POST["search"])){
$bare = (String) trim($bare);
if(empty($bare)){
$valid= false;
$message_err= "entrer quelque chose";}
if($valid){
$req_bar = $bdd->query("SELECT * FROM voitures WHERE marques_vt LIKE ?" ,array($bare .'?'));
$req_bar = $req_bar->fetchall();
}
}
var_dump($_POST)
?>
<form method="POST" action="" class="dessus-tab">
<strong>rechercher une voiture:</strong><input type="search" name="bare" placeholder="recherche une voiture">
<input type="submit" value="valider" class="btn" name="search">
<a href="voitures.php" class="racourci">ajouter une voiture</a>
</form>
<?php
if(isset($message_err)){
echo $message_err;}
if(isset($_POST["bare"]) && $valid){
echo 1;
if(count($req_bar)==0){
echo "aucune voiture ";
}
foreach($req_bar as $rs){
echo "<table> <ul>" . $rs[marques_vt] ." " . $rs[modele_vt] . "</ul> </table>";
}
}
?>
<table border="4">
<thead>
<tr>
<th>marques</th>
<th>modele</th>
<th>VIN</th>
<th>kilometrage</th>
<th>1er mise en circulation</th>
<th>immatriculation</th>
<th>huile</th>
<th>quantite huile</th>
<th>date de travaux</th>
<th>travaux effectue</th>
</tr>
</thead>
<tbody>
<?php
while($vhl=$req->fetch())
{?>
<tr>
<td><?php echo $vhl["marques_vt"];?></td>
<td><?php echo $vhl["modele_vt"];?></td>
<td><?php echo $vhl["VIN_vt"];?></td>
<td><?php echo $vhl["kilometre_vt"];?></td>
<td><?php echo $vhl["mise_en_circulation"];?></td>
<td><?php echo $vhl["immat"];?></td>
<td><?php echo $vhl["huile"];?></td>
<td><?php echo $vhl["quantite"];?></td>
<td><?php echo $vhl["date_travaux"];?></td>
<td><?php echo $vhl["travaux_fait"];?></td>
</tr>
<?php } ?>
</table>
</body> </html>