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
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: Ouidans 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()ouechotout 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>





