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 :

Petit problème d'exécution


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Full Stack
    Inscrit en
    Novembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Novembre 2008
    Messages : 14
    Par défaut Petit problème d'exécution
    Bonjour,

    Je souhaite faire la réception d'un questionnaire dans une base de donnée (22 questions) et j'ai un petit problème de requête.
    Effectivement, lorsque le champ ID est en auto increment, le code suivant me mets une question différente sur chaque id, jusque là logique,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    			for($i=0; $i<22; $i++)
    			{
    				$j = $i + 1;
    				$req = $bdd->prepare('INSERT INTO reponse_formulaire(Q'.$j.') VALUES(:reponse)') OR die('Problème de préparation');
    				$req->execute(array(
    					'reponse' => $question[$i]
    				)) OR die('Problème d\'éxécution');
    			}
    Et si j'enlève l'auto increment et que j'initialise l'id, seule la question 1 aura sa réponse, même avec une balise update.
    Quand au 2ème bout de code que j'ai mis en remplacement, il ne s’exécute pas, la requête est valide testé directement dans la BDD, mais l'exécution de l'array pose problème.

    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
     
    			$req = $bdd->prepare('INSERT INTO reponse_formulaire(Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q17, Q18, Q19, Q20, Q21, Q22) VALUES(:reponse1, :reponse2, :reponse3, :reponse4, :reponse5, :reponse6, :reponse7, :reponse8, :reponse9 :reponse10, :reponse11, :reponse12, :reponse13, :reponse14, :reponse15, :reponse16, :reponse17, :reponse18, :reponse19, :reponse20, :reponse21, :reponse22)') OR die('Problème de préparation');
    			$req->execute(array(
    				'reponse1' => $question[0],
    				'reponse2' => $question[1],
    				'reponse3' => $question[2],
    				'reponse4' => $question[3],
    				'reponse5' => $question[4],
    				'reponse6' => $question[5],
    				'reponse7' => $question[6],
    				'reponse8' => $question[7],
    				'reponse9' => $question[8],
    				'reponse10' => $question[9],
    				'reponse11' => $question[10],
    				'reponse12' => $question[11],
    				'reponse13' => $question[12],
    				'reponse14' => $question[13],
    				'reponse15' => $question[14],
    				'reponse16' => $question[15],
    				'reponse17' => $question[16],
    				'reponse18' => $question[17],
    				'reponse19' => $question[18],
    				'reponse20' => $question[19],
    				'reponse21' => $question[20],
    				'reponse22' => $question[21]
    			)) OR die('Problème d\'éxécution');
    Je précise que les variables sont initialisée comme suit :

    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    			$Q2 = "";
    			foreach($_POST['Q2'] as $valeur)
    			{
    				$Q2 = $Q2." ".$valeur;
    			}
     
    			$Q6 = "";
    			foreach($_POST['Q6'] as $valeur)
    			{
    				$Q6 = $Q6." ".$valeur;
    			}
     
    			$Q8 = "";
    			foreach($_POST['Q8'] as $valeur)
    			{
    				$Q8 = $Q8." ".$valeur;
    			}
     
    			$Q10 = "";
    			foreach($_POST['Q10'] as $valeur)
    			{
    				$Q10 = $Q10." ".$valeur;
    			}
     
    			$Q11 = "";
    			foreach($_POST['Q11'] as $valeur)
    			{
    				$Q11 = $Q11." ".$valeur;
    			}
     
    			$Q15 = "";
    			foreach($_POST['Q15'] as $valeur)
    			{
    				$Q15 = $Q15." ".$valeur;
    			}
     
    			$Q18 = "";
    			foreach($_POST['Q18'] as $valeur)
    			{
    				$Q18 = $Q18." ".$valeur;
    			}
     
    			if (isset($_POST['Q19']))
    			{
    				$Q19 = "";
    				foreach($_POST['Q19'] as $valeur)
    				{
    					$Q19 = $Q19." ".$valeur;
    				}
    			} else
    			{
    				$Q19 = "00:00 00:00";
    			}
     
    			if (isset($_POST['Q20']))
    			{
    				$Q20 = "";
    				foreach($_POST['Q20'] as $valeur)
    				{
    					$Q20 = $Q20." ".$valeur;
    				}
    			} else
    			{
    				$Q20 = "00:00 00:00";
    			}
     
    			$question = array ($_POST['Q1'],
    								$Q2,
    								$_POST['Q3'],
    								$_POST['Q4'],
    								$_POST['Q5'],
    								$Q6,
    								$_POST['Q7'],
    								$Q8,
    								$_POST['Q9'],
    								$Q10,
    								$Q11,
    								$_POST['Q12'],
    								$_POST['Q13'],
    								$_POST['Q14'],
    								$Q15,
    								$_POST['Q16'],
    								$_POST['Q17'],
    								$Q18,
    								$Q19,
    								$Q20,
    								$_POST['Q21'],
    								$_POST['Q22']);
    Les question 2, 6, 8, 10, 11, 15, 18 sont des array de checkbox et les 19 et 20 sont des horaires ouverture et fermeture donc deux champs date.

    J'attends vos avis sur mon problème, j'ai déjà une piste qu'il faut que j'explore encore aujourd'hui, transformer mon tableau en tableau de char avec "'".$_POST['Q16']."'" voir si il y a exécution ou pas, les réponses dans la BDD étant définies comme des varchar.

  2. #2
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    Il manque des : apparemment dans
    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
    $req->execute(array(
    				'reponse1' => $question[0],
    				'reponse2' => $question[1],
    				'reponse3' => $question[2],
    				'reponse4' => $question[3],
    				'reponse5' => $question[4],
    				'reponse6' => $question[5],
    				'reponse7' => $question[6],
    				'reponse8' => $question[7],
    				'reponse9' => $question[8],
    				'reponse10' => $question[9],
    				'reponse11' => $question[10],
    				'reponse12' => $question[11],
    				'reponse13' => $question[12],
    				'reponse14' => $question[13],
    				'reponse15' => $question[14],
    				'reponse16' => $question[15],
    				'reponse17' => $question[16],
    				'reponse18' => $question[17],
    				'reponse19' => $question[18],
    				'reponse20' => $question[19],
    				'reponse21' => $question[20],
    				'reponse22' => $question[21]
    			)) OR die('Problème d\'éxécution');
    Tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $req->execute(array(
    				':reponse1' => $question[0],
    				':reponse2' => $question[1],
    ...

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Full Stack
    Inscrit en
    Novembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Novembre 2008
    Messages : 14
    Par défaut
    Bonjour,

    Malheureusement, faire ':reponse0' au lieu de 'reponse0' n'a rien donné, mon "die" se lance, mais pas dans le cas de la boucle.. ce cas me laisse perplexe quand même..

  4. #4
    Membre chevronné
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Par défaut
    Citation Envoyé par game-master-en-herbe Voir le message
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for($i=0; $i<22; $i++)
    {
       $j = $i + 1;
       $req = $bdd->prepare('INSERT INTO reponse_formulaire(Q'.$j.') VALUES(:reponse)') OR die('Problème de préparation');
       $req->execute(array(
       'reponse' => $question[$i]
          )) OR die('Problème d\'éxécution');
    }
    Que vaut $question[$i], c'est le tableau contenant tes questions je suppose. Si oui, s'il est bien rempli (à toi de le faire) il te faut le parcourir pour l'insertion. Ce qui donne:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $i = 1 // Compteur des questions.
    foreach($question as $questionnaire){
       $req = $bdd->prepare("INSERT INTO reponse_formulaire(Q{$j}) VALUES(:reponse)") OR die('Problème de préparation');
       $req->execute(array(
       ":reponse" => $questionnaire
          )) OR die('Problème d\'éxécution');
       $i++;
    }

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Full Stack
    Inscrit en
    Novembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Novembre 2008
    Messages : 14
    Par défaut
    Citation Envoyé par Nazoïde Voir le message

    Que vaut $question[$i], c'est le tableau contenant tes questions je suppose. Si oui, s'il est bien rempli (à toi de le faire) il te faut le parcourir pour l'insertion. Ce qui donne:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $i = 1 // Compteur des questions.
    foreach($question as $questionnaire){
       $req = $bdd->prepare("INSERT INTO reponse_formulaire(Q{$j}) VALUES(:reponse)") OR die('Problème de préparation');
       $req->execute(array(
       ":reponse" => $questionnaire
          )) OR die('Problème d\'éxécution');
       $i++;
    }
    Alors pour te répondre, oui $question[$i] contient les retours des questions qu'on a précédemment remplies (le code de l'initialisation de ce tableau est d'ailleurs dans le 3ème bout de code de mon post initial).
    Ensuite, effectivement, je n'avais pas pensé a un foreach au lieu du for classique, mais le problème n'étant pas dans la boucle ça ne résous pas mon soucis, enfin, si jamais j'arrive à garder un id fixe avec la boucle je suis preneur aussi!

    Merci quand même du temps passé et de la réponse

  6. #6
    Membre chevronné
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $i = 1 // Compteur des questions.
    foreach($question as $questionnaire){
       $req = $bdd->prepare("INSERT INTO reponse_formulaire(Q{$i}) VALUES(:reponse)") OR die('Problème de préparation');
       $req->execute(array(
       ":reponse" => $questionnaire
          )) OR die('Problème d\'éxécution');
       $i++;
    }
    J'ai modifié Q{$j} en Q{$i}, car c'est $i qui est initialisé en entrée du foreach.

  7. #7
    Membre chevronné
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Par défaut
    Je ne me souci pas de tout le reste de ton code. Je me focalise sur l'optimisation de l'insertion, supposant que tu as bien fait le reste.

  8. #8
    Membre chevronné
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Par défaut
    Debug en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    print_r(
       foreach($question as $questionnaire){
       $req = $bdd->prepare("INSERT INTO reponse_formulaire(Q{$i}) VALUES(:reponse)") OR die('Problème de préparation');
       $req->execute(array(
       ":reponse" => $questionnaire
          )) OR die('Problème d\'éxécution');
       $i++;
       }
    )
    et analyse le résultat

Discussions similaires

  1. Petit problème d'exécution
    Par Jiyuu dans le forum Tkinter
    Réponses: 7
    Dernier message: 29/06/2007, 14h53
  2. Petit problème d'exécution
    Par Print' dans le forum Delphi
    Réponses: 6
    Dernier message: 26/03/2007, 21h15
  3. petit problème premier plan, arrière plan
    Par gros bob dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2004, 12h00
  4. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55
  5. Problème à l'exécution avec wxWindows (compilé avec BCC55)
    Par ShootDX dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 14/11/2003, 18h04

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