[RESOLU] PDO insert into depuis un formulaire n'ecrit pas dans ma bdd

Petit nouveau ! | 5 Messages

29 déc. 2013, 08:30

Bonjour à tous,

Nouveau venu et débutant avec PDO, je bloque sur ce probleme :

J'ai crée une bdd db_ventes, un formulaire avec <FORM Method="POST" Action="admin_ventes.php3">

et admin_ventes.php3 que voici :
<?php

try
{
	// initilisation de PDO
     	// On stocke la connection à MySQL dans une variable en précisant le type de table, l'hote, le mon de la bdd, le pseudo et mot de passe
	$bdd = new PDO('mysql:host=localhost;dbname=db_ventes', 'root', '');
}

catch (Exception $e)
{
        // En cas d'erreur, on affiche un message et on arrête tout
	die('Erreur : ' . $e->getMessage());
}



//récupération des valeurs des champs:
  
$article = $_POST['article'];
$cat_price = $_POST['cat_price'];
$date_creation = $_POST['date_creation'];
$pseudo_acheteur = $_POST['pseudo_acheteur'];
$date_vente = $_POST['date_vente'];
$prix = $_POST['prix'];
$rangement = $_POST['rangement'];
$etat = $_POST['etat'];
$provenance = $_POST['provenance'];
$annee_vente = $_POST['annee_vente'];

$tab = array(
'article' => '$article',
'cat_price' => '$cat_price',
'date_creation' => '$date_creation',
'pseudo_acheteur' => '$pseudo_acheteur',
'date_vente' => '$date_vente',
'prix' => '$prix',
'rangement' => '$rangement',
'etat' => '$etat',
'provenance' => '$provenance',
'annee_vente' => '$annee_vente');


//création de la requête SQL:


$sql = "INSERT INTO `tab_ventes` (`article`, `cat_price`, `date_creation`, `pseudo_acheteur`, `date_vente`, `prix`, `rangement`, `etat`, `provenance`, `annee_vente`) 
		VALUES (':article', ':cat_price', ':date_creation', ':pseudo_acheteur', ':date_vente', ':prix', ':rangement', ':etat' , ':provenance', ':annee_vente')" or die("Erreur SQL !".mysql_error());



$req = $bdd->prepare($sql);
$req->execute($tab);


// fermeture de la connection à la bdd

if($bdd){
    $bdd = NULL;
	}
?>
quand je rempli les champs de mon formulaire, je valide et la bdd reste vide. je bloque dessus depuis 2 jours et un peu d'aide me serait utile... #-o

merci par avance...
Modifié en dernier par zeus le 29 déc. 2013, 14:23, modifié 1 fois.
Raison : Ajout de balise de mise en forme

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

29 déc. 2013, 14:24

Bonjour,

Je te conseille de suivre cette méthodologie pour résoudre ton soucis
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Petit nouveau ! | 5 Messages

29 déc. 2013, 21:00

merci zeus ! lien interessant en effet.

alors j'ai un peu avancé et voici mon fichier :
<?php

try
{
	// initilisation de PDO
     	// On stocke la connection à MySQL dans une variable en précisant le type de table, l'hote, le mon de la bdd, le pseudo et mot de passe
	$bdd = new PDO('mysql:host=localhost;dbname=db_ventes', 'root', '');
}

catch (Exception $e)
{
        // En cas d'erreur, on affiche un message et on arrête tout
	die('Erreur : ' . $e->getMessage());
}


$tab = array(
':article' => $_POST['article'],
':cat_price' => $_POST['cat_price'],
':date_creation' => $_POST['date_creation'],
':pseudo_acheteur' => $_POST['pseudo_acheteur'],
':date_vente' => $_POST['date_vente'],
':prix' => $_POST['prix'],
':rangement' => $_POST['rangement'],
':etat' => $_POST['etat'],
':provenance' => $_POST['provenance'],
':annee_vente' => $_POST['annee_vente']);
	


//création de la requête SQL:


$sql = "INSERT INTO `tab_ventes` (`article`, `cat_price`, `date_creation`, `pseudo_acheteur`, `date_vente`, `prix`, `rangement`, `etat`, `provenance`, `annee_vente`) 
		VALUES (:article, :cat_price, :date_creation, :pseudo_acheteur, :date_vente, :prix, :rangement, :etat, :provenance, :annee_vente)" ;

echo $sql;

$req = $bdd->prepare($sql);
$req->execute($tab);


// fermeture de la connection à la bdd

if($bdd){
    $bdd = NULL;
	}


?>

toujours rien dans la bdd pour l'instant mais plus d'erreur...

le echo $sql; renvoie ceci :
INSERT INTO `tab_ventes` (`article`, `cat_price`, `date_creation`, `pseudo_acheteur`, `date_vente`, `prix`, `rangement`, `etat`, `provenance`, `annee_vente`) VALUES (:article, :cat_price, :date_creation, :pseudo_acheteur, :date_vente, :prix, :rangement, :etat, :provenance, :annee_vente) 
en gros il renvoie mon code, serait-ce qu'il le lit sans l'interpreter ?...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

30 déc. 2013, 20:35

Bonsoir,

Alors je pense que je vais te montrer quelques pistes pour un code plus propre
<?php

try
{
    // initilisation de PDO
    // On stocke la connection à MySQL dans une variable en précisant le type de table, l'hote, le mon de la bdd, le pseudo et mot de passe
    $bdd = new PDO('mysql:host=localhost;dbname=db_ventes', 'root', '');
}
catch (Exception $e)
{
        // En cas d'erreur, on affiche un message et on arrête tout
        die('Erreur : ' . $e->getMessage());
}

// Il ne faut JAMAIS, AU GRAND JAMAIS faire confiance aux données qui viennent de l'utilisateur ($_GET, $_POST, $_COOKIES, ...)
// Il faut vérifier la présence (pour éviter des erreurs), que le format correspond (pour tout ce qui n'est pas string) avec ça : http://fr2.php.net/manual/fr/function.filter-input.php
$tab = array(
    ':article'          => $_POST['article'],
    ':cat_price'        => $_POST['cat_price'],
    ':date_creation'    => $_POST['date_creation'],
    ':pseudo_acheteur'  => $_POST['pseudo_acheteur'],
    ':date_vente'       => $_POST['date_vente'],
    ':prix'             => $_POST['prix'],
    ':rangement'        => $_POST['rangement'],
    ':etat'             => $_POST['etat'],
    ':provenance'       => $_POST['provenance'],
    ':annee_vente'      => $_POST['annee_vente']
);
        


//création de la requête SQL:
$sql = "INSERT INTO `tab_ventes` (`article`, `cat_price`, `date_creation`, `pseudo_acheteur`, `date_vente`, `prix`, `rangement`, `etat`, `provenance`, `annee_vente`) 
    VALUES (:article, :cat_price, :date_creation, :pseudo_acheteur, :date_vente, :prix, :rangement, :etat, :provenance, :annee_vente)" ;

// ça, c'est juste le temps de comprendre ;)
echo $sql;

$req = $bdd->prepare($sql);
// cette méthode te retourne true/false si ça a réussi/échoué
$result = $req->execute($tab);

// Du coup, on peux tester sur le retour et afficher l'erreur en cas de soucis
if (!$result) {
    // ça t'affiche juste un code. C'est suffisant en prod pour que l'utilisateur te fasse un retour
    echo "Une erreur est survenue : " . $req->errorCode();

    // Mais en dev, pour comprendre, tu peux faire ça :
    print_r($req->errorInfo());
}


// fermeture de la connection à la bdd
if ($bdd) {
    $bdd = NULL;
}

// Pas besoin de fermer la balise PHP, ça t'évites des surprises quand tu as un espace après la balise ;)
Je te laisse lire et comprendre.
N'hésites pas à venir poser des questions.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Petit nouveau ! | 5 Messages

30 déc. 2013, 21:19

merci à toi, je vais etudier ça de près ...

Petit nouveau ! | 5 Messages

31 déc. 2013, 17:58

super utile pour moi, avec des liens et tout et tout. parfait. en attendant mon probleme est resolu... une erreur toute bete de nom de colonne mal orthographiee...

merci pour tout et à bientot certainement