Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/10/2007, 10h11   #1
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

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

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
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 :
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 ?

Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 12h24   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
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
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 13h20   #3
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

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

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
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

Citation:
[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 :
$diffData = array_diff_assoc($this->_data, $this->_cleanData);
C'est assez bizarre...
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 13h21   #4
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

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

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
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.
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 15h43   #5
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

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

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
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 :
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 :
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
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 16h06   #6
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
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
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 16h11   #7
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

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

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
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 :

Citation:
[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
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 16h22   #8
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
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
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 07h19   #9
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

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

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
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.
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 14h10   #10
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

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

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
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
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h59.


 
 
 
 
Partenaires

Hébergement Web