Ecrire dans une base de données

raxos 455 Messages postés lundi 29 décembre 2014Date d'inscription 3 novembre 2017 Dernière intervention - 19 juin 2017 à 14:53 - Dernière réponse : jordane45 19221 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention
- 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 

14 réponses

Répondre au sujet
jordane45 19221 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 19 juin 2017 à 18:03
0
Utile
11
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 19221 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention > raxos 455 Messages postés lundi 29 décembre 2014Date d'inscription 3 novembre 2017 Dernière intervention - 20 juin 2017 à 14:37
ben oui.

Et donc maintenant ça donne quoi quand tu exécutes ton code ??
raxos 455 Messages postés lundi 29 décembre 2014Date d'inscription 3 novembre 2017 Dernière intervention > jordane45 19221 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 20 juin 2017 à 14:38
une jolie page blanche, sans erreur, et rien dans la bdd
jordane45 19221 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 20 juin 2017 à 15:18
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 455 Messages postés lundi 29 décembre 2014Date d'inscription 3 novembre 2017 Dernière intervention > jordane45 19221 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 20 juin 2017 à 15:49
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 19221 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention > raxos 455 Messages postés lundi 29 décembre 2014Date d'inscription 3 novembre 2017 Dernière intervention - 20 juin 2017 à 15:52
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
Fruitiss 1 Messages postés lundi 19 juin 2017Date d'inscription 20 juin 2017 Dernière intervention - Modifié par jordane45 le 20/06/2017 à 15:07
0
Utile
1
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 455 Messages postés lundi 29 décembre 2014Date d'inscription 3 novembre 2017 Dernière intervention - 20 juin 2017 à 08:50
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.