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 :

[1.0.2] HTTP 500 Internal Server Error en faisant un save()


Sujet :

Zend Framework PHP

  1. #1
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut [1.0.2] HTTP 500 Internal Server Error en faisant un save()
    Bonjour,

    J'ai une erreur que je suis incapable de comprendre. Ca fait un bon moment que je suis dessus et je comprends vraiment pas

    Voilà le bout de code incriminé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $current = $this->demandes->find($this->getFilteredPost('id'))->current();
     
    $current->state = 1;
     
    Zend_Registry::get('logger')->info($current->projet->name);
     
    $current->save();
    Si je commente :

    Ca marche bien. Mais dès qu'il n'est pas commenté, il me plante une HTTP 500 Internal Server Error

    J'utilise le même genre de code partout, je vois pas ce qui peux faire qu'il ne marche pas...

    Le log m'affiche juste le nom du projet de la demande, ça veut dire qu'il la trouve correctement, mais il n'arrrive pas à me la sauvegarder.

    Quelqu'un aurait une idée d'ou peut venir le problème ?


  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 397
    Points : 15 759
    Points
    15 759
    Par défaut
    si tu as une erreur 500 tu dois surement retrouver sa trace dans les log d'erreur d'Apache
    donne le message d'erreur complet

  3. #3
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par mathieu Voir le message
    si tu as une erreur 500 tu dois surement retrouver sa trace dans les log d'erreur d'Apache
    donne le message d'erreur complet
    Je suis vraiment con

    je savais même pas qu'il y avait un log des erreurs PHP

    [08-Oct-2007 13:14:20] PHP Catchable fatal error: Object of class Zend_Db_Table_Row could not be converted to string in C:\wamp\www\cooper\library\Zend\Db\Table\Row\Abstract.php on line 371
    C'est sûr cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $diffData = array_diff_assoc($this->_data, $this->_cleanData);
    C'est assez bizarre...

  4. #4
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Ah bien sûr

    C'est relatif à mon Full Loading, je pense...

    Car, comme je fais du Full Loading, j'ai des des Row à la place de String dans les colonnes de mon objet. Il faut que je le retransforme dans un format sauvegardable avant.

  5. #5
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Bon, en fait, c'est peut-être pas ça

    J'ai toujours la même erreur alors que je réinitialise le Row avec les données de base (les ID).

    J'ai vérifié ça comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Zend_Registry::get('logger')->info($current->projet->name);
    Zend_Registry::get('logger')->info($current->statut->name);
    Zend_Registry::get('logger')->info($current->type->name);
     
    $this->demandes->unload($current);
     
    Zend_Registry::get('logger')->info($current->projet);
    Zend_Registry::get('logger')->info($current->statut);
    Zend_Registry::get('logger')->info($current->type);
    Et après mon unload, j'ai bien les valeurs directement des ID dans la Row, mais l'erreur est toujours là quand je fais un save() sur le current...

    Si ça peut aider, voilà, comment j'ai implémenté le Full Loading :

    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
    <?php
    	abstract class CooperModel extends Zend_Db_Table {
    		protected function _fetch($where = null, $order = null, $count = null, $offset = null){ 
    			$rows = parent::_fetch($where, $order, $count, $offset); 
     
    			if(isset($this->_relations) && !empty($this->_relations)){
    				if (is_array($rows) && !empty($rows)){ 
    					$models = $this->initModels();
     
    					foreach($rows as &$row){ 
    						foreach ($models as $column => $model){ 
    							if(array_key_exists($column, $row)){
    								$row[$column] = $model->find($row[$column])->current(); 
    							} 
    						}
    					} 
    				}
    			}
     
    			return $rows; 
    		}
     
    		public function createRow(array $data = array()){
    			$row = parent::createRow($data);
     
    			if(isset($this->_relations) && !empty($this->_relations)){
    				$models = $this->initModels();
     
    				foreach ($models as $column => $model){ 
    					$row->$column = $model->createRow();
    				}
    			}
     
    			return $row;
    		}
     
    		private function initModels(){
    			$models = array ();
     
    			foreach ($this->_relations as $columnName => $modelClass){
    				Zend_Loader::loadClass($modelClass); 		//Chargement du modèle
    				$models[$columnName] = new $modelClass(); 	//Instanciation du modèle
    			}
     
    			return $models;
    		}
     
    		public function unload($row){
    			$models = $this->initModels();
     
    			foreach ($models as $column => $model){
    				$row->$column = $row->$column->id;
    			}
    		}
     
    		public function reload($row){
    			$models = $this->initModels();
     
    			foreach ($models as $column => $model){
    				$row->$column = $model->find($row->$column)->current();
    			}
    		}
    	}
    ?>
    Si quelqu'un a une idée, ce serait super parce que là, je sèche un peu

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 397
    Points : 15 759
    Points
    15 759
    Par défaut
    je me répète
    Citation Envoyé par mathieu Voir le message
    si tu as une erreur 500 tu dois surement retrouver sa trace dans les log d'erreur d'Apache
    donne le message d'erreur complet

  7. #7
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par mathieu Voir le message
    je me répète
    J'ai pas d'erreur Apache. J'ai juste l'erreur PHP que j'ai indiquée plus haut :

    [08-Oct-2007 13:14:20] PHP Catchable fatal error: Object of class Zend_Db_Table_Row could not be converted to string in C:\wamp\www\cooper\library\Zend\Db\Table\Row\Abstract.php on line 371

  8. #8
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 397
    Points : 15 759
    Points
    15 759
    Par défaut
    l'erreur 500 est générée par le serveur et pas par le code PHP (sauf si c'est le but de ton code ) donc tu dois forcement avoir une trace dans le fichier error.log

  9. #9
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par mathieu Voir le message
    l'erreur 500 est générée par le serveur et pas par le code PHP (sauf si c'est le but de ton code ) donc tu dois forcement avoir une trace dans le fichier error.log
    Non, c'est pas le but de mon code, mais je n'ai rien dans les logs du serveur Apache

    La seule erreur que j'ai est celle qui arrive dans php_error.log et que j'ai donnée plus haut.

  10. #10
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    J'ai (enfin) résolu mon problème

    En fait, c'est assez tordu par les cheveux, mais c'est logique.

    Comme je fais du Full Loading, le contenu du tableau de données dans l'enregistrement sont des objets qui ne peuvent pas être comparé l'un à l'autre directement.

    J'ai donc fait une méthode qui me permet d'"unloader" mes Row avant les enregistrer, mais ça ne marchait pas. Car en fait Zend framework crée une copie des données pour pouvoir ensuite les comparer avant de faire un update pour savoir ce qui a changé. C'était donc ce tableau qui contenait les données en Full Loading. J'ai donc aussi "unloader" cette copie des données pour qu'il puisse faire la comparaison et là, ça marche très bien

    Merci bien mathieu

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

Discussions similaires

  1. Erreur HTTP 500 (Internal Server Error)
    Par niuxe dans le forum Apache
    Réponses: 2
    Dernier message: 11/07/2011, 19h53
  2. HTTP/1.x 500 Internal Server Error inexplicable
    Par hornetbzz dans le forum Apache
    Réponses: 5
    Dernier message: 06/01/2010, 06h26
  3. abort: HTTP Error 500: Internal Server Error
    Par cyberps2 dans le forum Autres DVCS
    Réponses: 1
    Dernier message: 14/10/2009, 11h59
  4. [CXF] RESTful HTTP Binding Demo : 500 Internal Server Error
    Par raf64flo dans le forum Services Web
    Réponses: 1
    Dernier message: 08/04/2009, 14h28
  5. [SERVLET][STRUTS]Error 500--Internal Server Error
    Par Devil666 dans le forum Struts 1
    Réponses: 7
    Dernier message: 27/06/2005, 13h07

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