Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous.
Voila je suis sur un projet assez complexe dont on doit développer avec une base de données. Cette base de donée est tellement énorme qu' on doit développer avec des vues SQL. Et donc pour éviter toute modification directement dans le code, j'utilise Zend_Db_Table_Abstract directement si vous voyez ce que je veux dire.
Mais ce n'est pas le soucis, mon soucis est que j'ai une requête SQL assez complexe ou dans la clause WHERE j'utilise le mot clé EXTRACT qui permet (aux non connaisseurs) de choisir soit que l'année d'un champ de type date, ou le mois, ou le jour. Donc pour commencer on a développé en faisant la requête directement dans le code :
$db = Zend_Registry::get('db'); $sql = sprintf("SELECT COD_OFF, LIB_OFF FROM INSSET.OFFRE_STAGE LEFT JOIN INSSET.ENTREPRISE_LOC USING(COD_ENT) LEFT JOIN INSSET.TUTEUR USING(COD_TUT) WHERE EXTRACT(YEAR FROM DATE_DEP) = %s AND EXTRACT(MONTH FROM DATE_DEP) = %s ORDER BY DATE_DEP DESC", $db->quote($annee), $db->quote($mois) ); $resultat = $db->fetchAll($sql);
Et donc ca fonctionne nickel comme ca, donc j'ai crée ma vue, ensuite fait ma page .php de Zend_db_table correspondante, et à la place de ma requête j'ai mis ca :
$db = Zend_Registry::get('db'); Zend_Db_Table_Abstract::setDefaultAdapter($db); require_once APPLICATION_PATH . '/models/DbTables/OffreStageEtudiant.php'; $tableIndex = new Model_DbTable_OffreStageEtudiant; $sql = $tableIndex->select() ->where("EXTRACT(YEAR FROM DATE_DEP) = ?",$year) ->where("EXTRACT(MONTH FROM DATE_DEP) = ?",$mois); $resultat = $db->fetchAll($sql);
Et voila que après cela il m'affiche une erreu bizare qui est :
Fatal error: Uncaught exception 'Zend_Controller_Response_Exception' with message 'Cannot send headers; headers already sent in /var/www/stageUPJV/branches/site/library/Application/Db/Vue/Abstract.php, line 20' in /var/www/stageUPJV/branches/site/library/Zend/Controller/Response/Abstract.php:281 Stack trace: #0 /var/www/stageUPJV/branches/site/library/Zend/Controller/Response/Abstract.php(299): Zend_Controller_Response_Abstract->canSendHeaders(true) #1 /var/www/stageUPJV/branches/site/library/Zend/Controller/Response/Abstract.php(727): Zend_Controller_Response_Abstract->sendHeaders() #2 /var/www/stageUPJV/branches/site/library/Zend/Controller/Front.php(984): Zend_Controller_Response_Abstract->sendResponse() #3 /var/www/stageUPJV/branches/site/application/bootstrap.php(69): Zend_Controller_Front->dispatch() #4 /var/www/stageUPJV/branches/site/www/index.php(3): require_once('/var/www/stageU...') #5 {main} thrown in /var/www/stageUPJV/branches/site/library/Zend/Controller/Response/Abstract.php on line 281
Et donc voila j'aimerai savoir si quelqu'un a déja eu ce problème, et si quelqu'un sait comment résoudre cela pour que je fasse avec la deuxième méthode.
Voila bonne journée à vous,
ClemClem
Dernière modification par ClemClem (10-02-2009 10:57:54)
Hors ligne
Encore je me disais bien avoir vu ce pseudo là quelque part
L'erreur est pourtant simple lorsqu'on la déchiffre :
Cannot send headers; headers already sent in /var/www/stageUPJV/branches/site/library/Application/Db/Vue/Abstract.php, line 20
Vraissemblablement dans ton document library/Application/Db/Vue/Abstract.php, tu affiche quelque chose et du coup les headers http sont envoyés et tu ne peut pas les réenvoyer plus loin.
Hors ligne
tu enlève tous les ?> en fin de tous tes fichier php
et ça devrait rentrer dans l'ordre
euprime aussi comme je l'ai vu dans de nombre cas les code contenant
<?php .... ?> <?php
car lorsque le parser lit ça il envois un \n (celui entre ?> et <?php) au client et ferme donc l'envois de header
de même que ?> en fin de fichier peut facilement se retrouver suivit de caractères invisibles qui sont anvoyé au client et bloquent donc l'envoie de headers.
A+JYT
Hors ligne
dmathieu a écrit:
Encore je me disais bien avoir vu ce pseudo là quelque part
C'est à dire? On c'est déja vu? Et ce n'est que mon premier message, tout comme toi
dmathieu a écrit:
L'erreur est pourtant simple lorsqu'on la déchiffre :
Cannot send headers; headers already sent in /var/www/stageUPJV/branches/site/library/Application/Db/Vue/Abstract.php, line 20
Vraissemblablement dans ton document library/Application/Db/Vue/Abstract.php, tu affiche quelque chose et du coup les headers http sont envoyés et tu ne peut pas les réenvoyer plus loin.
Autrement le soucis c'est que la deuxième méthode je l'utilise depuis longtemps sur d'autre requête et il n'y a que celle la avec le EXTRACT qui m'embete, autrement le reste ca fonctionne nickel chrome, mes autres requêtes ne sont fait qu'avec la deuxième méthode...
sekaijin a écrit:
tu enlève tous les ?> en fin de tous tes fichier php
et ça devrait rentrer dans l'ordre
euprime aussi comme je l'ai vu dans de nombre cas les code contenant
Code:Code:
<?php .... ?> <?phpcar lorsque le parser lit ça il envois un \n (celui entre ?> et <?php) au client et ferme donc l'envois de header
de même que ?> en fin de fichier peut facilement se retrouver suivit de caractères invisibles qui sont anvoyé au client et bloquent donc l'envoie de headers.
Oui c'est pas pour dire, mais j'ai déjà eu un cours dessus sur ce framework, et on m'a dit que chaque fin de fichier ne doit pas contenir les "?>"...
Donc l'erreur n'est pas la. Mais merci tous les deux de vouloir m'aider.
Dernière modification par ClemClem (09-02-2009 17:18:05)
Hors ligne
C'est à dire? On c'est déja vu? Et ce n'est que mon premier message, tout comme toi
Oui. Jeudi dernier, toute la journée. J'étais le gars en train de faire un cours incompréhensible sur l'estrade.
Hors ligne
dmathieu a écrit:
C'est à dire? On c'est déja vu? Et ce n'est que mon premier message, tout comme toi
Oui. Jeudi dernier, toute la journée. J'étais le gars en train de faire un cours incompréhensible sur l'estrade.
Ha oui Damien, mais non il était sympa le cours bon dommage que Aptana n'a pas fonctionné comme il fallait au début.
Bon évitons de flooder ici, et revenons à nos moutons ...
Hors ligne
ClemClem a écrit:
Oui c'est pas pour dire, mais j'ai déjà eu un cours dessus sur ce framework, et on m'a dit que chaque fin de fichier ne doit pas contenir les "?>"...
Donc l'erreur n'est pas la. Mais merci tous les deux de vouloir m'aider.
Facultatif.. Ils y sont sur Be-Zend
Si tu veux, tu me monteras demain et j'essayerais de voir avec toi.
Dans tous les cas, je ne sais pas à quoi il sert ton Zend_Db_Table_Abstract ?
Hors ligne
peux tu nous donner le code de la Application_Db_Vue_Abstract qu'on vois ce qu'il s'y passe
ce n'est pas parce que ça marche bien une fois que tu est passé dans toutes les partie de ton code et que donc ça marchera à chaque fois
A+JYT
Hors ligne
Alors voila j'ai regardé que pour utiliser le Zend_db_table il fallait mettre ca, ca fonctionne comme ca je ne vais pas changer
Autrement voila l'extrait de ma classe Application_Db_Vue_Abstract :
<?php class Application_Db_Vue_Abstract extends Zend_Db_Table_Abstract { public function insert(array $data) { throw new Zend_Exception('Insertion interdit'); return false; } public function update(array $data, $where) { throw new Zend_Exception('update interdit'); return false; } }
Mais bon voila je l'ai fait je ne sais pas combien de fois et c'est avec le EXTRACT qui m'embete.... Ca veut bien dire qu'il n'accepte pas quelque chose...
Hors ligne
Tu sais que j'ai toujours pas saisi ton problème avec EXTRACT...
Dans tous les cas, si le problème de ton topic est résolu et que tu peux mettre à jour le titre, rajoute [RESOLU] devant
Hors ligne
Ba non il n'est pas résolu... On ne m'as pas donné la solution. Mais bon je vois que tout le monde est comme moi et qui bloque sur ca.
Hors ligne
Tu seras en cours cet aprem ?
Hors ligne
Bon en faite ca y est c'est résolu, j'ai suivi le conseil de sekaijin, avoir les balises <?php ... ?>, j'ai enlevé la balise qui termine le php, c'est à dire le ?>, quand tu m'a demandé de te faire voir la vue j'ai regardé et il y avait cette balise, je l'ai enlevé et donc voila ca fonctionne mais je ne comprendrai pas pourquoi sur certaine requete precedemment faite ca fonctionner... J'aurai toujours du mal à comprendre, mais emrci à toi même à vous les gars de l'INSSET... Ca fait plaisir que je me sens moins seul de la licence...
Allez bonne journée, et oui je suis la cet après midi, à bientot (je modifie le titre... )
Hors ligne
Certains éditeurs de texte peuvent ajouter des caractères invisibles en fin de document.
Du coup tu a un caractère que tu ne vois pas mais qui est bien présent et qui force l'envoi des headers.
En supprimant le ?> il a beau être présent il n'est pas interprété par php car invisible et tu n'a pas de problèmes
Hors ligne
D'accord, j'ai juste quelque chose à dire ce soir je dormirai moins bête avec ce que j'ai appris ce week end.
Merci à vous pour ces éclaircissements.
Hors ligne
le ?> est un piège courant et les transfer FTP ou SCP peuvent parfois aussi lui ajouter des caractères invisibles.
je te conseille maintenant de remplacer le where('EXTRACT... par un appel à Zend_Db_Expr
A+JYT
Hors ligne
Pages: 1