OVH Community, votre nouvel espace communautaire.

Fatal error: Namespace declaration statement has to be the very first statement in th


Gaston_Phone
03/02/2016, 19h17
Le texte à lire concernait lexplication des caractères NON TEXTE situés au tout début du script PHP et qui perturbent l'exécution du script.

gentilcopain
03/02/2016, 18h55
Citation Envoyé par Gaston_Phone
Merci mais je ne crois pas avoir de pb avec mes captcha. J'ai utilisé l'API google pour les captcha.

J'en profite pour laisser le message que j'ai laissé sur mes autres posts.*

.................................................. .................................................. ................................................

OK, j'ai réussi à faire marcher mes classes avec composer en sytème de fichier en cascade en ligne sur OVH, comme c'était voulu au départ ouf...
Donc avec
1. la modif conseillée par l'équipe d'OVH c'est à dire dans le .ovhconfig changer environment; production en environment : development +
2. passer mes fichiers contenant mes classes et donc mes namespace à la moulinette de babelpad pour enregistrer ces fichiers en UTF-8 sans BOM +
3. entre
et bien ça a fini par marcher... Donc pour l'instant ça va... Je vais tester le reste du site maintenant que j'arrive à faire fonctionner au moins l'index...

Merci pour vos interventions. Je n'hésiterai pas à revenir vers vous.

Gaston_Phone
03/02/2016, 18h13
Tu devrais lire cet article -》http://www.wordetweb.com/word-et-web...olution-FR.htm

gentilcopain
03/02/2016, 10h13
C'est bizarre je ne vois pas mes messages apparaître... J'ai bien positionné ma déclaration de namespace en premier sans espace, j'ai même converti mon fichier en UTF8 sans BOM. Rien n'y fait...

namespace MonProjet;

class ChateauRepository{

chmod777
03/02/2016, 10h11
Encore un magnifique bug du forum.

Abazada
03/02/2016, 03h31
Euh... ?

Les espaces de noms sont déclarés avec le mot-clé namespace.
Un fichier contenant un espace de noms doit déclarer l'espace au début du fichier,
avant tout autre code, avec une seule exception : le mot clé declare.
http://php.net/manual/fr/language.na...definition.php

gentilcopain
03/02/2016, 01h04
Merci,

l'erreur s'affiche sur http://www.divinsmillesimes.com/index.php

le serveur SQL : frenchtodm.mysql.db.

Peut être s'agit il d'un pb de liaison avec la BDD même si ce n'est pas ce que le message dit... J'ai fait mon site sous wamp avec PHP myAdmin 5.6. La version d'OVH est la 5.5 mais l'ayant testé sur des versions ultérieures, ça passait à peu près. Là c'est fatal error.

Gaston_Phone
03/02/2016, 00h46
? ? ? ? ?

gentilcopain
03/02/2016, 00h37
Salut,

J'ai cette erreur dans ma classe qui comporte la majorité de mes requêtes.

Fatal error: Namespace declaration statement has to be the very first statement in the script in /home/frenchto/www4/classes/MillesimeRepository.php on line 2

J'ai supprimé tous les espaces, réenregistré le fichier en UTF8 sans BOM, rien n'y fait.
Je suis en pro sur un mutualisé. Et j'ai intégré composer avec 'vendor/autoload.php';

Voici 2 extraits :
_index.php :

ini_set('display_errors',1);
require_once 'vendor/autoload.php';
$ChateauRepository = new \MonProjet\ChateauRepository();
$MillesimeRepository = new \MonProjet\MillesimeRepository();
$AppellationRepository = new \MonProjet\AppellationRepository();
$TypeRepository = new \MonProjet\TypeRepository();
$results = $ChateauRepository->findAll();
$allResults = $ChateauRepository->findAllElements();

_ChateauRepository.php :

namespace MonProjet;

//require_once 'Auteur.php';
//require_once 'database.php';
//require_once 'vendor/autoload.php';

/*
méthodes PDO
-prepare : sécurisation de la requête
-execute : exécute la requête
récupération des résultats de la requête
-plusieurs résultats
- fetchAll : sous forme de tableau associatif contenan tun tableau pour chaque enregistrement
- PDO::FETCH_ASSOC : récupération uniquement d'un tableau associatif
- PDO::FETCH_BOTH : par défaut
- PDO::FETCH_NUM : récupération uniquement d'un tableau indicé
- PDO:: FETCH_CLASS : récupération uniquement d'instance d'une classe
-un résultat
- fetch : tableau contenant un tableau indicé et associatif
- fetchObject('Classe'): récupération uniquement d'une instance de classe
- requête avec paramètres
- dans la requête, le paramètre est précédé d'un :
- la valeur du paramètre est stockée dans un tableau associatif envoyé à la méthode exécutée
- la clé reprend le nom du paramètre
*/
class ChateauRepository{

private $connection;

public function __construct(){
$database = new \MonProjet\database();
$this->connection = $database->connect();

}

public function find($chateau, $appellation, $millesime, $type, $prix, $ajax=false){
/*
if ($millesime!=null) $sql = '
SELECT
chateau.*
FROM
frenchtodm.chateau
WHERE
EXISTS (SELECT * FROM chateau_millesime WHERE millesime_id = millesime.id)
';*/
$parameters = [];

$sql = '
SELECT chateau.nom, chateau.id AS cid, appellation.appellation, millesime.annee, millesime.id AS mid, type.type, chateau_millesime.prix, chateau_millesime.quantite, chateau_millesime.url_img
FROM frenchtodm.chateau_millesime
JOIN chateau on chateau_id = chateau.id
JOIN appellation on appellation_id=appellation.id
JOIN millesime on millesime_id = millesime.id
JOIN type on type_id = type.id
';

if(!empty($chateau)){
$sql .= 'WHERE chateau.nom=:chateau ';
$parameters['chateau']= $chateau;
}

$findme = 'WHERE';

$pos = strpos($sql, $findme);

if(!empty($millesime)){
$pos = strpos($sql, $findme);
if($pos === false){
$sql .= 'WHERE millesime.annee=:millesime ';}
else {$sql .= 'AND millesime.annee=:millesime ';}
$parameters['millesime']= $millesime;
}
if(!empty($appellation)){
$pos = strpos($sql, $findme);
if($pos === false){
$sql .= 'WHERE appellation.appellation=:appellation ';}
else {$sql .= 'AND appellation.appellation=:appellation ';}
$parameters['appellation']=$appellation;
}
if ($type!='touttype'){
$pos = strpos($sql, $findme);
if($pos === false){
$sql .= 'WHERE type.type=:type ';}
else {$sql .= 'AND type.type=:type ';}
$parameters['type']=$type;
}
if ($prix==='<50€' ){
$pos = strpos($sql, $findme);
if($pos === false){
$sql .= 'WHERE chateau_millesime.prix<50 ';}
else {$sql .= 'AND chateau_millesime.prix<50 ';}
}
if ($prix==='50€<100€'){
$pos = strpos($sql, $findme);
if($pos === false){
$sql .= 'WHERE chateau_millesime.prix>=50 AND chateau_millesime.prix<100 ';}
else {$sql .= 'AND chateau_millesime.prix>=50 AND chateau_millesime.prix<100 ';}
}
if ($prix==='100€<300€'){
$pos = strpos($sql, $findme);
if($pos === false){
$sql .= 'WHERE chateau_millesime.prix>=100 AND chateau_millesime.prix<300 ';}
else{$sql .= 'AND chateau_millesime.prix>=100 AND chateau_millesime.prix<300 ';}
}
if ($prix==='300€<500€'){
$pos = strpos($sql, $findme);
if($pos === false){
$sql .= 'WHERE chateau_millesime.prix>=300 AND chateau_millesime.prix<500 ';}
else {$sql .= 'AND chateau_millesime.prix>=300 AND chateau_millesime.prix<500 ';}
}
if ($prix==='>500€'){
$pos = strpos($sql, $findme);
if($pos === false){
$sql .= 'WHERE chateau_millesime.prix>=500 ';}
else {$sql .= 'AND chateau_millesime.prix>=500 ';}
}

//echo $parameters;
//var_dump($sql);

$query = $this->connection->prepare($sql);
$query->execute($parameters);

/*if(!$ajax){
$result=$query->fetchObject('\MonProjet\Chateau');
}
else {}*/
$result=$query->fetchAll(\PDO::FETCH_ASSOC);


return $result;

}

Je n'arrive pas à me dépétrer de cette erreur. Help !