IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Requête insert dans une boucle [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut Requête insert dans une boucle
    Bonjour à Tous,

    J'ai un formulaire qui envoie un tableau php de données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="text" name="code[]">
    Voici le traitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    function enreg_vente($f){
    global $pdo;
    $ins = "INSERT INTO `journal_ventes` (`date`, `produit_id`, `qte`, `vente_ht`, `vente_ttc`, `tot_achat_ht`, `tot_marge`,  `tva55`, `tva10`, `tva20`, `paiement` ) 
    VALUES (:date, :produit_id, :qte, :montant_ht, :montant_ttc, :tot_achat_ht, :tot_marge, :tva55, :tva10, :tva20, :paiement)";
    $req = $pdo->prepare($ins);
     
    for($i=0;$i<count($f['code']);$i++){
    	$code = $f['code'][$i];
    	$qte = $f['qte'][$i];
    	$paiement = $f['paiement'][$i];
    	$prix_vente_ttc = $f['pvttc'][$i];
     
            $infoprod = infoprod($code); //fonction qui charge les infos d'un produit et qui plante ici
    ...
    ...
    	$arr['date'][] =  date_sql($date);
    	$arr['produit_id'][] = $code;
    	$arr['qte'][] = $qte;
    	$arr['montant_ht'][] = $montant_ht;
    	$arr['montant_ttc'][] = $montant_ttc;
    	$arr['tot_achat_ht'][] = $tot_achat_ht;
    	$arr['tot_marge'][] = $tot_marge;
    	$arr['tva55'][] = $tva55;
    	$arr['tva10'][] = $tva10;
    	$arr['tva20'][] = $tva20;
    	$arr['paiement'][] = $paiement;
     
    	$req->execute($arr);	 
     
     
    }
    }
    La fonction infoprod qui plante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function infoprod($prodid,$table=""){
    global $pdo;
    echo gettype($pdo);
    if(!$table){
    	$table = "gamme";
    }
    $sql = $pdo->query("SELECT * FROM ".$table." WHERE id='".$prodid."'");
    $row = $sql->fetch(PDO::FETCH_ASSOC);
    return $row;
    }
    Le message d'erreur dans la fonction enreg_vente

    Fatal error: Call to a member function query() on a non-object in ...
    Le gettype($pdo) de la fonction infoprod me renvoie (j'ai 2 items dans le formulaire) :

    object
    integer
    Je précise que partout sur mon site, le PDO fonctionne sans problème. C'est seulement cette fonction qui déconne.
    Merci de vos lumières.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Entre le premier et le deuxieme gettype, ton $pdo a changé (au passage, utilise var_dump() pour debuguer).
    A toi de voir quel code intervient dans cet interval.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Bonsoir,

    En fait j'ai trouvé une requête qui plante.
    A la sauce mysql traditionnelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "UPDATE table SET stock = stock - ".$qte." WHERE id = ".$id
    En PDO, j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $maj = $pdo->prepare('UPDATE gamme SET stock=:-qte WHERE id=:id');
     
    foreach($arr['produit_id'] as $key=>$val){
    $maj->execute(array(':stock'=>-$arr['qte'][$key],':id'=>$val));		
    }
    Mais PDO plante, où que je mette le signe -

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je suppose que tu veux soustraitre la quantité au stock
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $maj = $pdo->prepare('UPDATE gamme SET stock= stock -:qte WHERE id=:id');
     
    foreach($arr['produit_id'] as $key=>$val){
    $maj->execute(array(':stock'=>$arr['qte'][$key],':id'=>$val));		
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Bonjour et merci de ton aide.

    J'ai cette erreur :

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in....
    Sur la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $maj->execute(array(':stock'=>$arr['qte'][$key],':id'=>$val));
    J'ai vérifié, les ID produits et les quantités sont bien contenues dans le tableau $arr.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $maj->execute(array(':qte'=>$arr['qte'][$key],':id'=>$val));
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Une fois de plus...un grand merci à toi pour ta disponibilité et tes compétences.
    Belle journée !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête update dans une boucle for
    Par boubounagh dans le forum JDBC
    Réponses: 3
    Dernier message: 13/01/2012, 14h18
  2. [MySQL] Requête SQL dans une boucle : optimisation
    Par guiom056 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/05/2010, 12h09
  3. Problème de requête SQL dans une boucle While
    Par Astraya dans le forum VB.NET
    Réponses: 3
    Dernier message: 21/01/2009, 17h18
  4. [Access] INSERT dans une boucle ?
    Par delavega dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/01/2009, 17h00
  5. [MySQL] Exécuter une requête UPDATE dans une boucle
    Par vacknov dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 24/10/2008, 17h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo