par
Claadd » 16 févr. 2011, 16:22
Bonjour tout le monde!
Alors je vous explique mon problème (le plus clairement possible ^^"), je n'arrive pas à créer simultanément deux requêtes sql préparées avec paramètres.
Ce qui me permettrais de rentrer une adresse de facturation , récupérer l'identifiant, et de le mettre en clé étrangères dans les champs du client et tout sa lors de l'inscription!
le code est le suivant :
// on récupère sous forme de tableau les données postés
$tab_value = variable_post::recup_tab_post("nom_client");
$obj_pdo = new my_pdo();
foreach($tab_value as $champ => $valeur)
{
// on test pour savoir si le tableau n'est pas vide
if(!empty($tab_value[$champ]))
{
$obj_pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$obj_pdo -> beginTransaction();
try{
$sql2 = "insert into adresse_facturation (idadresse_facturation, adresse_facturation, complement_facturation , cp_facturation, ville_facturation)
value('', :adresse, :cpt_adresse,:cp, :ville);";
//on prépare la requete
$preparation = $obj_pdo -> prepare($sql2);
$preparation ->BindParam(':adresse', $tab_value["adresse"]);
$preparation ->BindParam(':cpt_adresse', $tab_value["cpt_adresse"]);
$preparation ->BindParam(':cp', $tab_value["cp"]);
$preparation ->BindParam(':ville', $tab_value["ville"]);
$execution = $preparation -> execute();
// on récupère l'identifiant de la requete précèdente!
$id_precedent = $obj_pdo -> lastInsertId();
echo $id_precedent;
$execution2 = $preparation -> execute();
}
catch(PDOException $e)
{
// S’il y a eu une erreur, on annule les modifications
$obj_pdo->rollBack();
echo "Echec: " . $e->getMessage();
}
try{
//2eme requete
$sql = "insert into client (idclient, nomCli, prenomCli, pseudoCli, emailCli, MdpCli, dateAge, telfix, telmob, venteRealise, idcivilite, idadresse_facturation, idadresse_livraison )
values('', :nom_client, :prenom_client, ' ', :email, :mdp_client, :date_n, :tel_fixe, :tel_mob, ' ', ' ', :idadresse_facturation , :idadresse_livraison );";
$preparation2 = $obj_pdo -> prepare($sql);
$preparation2 -> BindParam(':nom_client',$tab_value["nom_client"]);
$preparation2 -> BindParam(':prenom_client',$tab_value["prenom_client"]);
$preparation2 -> BindParam(':email',$tab_value["email"]);
$preparation2 -> BindParam(':nom_client',$tab_value["nom_client"]);
$preparation2 -> BindParam(':mdp_client',$tab_value["mdp_client"]);
$preparation2 -> BindParam(':idadresse_facturation',$idprecedent);
$preparation2 -> BindParam(':idadresse_livraison',$idprecedent);
$preparation2 -> BindParam(':date_n',$tab_value["date_n"]);
$preparation2 -> BindParam(':tel_fixe',$tab_value["tel_fixe"]);
$preparation2 -> BindParam(':tel_mob',$tab_value["tel_mob"]);
$execution2 = $preparation2 -> execute();
header("location:". _CH_MAG . "gestion_categorie.php");
exit();
}
catch(PDOException $e)
{
// S’il y a eu une erreur, on annule les modifications
$obj_pdo->rollBack();
echo "Echec: " . $e->getMessage();
}
ai-je fais une erreur quelque part?? je pense que oui car cela ne donne rien de bon...
les deux requêtes marchent indépendamment mais lorsque j'essaie d'utiliser la variable $id_precedent pour l'inclure en tant que clé étrangère cela fait tout planter... en mettant comme erreur
Echec: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'idadresse_facturation' cannot be null
alors que la variable censée être idadresse_facturation contient bien un chiffre!
je ne sais plus où chercher quelqu'un pourrait-il m'aider!
merci!
Bonjour tout le monde!
Alors je vous explique mon problème (le plus clairement possible ^^"), je n'arrive pas à créer simultanément deux requêtes sql préparées avec paramètres.
Ce qui me permettrais de rentrer une adresse de facturation , récupérer l'identifiant, et de le mettre en clé étrangères dans les champs du client et tout sa lors de l'inscription!
le code est le suivant :
[php]
// on récupère sous forme de tableau les données postés
$tab_value = variable_post::recup_tab_post("nom_client");
$obj_pdo = new my_pdo();
foreach($tab_value as $champ => $valeur)
{
// on test pour savoir si le tableau n'est pas vide
if(!empty($tab_value[$champ]))
{
$obj_pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$obj_pdo -> beginTransaction();
try{
$sql2 = "insert into adresse_facturation (idadresse_facturation, adresse_facturation, complement_facturation , cp_facturation, ville_facturation)
value('', :adresse, :cpt_adresse,:cp, :ville);";
//on prépare la requete
$preparation = $obj_pdo -> prepare($sql2);
$preparation ->BindParam(':adresse', $tab_value["adresse"]);
$preparation ->BindParam(':cpt_adresse', $tab_value["cpt_adresse"]);
$preparation ->BindParam(':cp', $tab_value["cp"]);
$preparation ->BindParam(':ville', $tab_value["ville"]);
$execution = $preparation -> execute();
// on récupère l'identifiant de la requete précèdente!
$id_precedent = $obj_pdo -> lastInsertId();
echo $id_precedent;
$execution2 = $preparation -> execute();
}
catch(PDOException $e)
{
// S’il y a eu une erreur, on annule les modifications
$obj_pdo->rollBack();
echo "Echec: " . $e->getMessage();
}
try{
//2eme requete
$sql = "insert into client (idclient, nomCli, prenomCli, pseudoCli, emailCli, MdpCli, dateAge, telfix, telmob, venteRealise, idcivilite, idadresse_facturation, idadresse_livraison )
values('', :nom_client, :prenom_client, ' ', :email, :mdp_client, :date_n, :tel_fixe, :tel_mob, ' ', ' ', :idadresse_facturation , :idadresse_livraison );";
$preparation2 = $obj_pdo -> prepare($sql);
$preparation2 -> BindParam(':nom_client',$tab_value["nom_client"]);
$preparation2 -> BindParam(':prenom_client',$tab_value["prenom_client"]);
$preparation2 -> BindParam(':email',$tab_value["email"]);
$preparation2 -> BindParam(':nom_client',$tab_value["nom_client"]);
$preparation2 -> BindParam(':mdp_client',$tab_value["mdp_client"]);
$preparation2 -> BindParam(':idadresse_facturation',$idprecedent);
$preparation2 -> BindParam(':idadresse_livraison',$idprecedent);
$preparation2 -> BindParam(':date_n',$tab_value["date_n"]);
$preparation2 -> BindParam(':tel_fixe',$tab_value["tel_fixe"]);
$preparation2 -> BindParam(':tel_mob',$tab_value["tel_mob"]);
$execution2 = $preparation2 -> execute();
header("location:". _CH_MAG . "gestion_categorie.php");
exit();
}
catch(PDOException $e)
{
// S’il y a eu une erreur, on annule les modifications
$obj_pdo->rollBack();
echo "Echec: " . $e->getMessage();
}
[/php]
ai-je fais une erreur quelque part?? je pense que oui car cela ne donne rien de bon...
les deux requêtes marchent indépendamment mais lorsque j'essaie d'utiliser la variable $id_precedent pour l'inclure en tant que clé étrangère cela fait tout planter... en mettant comme erreur [sql]Echec: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'idadresse_facturation' cannot be null[/sql]
alors que la variable censée être idadresse_facturation contient bien un chiffre!
je ne sais plus où chercher quelqu'un pourrait-il m'aider!
merci!