Ecrire dans une base de données

Messages postés
548
Date d'inscription
lundi 29 décembre 2014
Statut
Membre
Dernière intervention
14 mai 2019
- - Dernière réponse : jordane45
Messages postés
25595
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mai 2019
- 20 juin 2017 à 15:52
Bonjour,

Je viens vous voir car je me heurte à un problème depuis un petit moment maintenant.
Je voulais, lorsque l'on remplisse le formulaire, qu'une fiche soit créé dans la base de donnés.
Le code de recuperation est bon etant donné qu'il m'affiche bien mon echo (tout en bas), mais rien n'est inscrit dans la base de donnée...

recuperation.php

<?php
$titre = $_POST['titre'];
$RNE = $_POST['RNE'];
$etablissement = $_POST['etablissement'];
$probleme = $_POST['probleme'];
$resolution = $_POST['resolution'];
$commentaire = $_POST['commentaire'];
$etat = $_POST['etat'];

try
{
$bdd = new PDO('mysql:host=localhost;dbname=depannage;charset=utf8', 'xxxx', 'xxxx');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}

$req = $bdd->exec('INSERT INTO Tablette(titre, RNE, etablissement, probleme, resolution, commentaire, etat)');
$req = "INSERT INTO Tablette VALUES('$titre','$RNE','$etablissement','$probleme','$resolution','$commentaire','$etat')";

echo 'La fiche a bien été ajoutée !';

$pdo = null;
?>


index.php

<!DOCTYPE html>
<html>
<head>
<title>Creation fiche</title>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
</head>

<body>
<img src="logo.png" class="logo">
<center><div class="center-div">
<h1>Formulaire de création de fiches de procédures</h1>

<form action="recuperation.php" method="POST">

<table>
<tr>
<th colspan="3">Informations générales</th> <!-- Section infos générales -->
</tr>
<tr>
<td>Titre : <input type="text" name="titre" id="titre" /></td>
<td>Etablissement : <input type="text" name="etablissement" id="etablissement" /></td>
<td>RNE : <input type="text" name="RNE" id="RNE" /></td>
</tr>
</table>

</br>

<table>
<tr>
<th colspan="3">Description</th> <!-- Section description -->
</tr>
<tr>
<td>Problème(s) rencontré(s) : <br><textarea name="probleme" id="probleme" rows=5 cols=70 placeholder="Description des problèmes"></textarea></td>
</tr>
<tr>
<td>Action(s) réalisée(s) <br><textarea name="resolution" id="resolution" rows=5cols=70 placeholder="Les manipulations effectuées par le dépanneur"></textarea></td>
</tr>
</table>

</br>

<table>
<tr>
<th colspan="3">Information(s) complémentaire(s)</th> <!-- Section infos sup -->
</tr>
<tr>
<td><textarea name="commentaire" id="commentaire" rows=5 cols=70></textarea></td>
</tr>
</table>

</br>

<table>
<tr>
<th colspan="3">Résolu ? <input type="text" name="etat" id="etat" /></th> <!-- Section infos générales -->
</tr>
</table>

</br>

<input type="submit" name="envoi" value="Confirmer l'envoi de la fiche">
</form>
</div>
<div class="bouton">
<p>
<a href="./page1.html" rel="nofollow noopener noreferrer" target="_blank">Retour</a>
</p>
</div>
</center>

</body>
</html>





Voici mes codes, en espérant que quelqu'un me vienne en aide ;) .
Afficher la suite 

Votre réponse

2 réponses

Messages postés
25595
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mai 2019
311
0
Merci
Bonjour,

Commence par ça :
http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs


Ensuite.. corrige ces lignes
$req = $bdd->exec('INSERT INTO Tablette(titre, RNE, etablissement, probleme, resolution, commentaire, etat)');
	$req = "INSERT INTO Tablette VALUES('$titre','$RNE','$etablissement','$probleme','$resolution','$commentaire','$etat')";
	

par :
$sql = "INSERT INTO Tablette(titre, RNE, etablissement, probleme, resolution, commentaire, etat) 
          VALUES(:titre,:RNE,:etablissement,:probleme,:resolution,:commentaire,:etat)";

$datas = array(':titre'=>$titre,
                ':RNE'=>$RNE,
                ':etablissement'=>$etablissement,
                ':probleme'=>$probleme,
                ':resolution'=>$resolution,
                ':commentaire'=>$commentaire,
                ':etat'=>$etat
                );
                
try{
  $prep = $bdd->prepare($sql);
  $prep->execute($datas);
}catch(Exception $e){
  echo "Erreur :".$e->getMessage();
}


jordane45
Messages postés
25595
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mai 2019
311 > raxos
Messages postés
548
Date d'inscription
lundi 29 décembre 2014
Statut
Membre
Dernière intervention
14 mai 2019
-
ben oui.

Et donc maintenant ça donne quoi quand tu exécutes ton code ??
raxos
Messages postés
548
Date d'inscription
lundi 29 décembre 2014
Statut
Membre
Dernière intervention
14 mai 2019
> jordane45
Messages postés
25595
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mai 2019
-
une jolie page blanche, sans erreur, et rien dans la bdd
jordane45
Messages postés
25595
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mai 2019
311 -
Bon...
déjà .. on va placer le code de connexion à la bdd dans un fichier à part que tu n'auras qu'à inclure dans
tes pages au lieu de la réécrire partout dans ton site...
<?php
//fichier nommé : cnxbdd.php
try{
  $bdd = new PDO('mysql:host=localhost;dbname=depannage;charset=utf8', 'xxxx', 'xxxx');
  $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
   $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(Exception $e) {
   die('Erreur : '.$e->getMessage());
}

?>


Ensuite ton code...
- On récupère PROPREMENT les variables AVANT de les utiliser
- On affiche les erreurs PHP
- On utilise les requêtes préparées...

Ce qui donne :
<?php
//fichier : recuperation.php 

//------------------------------------------------------------------------//
//affichage des erreurs PHP
//------------------------------------------------------------------------//
error_reporting(E_ALL);
ini_set('display-errors','on');

//------------------------------------------------------------------------//
//connexion à la bdd
//------------------------------------------------------------------------//
require_once "cnxbdd.php";

//------------------------------------------------------------------------//
//récupération Propre des variables
//------------------------------------------------------------------------//
	$titre = !empty($_POST['titre']) ? $_POST['titre'] : NULL;
	$RNE = !empty($_POST['RNE']) ? $_POST['RNE'] : NULL;
	$etablissement = !empty($_POST['etablissement']) ? $_POST['etablissement'] : NULL;
	$probleme = !empty($_POST['probleme']) ? $_POST['probleme'] : NULL;
	$resolution = !empty($_POST['resolution']) ? $_POST['resolution'] : NULL;
	$commentaire = !empty($_POST['commentaire']) ? $_POST['commentaire'] : NULL ;
	$etat = !empty($_POST['etat']) ? $_POST['etat'] : NULL;
	
//------------------------------------------------------------------------//	
// traitement
//------------------------------------------------------------------------//
if($titre){
	$sql = "INSERT INTO Tablette(titre, RNE, etablissement, probleme, resolution, commentaire, etat) 
          VALUES(:titre,:RNE,:etablissement,:probleme,:resolution,:commentaire,:etat)";

  $datas = array(':titre'=>$titre,
                  ':RNE'=>$RNE,
                  ':etablissement'=>$etablissement,
                  ':probleme'=>$probleme,
                  ':resolution'=>$resolution,
                  ':commentaire'=>$commentaire,
                  ':etat'=>$etat
                  );
                  
  try{
     $prep = $bdd->prepare($sql);
     $prep->execute($datas);
     echo 'La fiche a bien été ajoutée !';
  }catch(Exception $e){
    echo "Erreur :".$e->getMessage();
  }
}else{
  echo "Merci de remplir le titre";
}

?>
raxos
Messages postés
548
Date d'inscription
lundi 29 décembre 2014
Statut
Membre
Dernière intervention
14 mai 2019
> jordane45
Messages postés
25595
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mai 2019
-
Je ne comprends pas tu recréé un fichier pour le try catch, je ne l'écrit pas de partout, je l’appelle juste dans la page index.
Sinon, j'ai toujours l'ecran blanc avec cette manip...
jordane45
Messages postés
25595
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mai 2019
311 > raxos
Messages postés
548
Date d'inscription
lundi 29 décembre 2014
Statut
Membre
Dernière intervention
14 mai 2019
-
Je ne créé pas un fichier pour le try/catch ... je créé un fichier pour la connexion à la bdd !
Cela évite de devoir retaper ces lignes partout dans ton site pour peu que tu aies d'autres fichiers/pages qui nécéssitent également une connexion à la bdd....
A la place .. je fais juste un include (ou plus exactement un require) du fichier permettant de se connecter à la bdd.
C'est juste que c'est mieux organisé... pus propre .. plus "pro" ....
Après.. si toi tu veux laisser le code de connexion à la bdd directement dans le même fichier... fais comme tu le sens...
Commenter la réponse de jordane45
Messages postés
1
Date d'inscription
lundi 19 juin 2017
Statut
Membre
Dernière intervention
20 juin 2017
0
Merci
Bonsoir,
Désolée, je suis pas très douée mais peut-être pourriez-vous essayer ceci :

<?php
 $connection = new PDO('mysql:host=localhost;dbname=depannage;charset=utf8', 'xxxx', 'xxxx');
 
 $titre = $_POST['titre'];
 $RNE = $_POST['RNE'];
 $etablissement = $_POST['etablissement'];
 $probleme = $_POST['probleme'];
 $resolution = $_POST['resolution'];
 $commentaire = $_POST['commentaire'];
 $etat = $_POST['etat'];
 
 echo $titre."<br>";
 echo $RNE."<br>";
 echo $etablissement."<br>";
 echo $probleme."<br>";
 echo $resolution."<br>";
 echo $commentaire."<br>";
 echo $etat."<br>";
 
 $req = 'INSERT INTO Tablette(titre, RNE, etablissement, probleme, resolution, commentaire, etat) VALUE(:titre, :RNE, :etablissement, :probleme, :resolution, :commentaire, :etat)';
 $sql = $connection ->prepare($req);
 
try
 {
  $sql ->bindParam(':titre', $titre, PDO::PARAM_INT);
  $sql ->bindParam(':resolution', $resolution, PDO::PARAM_STR); //si char, string ou date
  ...
  
   $sql -> execute();
 }
catch(Exception $e)
{
 die('Erreur SQL'.$sql.'<br>'.$e ->getMessage());
}

?>


EDIT : Ajout des balises de code (la coloration syntaxique).

Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
Jordane45
raxos
Messages postés
548
Date d'inscription
lundi 29 décembre 2014
Statut
Membre
Dernière intervention
14 mai 2019
-
Bonjour, merci de ton aide.
J'ai bien fait ton code, en ajoutant dans le try mes champs, et cela a pour conséquence d'afficher les valeurs de mes champs(les echo fonctionnent), et toujours rien dans ma bdd.
J'ai aussi essayé de mettre les echo à la fin du code, même résultat.
Commenter la réponse de Fruitiss