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 :

INSERT INTO qui ne fonctionne pas mais qui fonctionne [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 17
    Par défaut INSERT INTO qui ne fonctionne pas mais qui fonctionne
    Bonjour à tous, voilà, j'ai un bug formidable et comme tous les trucs qui vous pourrissent la vie, je suis sûr que ce sera résolu au premier coup d'œil extérieur.

    C'est un panier => on enregistre la commande dans la base de données (truc classique)

    D'abord on créé la commande, ensuite on insère autant de lignes dans la commande que de produits.

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    <?php
     
    //  Connexion à la base de données
    		include("../fr_connexion_bdd_online.php");
     
    		$etat=1;
    		$reqcde = 
    		"
    			INSERT INTO commandes
    			(
    				idclient, 
    				datecde, 
    				prixtotal,
    				etat		
    			)
    			VALUES 
    			(
    				'" . $_SESSION['idclient'] . "', 
    				'" . time() . "',
    				'" . $_SESSION['total_prix_panier'] . "',
    				'" . $etat . "'
    			)
    		";
    		echo $reqcde;
    		echo("<br>");
    		$envoie_reqcde=mysql_query($reqcde);
    		$commande_id = mysql_insert_id();
     
    		for ($i=0; $i < count($_SESSION['achats']); $i++)
    		{
    			$reqlignecde = 
    			"
    				INSERT INTO lignecde 
    				(
    					idcde,
    					refproduit,
    					qte,
    					prix,
    					lg,
    					diam,
    					couleur,
    					texte,
    					idecrin
    				)
    				VALUES 
    				(
    					'" . $commande_id . "',
    					'" . $_SESSION['achats'][$i]['id'] . "',
    					'" . $_SESSION['achats'][$i]['qte'] . "',
    					'" . $_SESSION['achats'][$i]['prix'] . "',
    					'" . $_SESSION['achats'][$i]['lg'] . "',
    					'" . $_SESSION['achats'][$i]['diam'] . "',
    					'" . $_SESSION['achats'][$i]['couleur'] . "',
    					'" . $_SESSION['achats'][$i]['texte'] . "',
    					'" . $_SESSION['achats'][$i]['ecrin'] . "'
    				)
    			";
     
    			$envoie_reqlignecde=mysql_query($reqlignecde);
    			echo ("ligne ");
    			echo $i;
    			echo (" : ");
    			echo $reqlignecde;
    			echo("<br>");
    		}
    ?>
    Voilà, ce qu'il faut savoir, c'est que mes echo affichent ceci :

    INSERT INTO commandes ( idclient, datecde, prixtotal, etat ) VALUES ( '15', '1260365086', '215', '1' )

    ligne 0 : INSERT INTO lignecde ( idcde, refproduit, qte, prix, lg, diam, couleur, texte, idecrin ) VALUES ( '', 's004cln', '1', '65', '17.4', '3', '', '', '' )

    ligne 1 : INSERT INTO lignecde ( idcde, refproduit, qte, prix, lg, diam, couleur, texte, idecrin ) VALUES ( '', 'p005vrs', '1', '150', '17.4', '4.5', 'rose', '', '2' )

    Je vais dans ma BDD et là RIEN !! NÉANT !!!

    Alors je me pose la question sur la justesse de ma requête et je vais sagement copier coller ces quelques lignes (en prenant soin de mettre l'identifiant de la commande manuellement)...

    MIRACLE : ça marche...

    Quelqu'un peut m'expliquer ?

  2. #2
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Commence par mettre des "or die(mysql_error())" après tes mysql_query pour voir si il y a un plantage ou pas.

    Ton premier INSERT doit pas bien se passer vu qu'après $commande_id a l'air vide.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 17
    Par défaut
    Effectivement ça coupe et ça me met le message d'erreur suivant :

    Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

    Alors que juste avant j'ai une requête qui fonctionne


    En fait pour idcde, si la 1ere requete réussi la fonction

    $commande_id = mysql_insert_id();

    va me retourner l'id de la commande donc en fait ce que j'ai fait pour tester les lignes suivantes, c'est simplement de renseigner l'idcde manuellement.

  4. #4
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Tu peux donner la déclaration de tes deux tables stp ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 17
    Par défaut
    Bien sûr (enfin je crois ^^)

    CREATE TABLE `commandes` (
    `idcde` int(11) NOT NULL auto_increment,
    `idclient` int(11) NOT NULL,
    `datecde` int(11) NOT NULL,
    `prixtotal` float NOT NULL,
    `etat` int(2) NOT NULL,
    PRIMARY KEY (`idcde`)
    )

    CREATE TABLE `lignecde` (
    `idligne` int(11) NOT NULL auto_increment,
    `idcde` int(11) NOT NULL,
    `refproduit` varchar(10) collate latin1_german2_ci NOT NULL,
    `qte` int(11) NOT NULL,
    `prix` float NOT NULL,
    `lg` float NOT NULL,
    `diam` float NOT NULL,
    `couleur` varchar(10) collate latin1_german2_ci NOT NULL,
    `texte` varchar(255) collate latin1_german2_ci NOT NULL,
    `idecrin` int(11) NOT NULL,
    PRIMARY KEY (`idligne`)
    )

    C'est généré automatiquement par l'outil SQL que j'ai sur mon hébergeur.

  6. #6
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Déjà à cause des NOT NULL les insertion ne pourront se faire (INSERT avec des champs null <-> '' pour un int ....

    Reste l'index !

    Dans la table commandes l'insertion se fait ?

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Par défaut
    Tu as essayer de faire un copier coller sans rien toucher à ta requête?
    Je pense que le fait que ton idcde soit vide pose souci.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/11/2011, 11h02
  2. Réponses: 4
    Dernier message: 05/04/2011, 11h42
  3. Réponses: 1
    Dernier message: 27/11/2010, 15h43
  4. fonction qui ne s'execute pas mais qui ne retourne pas d'erreur
    Par duplo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/06/2006, 21h43

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