insertion de donnee dans la bdd mysql

alandebcod

alandebcod Le 22 novembre 2020 Ă  17:57

code insertion des donnee bonjour a tous je regarde les tutos sur le site mais je n arrive pas a comprendre pourquoi quand je rentre une valeurs dans le tableau ca ne l ajoute pas a ma base de donnee sachant qu il n y a pas besoin de verificatio car il n y a que moi qui vais l utiliser pour le moment merci pour votre aides

PrimFX

PrimFX Le 22 novembre 2020 Ă  19:28

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

alandebcod Le 22 novembre 2020 Ă  19:31

ok je vais essayer deja ce que tu as dit merci ;)

alandebcod

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> 
alandebcod

alandebcod Le 22 novembre 2020 Ă  19:47

base de donnee

PrimFX

PrimFX Le 22 novembre 2020 Ă  20:36

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

alandebcod Le 22 novembre 2020 Ă  20:58

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 bddstructure 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

PrimFX Le 23 novembre 2020 Ă  00:26

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

alandebcod Le 23 novembre 2020 Ă  12:19

ok je vais essayer ca ok pour l orthographe je m en souviendrais

alandebcod

alandebcod Le 23 novembre 2020 Ă  12:30

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

PrimFX Le 24 novembre 2020 Ă  15:31

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

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

alandebcod Le 24 novembre 2020 Ă  18:00

formĂč c est ca

alandebcod

alandebcod Le 24 novembre 2020 Ă  18:02

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

alandebcod Le 24 novembre 2020 Ă  18:03

2 eme page celle la correspond au 2 eme code

PrimFX

PrimFX Le 26 novembre 2020 Ă  10:16

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() ou echo tout simple aprĂšs ton test de isset() sur les champs du formulaire pour voir si le code entre bien dans la condition. Par exemple var_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

alandebcod Le 26 novembre 2020 Ă  20:38

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>

alandebcod

alandebcod Le 26 novembre 2020 Ă  20:38

Vous devez ĂȘtre connectĂ© pour poster une rĂ©ponse. Se connecter ou CrĂ©er un compte
Live - On analyse vos sites #7
Live en cours - On analyse vos sites #7