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

Zend Framework PHP Discussion :

Erreur incompréhensible pour une débutante [ZF 1.10]


Sujet :

Zend Framework PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 45
    Points : 29
    Points
    29
    Par défaut Erreur incompréhensible pour une débutante
    Bonjour à tous,


    Je suis face à une erreur dont je ne comprends absolument pas la signification, étant débutante avec Zend :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception'
    with message 'Invalid controller specified (var)' 
    in/var/www/html/playtest/library/Zend/Controller/Dispatcher/Standard.php:249 
    Stack trace: #0 
    /var/www/html/playtest/library/Zend/Controller/Front.php(914): 
    Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), 
    Object(Zend_Controller_Response_Http)) #1 
    /var/www/html/playtest/index.php(44): Zend_Controller_Front->dispatch() 
    #2 {main} thrown in 
    /var/www/html/playtest/library/Zend/Controller/Dispatcher/Standard.php on line 249
    Le contexte :
    Une base de données MySQL qui permet de gérer des joueurs. J'ai une fonctionnalité qui permet d'avoir des profils en attente de validation. La validation de TOUS LES PROFILS en attente se fait par un click sur un bouton. Depuis quelques temps, quand je clique sur ce bouton, au lieu de tout valider, ma fonction ne valide les profils un par un, et pas forcément dans un ordre logique. J'ai regardé le code de la fonction (que je n'ai pas programmée, je récupère l'outil tout juste), et rien ne m'a semblé étrange. J'ai fais un echo de l'exception que je supposais attrapée dans le catch de la fonction, et me voila bien avancée : je ne comprends rien du tout à l'exception



    EDIT : J'ai pensé que le catch du code était étrange car il attrapait "Exception" qui me paraissait trop général. Du coup j'ai essayé d'attraper "Zend_Exception", qui ma renvoyé une autre exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry
    Que je ne comprends pas plus ... ^^

  2. #2
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    Bonjour,

    Il te dit qu'il ne trouve pas le controlleur 'var'.
    Il cherche en fait le fichier VarController.php

    ça se trouve le lien du bouton est juste faux....
    Peux-tu montrer le code?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Mmmh avec plaisir, mais quelle partie du code ? La page fait plus de 400 lignes

  4. #4
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    Le code html du bouton pour commencer

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Je pense que c'est ce morceau là, comme dit, Zend et moi ne sommes pas bien copains, du coup ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <h1><?php echo $this->escape($this->title); ?></h1>
     
    <p><a href="<?php echo $this->baseUrl ?>/mailbox/validerall/">Valider toutes les actions</a></p>
    <br>


    Et la fonction appelée Validerall :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <h1><?php echo $this->escape($this->title); ?></h1>
     
    <form id="validerall" action="<?php echo $this->baseUrl ?>/mailbox/validerall" method="post">
    <p>&Ecirc;tes-vous certain de vouloir valider tous les candidats en attente?</p>
    <div>
      <input type="hidden" value="<?php echo $_SERVER['HTTP_REFERER']; ?>" name="url" />
      <input type="submit" id="lien_appel_8083" name="del" value="Oui" onclick="ajax('<?php echo $this->baseUrl ?>/mailbox/validerall','validerall','result','<?php echo $this->baseUrl ?>')" />
      <input type="submit" name="del" value="Non" />
      <br />
      <div id="result"></div>
    </div>
    </form>

  6. #6
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    Tu peux me donner le code html du bouton qui s'affiche dans ton navigateur aussi?

    T'es débutante en Zend mais tu connais bien php quand-même?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    J'ai fais du php en deuxième année de fac c'est tout Et concernant Zend, je ne maitrise pas du tout la modèle MVC, on m'a collé le code dans les mains ce matin en me disant que c'était urgent \o/
    Du coup pardonne-moi j'ai du mal à me repérer dans le code

    Et le bouton est en fait un lien, celui linké. Quand tu clique sur le lien, d'après ce que je lis dans le code, il y a un for each qui se lance, qui valide un par un les profils en boucle. Quand tu cliques sur le lien, une page de confirmation s'affiche (classiques boutons oui et non). J'éspère être un peu plus claire, je n'emploie peut être pas les bonnes formules

    L'outils marchait très bien il y a une semaine ... et je n'ose pas vider un éventuel cache de la BDD :/

    Par contre peut être as-tu raté mon premier edit :
    Citation Envoyé par Nelpha Voir le message
    Bonjour à tous,

    EDIT : J'ai pensé que le catch du code était étrange car il attrapait "Exception" qui me paraissait trop général. Du coup j'ai essayé d'attraper "Zend_Exception", qui ma renvoyé une autre exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry
    Que je ne comprends pas plus ... ^^

  8. #8
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    Ah mince non j'ai pas vu...... désolé
    Visiblement tu as un champ dans ta base qui interdit les doublons

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Alors je suis dans le code de la page nommée MailboxController, qui est donc le contrôleur de la page qui permet de tout valider (nommée Mailbox). La fonction appelée est la suivante :
    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    public function validerallAction()
    	{
     
    		$this->view->title = "Valider toutes les actions en attentes (Inscription/Participation)";
     
    		$mail = new Zend_Mail_Storage_Pop3(array('host' => '*******',
    		                                         'user'     => '*****',
    		                                         'port'		=> 110,
    		                                         'password' => '*****'));
    			if ($this->_request->isPost()) 
    			{
    				$id_message = (int)$this->_request->getPost('id_message');
    				$del = $this->_request->getPost('del');
    				$url = $this->_request->getPost('url');
     
    				if ($del == 'Oui') 
    				{	
    					$myFile = "application/views/scripts/mailbox/LastValidation.txt";
    					$fh = @fopen($myFile, 'w') ;
    					$currentDate = time();
    					fwrite($fh, $currentDate);
    					fclose($fh);
    					foreach ($mail as $numeroDeMessage => $message) 
    					{
     
    						try
    						{
    							if(!preg_match("#playtest@webprod.***.net#",$message->from))
    							{
    								$mail->getMessage($numeroDeMessage);
    								$mail->removeMessage($numeroDeMessage); //------> This comment will be removed after tests was made
    							}
    						// valide les participation
    							if(preg_match("#participation#",$message->subject))
    							{
    								$getContent = utf8_encode($message->getContent());
    								$candidat_session = simplexml_load_string(trim($getContent));
    								$id_candidat = (int)$candidat_session->id_candidat;
    								$id_session = (int)$candidat_session->id_session;
    								$cs = new CandidatSession();
    								$where = 'tb_candidat_id_candidat = '.$id_candidat.' AND tb_session_id_session = '.$id_session;
    								$select = $cs->fetchRow($where);
    								if(count($select)>0)
    								{	
    									$data = array(
    										'mail_ok' => '1',
    										'statut'  => '2',
    										);
     
    									$cs->update($data,$where);
    									$mail->getMessage($numeroDeMessage);
    									$mail->removeMessage($numeroDeMessage); //------> This comment will be removed after tests was made
    								}
    								else
    								{
    									$mail->getMessage($numeroDeMessage);
    									$mail->removeMessage($numeroDeMessage); //------> This comment will be removed after tests was made
    								}
    							}
     
    							// valide les inscription/modification de session
    							if(preg_match("#inscription#",$message->subject))
    							{
    								$getContent = $message->getContent();
    								$candidat = simplexml_load_string(trim($getContent));
    								$id_candidat = "";
    								$nom = utf8_decode(ucfirst(strtolower($candidat->nom)));
    								$prenom = utf8_decode(ucfirst(strtolower($candidat->prenom)));
    								$email = utf8_decode(strtolower($candidat->email));
    								$telephone = trim($candidat->telephone);
    								$code_postal = trim($candidat->code_postal);
    								$adresse = utf8_decode(ucfirst(strtolower($candidat->adresse)));
    								$ville = utf8_decode(ucfirst(strtolower($candidat->ville)));
    								$sexe = $candidat->sexe;
    								$date_naissance = $candidat->date_naissance;
    								$date_creation = time();
    								$date_mise_a_jour = time();
    								$date_appel = 0;
     
     
    								$console = utf8_decode(trim($candidat->console));
    								$jeuxenligne = utf8_decode(trim($candidat->jeuxenligne));
    								$visitesitejeux = utf8_decode(trim($candidat->visitesitejeux));
    								$horaire = utf8_decode(trim($candidat->horaire));
    								$typejeu = utf8_decode(trim($candidat->typejeu));
    								$console = preg_replace("#,$#",'',utf8_decode($console));
    								$jeuxenligne = preg_replace("#,$#",'',utf8_decode($jeuxenligne));
    								$visitesitejeux = preg_replace("#,$#",'',utf8_decode($visitesitejeux));
    								$horaire = preg_replace("#,$#",'',utf8_decode($horaire));
    								$typejeu = preg_replace("#,$#",'',utf8_decode($typejeu));
    								$niveauAnglais = array('2' => utf8_decode($candidat->niveauAnglais));
     
    								if($console != '') 
    								{
    									$console = explode(",",$console);
    								}
    								else
    								{
    									$console[0] = '';
    								}
    								if($jeuxenligne != '') 
    								{
    									$jeuxenligne = explode(",",$jeuxenligne);
    								}
    								else
    								{
    									$jeuxenligne[0] = '';
    								}
    								if($visitesitejeux != '')
    								{
    									$visitesitejeux = explode(",",$visitesitejeux);
    								}
    								else
    								{
    									$visitesitejeux[0] = '';
    								}
    								if($horaire != '') 
    								{
    									$horaire = explode(",",$horaire);
    								}
    								else
    								{
    									$horaire[0] = '';
    								}
    								if($typejeu != '') 
    								{
    									$typejeu = explode(",",$typejeu);
    								}
    								else
    								{
    									$typejeu[0] = '';
    								}
     
    								$TheRegex = '/^(9[1-5]|7[4578]|34)\d{3}$/'; 
     
     
    								if (preg_match($TheRegex,$code_postal ))
    								{
    									//Fix the old inscription date problem
     
    									$date_naissance_old_format = $date_naissance - 14400;
     
    									//End Fix
    									$c = new Candidat();
    									//$where = "nom='".$nom."' AND prenom = '".$prenom."'";
    									$where = "nom='".$nom."' AND prenom = '".$prenom."' AND (date_naissance = '".$date_naissance."' OR date_naissance = '" . $date_naissance_old_format . "')" ;
    									$select = $c->fetchRow($where);
     
    									if(count($select)>0)
    									{
    										$id_candidat = $select->id_candidat;
    										$date_creation = $select->date_creation;
    										$date_appel = $select->date_appel;
     
    										$data = array(
    										//'id_candidat' => $id_candidat,
    										'nom' => stripslashes($nom),
    										'prenom'  => stripslashes($prenom),
    										'date_naissance'  => $date_naissance,
    										'sexe'  => $candidat->sexe,
    										'email'  => stripslashes($email),
    										'telephone'  => $telephone,
    										'code_postal'  => $code_postal,
    										'adresse'  => stripslashes($adresse),
    										'sexe'  => $sexe,
    										'ville'  => stripslashes($ville),
    										'date_creation'  => $date_creation,
    										'date_mise_a_jour'  => $date_mise_a_jour,
    										'date_appel'  => $date_appel,
    										);
     
    										$c->update($data, $where);
     
    										$candidat_console = new CandidatConsole();
    										$candidat_console->insert_tab($console,$id_candidat,'update');
    										$candidat_horaire = new CandidatHoraire();
    										$candidat_horaire->insert_tab($horaire,$id_candidat,'update');
    										$candidat_typejeu = new CandidatTypeJeu();
    										$candidat_typejeu->insert_tab($typejeu,$id_candidat,'update');
     
    										$candidat_visitesitejeux = new CandidatVisitesitejeux();
    										$candidat_visitesitejeux->insert_tab($visitesitejeux,$id_candidat,'update');
     
    										$candidat_jeuxenligne = new CandidatJeuxenligne();
    										$candidat_jeuxenligne->insert_tab($jeuxenligne,$id_candidat,'update');
     
    										$candidat_langue = new CandidatLangue();
    										$candidat_langue->insert_tab($niveauAnglais,$id_candidat,'update');
     
    										$localisation = substr($code_postal,0,2);
    										switch ($localisation)
    										{
    											case '74':  
    												$localisations[] = 2;
    												break;
    											case '34': 
    												$localisations[] = 3;
    												break;
    											default:
    												$localisations[] = 1;
    										}
     
    										$candidat_localisation = new CandidatLocalisation();
    										$candidat_localisation->insert_tab($localisations,$id_candidat,'update');
     
    										$mail->getMessage($numeroDeMessage);
    										$mail->removeMessage($numeroDeMessage);
    									}
    									else
    									{
    										$data = array(
    										//'id_candidat' => $id_candidat,
    										'nom' => stripslashes($nom),
    										'prenom'  => stripslashes($prenom),
    										'date_naissance'  => $date_naissance,
    										'sexe'  => $candidat->sexe,
    										'email'  => stripslashes($email),
    										'telephone'  => $telephone,
    										'code_postal'  => $code_postal,
    										'adresse'  => stripslashes($adresse),
    										'sexe'  => $sexe,
    										'ville'  => stripslashes($ville),
    										'date_creation'  => $date_creation,
    										'date_mise_a_jour'  => $date_mise_a_jour,
    										'date_appel'  => $date_appel,
    										);
     
    										$id_candidat = $c->insert($data);
    										$c = new Candidat();
    										//$where = "nom='".$nom."' AND prenom = '".$prenom."'";
    										$where = "nom='".$nom."' AND prenom = '".$prenom."' AND date_naissance = '".$date_naissance."'";
     
    										$select = $c->fetchRow($where);
     
    										if($select != NULL)
    										{
    											$id_candidat = $select->id_candidat;
    										}
     
    										// langues....
    										$candidat_langue = new CandidatLangue();
    										$candidat_langue->insert_tab($niveauAnglais,$id_candidat,'insert');
     
    										//rajouter ici si de nouvelles langues sont int?gr?
    										//$candidat_langue->insert_tab(1,$niveauAnglais,$id_candidat,'insert');
     
     
    										if( count($console)>0 && $console[0] != '')
    										{
    											$candidat_console = new CandidatConsole();
    											$candidat_console->insert_tab($console,$id_candidat,'insert');
    										}
    										if(count($horaire)>0 && $horaire[0] != '')
    										{
    											$candidat_horaire = new CandidatHoraire();
    											$candidat_horaire->insert_tab($horaire,$id_candidat,'insert');
    										}
    										if(count($typejeu)>0 && $typejeu[0] != '')
    										{
    											$candidat_typejeu = new CandidatTypeJeu();
    											$candidat_typejeu->insert_tab($typejeu,$id_candidat,'insert');
    										}
    										if(count($visitesitejeux)>0 && $visitesitejeux[0] != '')
    										{
    											$candidat_visitesitejeux = new CandidatVisitesitejeux();
    											$candidat_visitesitejeux->insert_tab($visitesitejeux,$id_candidat,'insert');
    										}
    										if(count($jeuxenligne)>0 && $jeuxenligne[0] != '')
    										{
    											$candidat_jeuxenligne = new CandidatJeuxenligne();
    											$candidat_jeuxenligne->insert_tab($jeuxenligne,$id_candidat,'insert');
    										}
    										//Fix Y.Robin 16/07/2010
    										$localisation = substr($code_postal,0,2);
    										switch ($localisation)
    										{
    											case '74':  
    												$localisations[] = 2;
    												break;
    											case '34': 
    												$localisations[] = 3;
    												break;
    											default:
    												$localisations[] = 1;
    										}
     
    										$candidat_localisation = new CandidatLocalisation();
    										$candidat_localisation->insert_tab($localisations,$id_candidat,'insert');
    										//End Fix Y.Robin 16/07/2010
    										$mail->getMessage($numeroDeMessage);
    										$mail->removeMessage($numeroDeMessage);
    									}
    									 //------> This comment will be removed after tests was made 
    								}
    								else
    								{
    									$mail->getMessage($numeroDeMessage);
    									$mail->removeMessage($numeroDeMessage);
    								}
    							}
    							else
    							{
    								$mail->getMessage($numeroDeMessage);
    								$mail->removeMessage($numeroDeMessage);
    							}
     
    						}
    					catch (Zend_Db_Exception $e){echo $e->getMessage();}
    					//$mail->getMessage($numeroDeMessage);
    					//$mail->removeMessage($numeroDeMessage);
     
    					}
    					echo "Importation OK";
     
    					//$this->_redirect($url);
    				}
    				else
    				{
    					$this->_redirect($url);
    				}
    			} 
    			else 
    			{
    				$id_message = (int)$this->_request->getParam('id_message');
    				if ($id_message > 0) 
    				{
    					// only render if we have an id and can find the album.
    					$this->view->mail = $mail->getMessage($id_message);
    					$this->view->mail->id_message = $id_message;
     
    					$this->view->candidat = simplexml_load_string(trim($mail->getRawContent($id_message)));
     
    					if ($mail->getMessage($id_message)) 
    					{
    						// render template automatically
    						return;
    					}
    				}
    			}
     
    	}

  10. #10
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    Donc du coup c'est une erreur mysql et non zend apparement?!

    car le message d'erreur t'indique une contrainte d'integrité, visiblement un des champ de ta table doit etre unique ou primary key.....

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Oui finalement c'est une erreur de database, en premier lieu c'était un catch mal utilisé en fait ...
    Et oui, dans la table en DB chaque joueur a un ID unique. Cependant, la liste des comptes en attente est issue d'une inscription sur le web par formulaire, et le candidat ne saisit pas d'ID.
    En revanche, comme la validation se fait dans une boucle, je pense qu'elle valide N profils, puis plante au N+1 et sort de la boucle sans vider la liste affichée. Du coup j'ai des profils validés ET présent dans la liste à valider ... je me demande si le problème que j'ai n'en cache pas un autre en fait ... étant donné que l'équipe utilisatrice a attendu un mois avant de me donner le paquet, et que dans ce laps de temps ils ont sans aucun doute tenté à plusieurs reprises de valider la liste :'(

    Je suppose que du coup mon problème n'a plus vraiment sa place dans la section Zend non ?

  12. #12
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    Ce que je vois dans le code de la méthode c'est que lorsqu'il faut créer un nouveau joueur, le champ id_candidat est commenté. Cela insinue qu'on laisse à la charge de mysql de générer l'id, donc id_candidat devrait être de type auto incrémental.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Oui tout à fait, c'est le cas le champ id_candidat est bien un auto incrément, et est bien la clef primaire. Du coup c'est pour cela que je ne comprend pas cette erreur de doublon ... pour moi, je devrai très bien pouvoir ajouter un même candidat quinze fois, MySQL lui affecterai un id_candidat nouveau et tout devrait rouler.

    J'ai lu que ce genre d'erreur pouvait se corriger en vidant le cache parfois ... mais je ne sais pas si c'est pertinent, et je ne l'ai jamais fait. Tu en penses quoi ?

  14. #14
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    c'est le seul champ de ta base à devoir etre unique? T'es sûre qu'il n'y en a pas d'autre?
    Car ça se trouve il y a un autre champ genre email qui doit être unique et genre quelqu'un qui s'est déjà inscrit essaie de s'inscrire à nouveau.....

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Oui je suis certaine que c'est le seul champ unique de la table . Cependant, quand un triplet (nom+prenom+datedenaissance) identique à ce qu'il y a déjà dans la base apparait, on met à jour le profil au lieu d'insérer.

    Pour info, l'image de la table dans MySQL :

  16. #16
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    J'ai lu que ce genre d'erreur pouvait se corriger en vidant le cache parfois ... mais je ne sais pas si c'est pertinent, et je ne l'ai jamais fait. Tu en penses quoi ?
    De quel cache me parle-tu? celui de ZF ou celui de ta base?

    Il est évident que si une table de la base est mise en cache et qu'une opération est effectuée dessus, il est préférable de vider le cache, sinon c'est la porte ouverte à toute les fenêtres!

    Faut avouer que c'est le bazar dans le code quand même!

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Je pensais au cache de la DB oui. Mais là, il va falloir que je trouve comment faire ça bien

    Et oui, c'est le bazar dans le code je trouve aussi, surtout que les commentaire utiles sont totalement inexistants ... génial pour reprendre derrière

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Ok, alors j'ai avancé. Pour commencer, je replace un peu le contexte :

    Les joueurs s'inscrivent pour des session de test. Ils créent un profil candidat via un formulaire web. A l'envoi du formulaire, une mailbox s'envoie elle-même un mail contenant les infos du formulaire.

    Côté user dans ma boite, on a une page web qui affiche la liste des profils de la mailbox, avec les infos associées. Sur cette page web, on peut soit supprimer des candidatures (une par une), soit cliquer sur un lien qui lance une boucle d'insertions des profils dans la DB. Mais, cette boucle n'efface les mails de la mailbox que si elle sort sans encombres. Or là, aucun mail de la mailbox n'est effacé, alors que les profils sont tous ajoutés dans la DB.

    Du coup, j'ai tenté d'effacer un des profils à valider (donc un mail de la mailbox). Et là surprise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Fatal error: 
    Uncaught exception 'Zend_Mail_Protocol_Exception' 
    with message 'last request failed' 
    in /var/www/html/playtest/library/Zend/Mail/Protocol/Pop3.php:182 
    Stack trace: 
    #0 /var/www/html/playtest/library/Zend/Mail/Protocol/Pop3.php(211): Zend_Mail_Protocol_Pop3->readResponse(true) 
    #1 /var/www/html/playtest/library/Zend/Mail/Protocol/Pop3.php(423): Zend_Mail_Protocol_Pop3->request('RETR 233', true) 
    #2 /var/www/html/playtest/library/Zend/Mail/Protocol/Pop3.php(390): Zend_Mail_Protocol_Pop3->retrieve(233) 
    #3 /var/www/html/playtest/library/Zend/Mail/Storage/Pop3.php(92): Zend_Mail_Protocol_Pop3->top(233, 0, true) 
    #4 /var/www/html/playtest/application/controllers/MailboxController.php(71): Zend_Mail_Storage_Pop3->getMessage(233) 
    #5 /var/www/html/playtest/library/Zend/Controller/Action.php(502): MailboxController->supprimerAction() 
    #6 /var/www/html/playtest/library/Zend/Controller/Dispatcher/Standard.php(293): Zend_Controller_Action->dispatch('supprimerAction') 
    #7 /var/www/html/playtest/library/Zend/Controller/Front.php
    ( in /var/www/html/playtest/library/Zend/Mail/Protocol/Pop3.php on line 182

    Je comprends que la stack trace me montre ce qui a été fait avant le throw de l'erreur. Mais j'ai du mal à être sur de ce que je dois comprendre de tout ça La fonction suprimerAction se crashe ?

    Le code de cette fonction :
    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
     
    if ($this->_request->isPost()) {
     
     
           $id_message = (int)$this->_request->getPost('id_message');
           $del = $this->_request->getPost('del');
           $url = $this->_request->getPost('url');
     
     
     
    if ($del == 'Oui' && $id_message > 0) {
     
           $mail->getMessage($id_message);
           $mail->removeMessage($id_message);
     
           $this->_redirect($url);
           }else{
    	$this->_redirect($url);
           }
        } else {
     
     
     
    $id_message = (int)$this->_request->getParam('id_message');
     
    if ($id_message > 0) {
    // only render if we have an id and can find the album.
    $this->view->mail = $mail->getMessage($id_message);
    $this->view->mail->id_message = $id_message;
     
    if ($mail->getMessage($id_message)) {
    // render template automatically
     
           return;
           }
    }
    }
     
    }

  19. #19
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    T'a une erreur avec Zend_Mail , visiblement il a essayé de se connecter en pop3 mais ça a échoué...

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Mmmh ... ok sympa ... je ne vois pas pour quelle raison vu que rien n'a changé, mais c'est pas grave je vais chercher !

    Merci pour ton coup de main

    J'ajouterai un post quand j'aurai trouvé ma solution ^^

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Erreur incompréhensible dans une jsp
    Par mithrendil dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 10/01/2008, 13h58
  2. Erreur incompréhensible dans une boucle
    Par Neuromancien2 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/08/2007, 16h48
  3. Erreur incompréhensible pour un neophyte
    Par josalco dans le forum Web
    Réponses: 5
    Dernier message: 23/03/2007, 14h35
  4. Réponses: 4
    Dernier message: 07/04/2006, 16h30
  5. erreur généré pour une convertion de donnée
    Par poporiding dans le forum C++
    Réponses: 6
    Dernier message: 04/04/2006, 11h01

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