Parse error

Résolu/Fermé
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 3 mars 2015 à 22:57
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 4 mars 2015 à 11:52
Bonjour
J'ai voulu mettre mon site en ligne mais je rencontre cette erreur.
Parse error: syntax error, unexpected T_FUNCTION, expecting ')' in

cette erreur corresponds à:
spl_autoload_register(function($class) {
    require_once 'classes/' . $class . '.php'; 
});

Pourtant en local aucune erreur j'ai mis exactement les même fichiers sur mon serveur.
Pouvez-vous s'ils vous plait me donner votre avis, car là vraiment je ne comprends pas.
Merci

10 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
Modifié par NHenry le 3/03/2015 à 23:06
Je pense que ta fonction manque d'un nom ou devrait être déclarée à côté.

Mais je n'ai jamais vu cette syntaxe.

Et en plus, le message d'erreur n'est pas complet.

J'interviens principalement en VB6 et VB.NET, avec un peu de C#, mais la modération m'amène souvent sur d'autre langages.
En VB.NET pensez à activer "Option Explicit" et "Option Strict"
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
3 mars 2015 à 23:21
Bonjour
quelle version de php as tu sur le serveur ?
Car cette syntaxe ne marche qu'à partir de php 5.3.

Voir la doc:
https://www.php.net/manual/fr/function.spl-autoload-register.php


0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
3 mars 2015 à 23:39
Bonjour
Si mon message j'ai juste ça en fait.
j'ai la version
-- Version de PHP : 5.3.8
sinon j'ai une douzaine de class il faut que je fasse des includes pour chaque fichier c'est kon.
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
3 mars 2015 à 23:42
j'ai mis ça à la palce et ça à l'air de fonctionner
function my_autoloader($class) {
    include 'classes/' . $class . '.php';
}

dis moi ce que tu en pense?
Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
3 mars 2015 à 23:48
encore moi maintenant j'ai cette erreur avec mon fichier security.php
pourtant il existe bien.
Fatal error: Class 'Security' not found in
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
3 mars 2015 à 23:58
Alors voilà un truc bizarre en fait tout mes fichiers class ne sont pas inclu
mais avec ce script
function my_autoloader($class) {
    include 'classes/' . $class . '.php';
}
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié par jordane45 le 3/03/2015 à 23:59
Le code complet c'est :
function my_autoloader($class) {
   require_once 'classes/' . $class . '.php'; 
}
spl_autoload_register('my_autoloader');


Concernant ton message d'erreur
j'ai cette erreur avec mon fichier security.php

... il serait bien de nous donner le message d'erreur COMPLET .!

Fatal error: Class 'Security' not found in

IN ... WHAT ??
Normalement le message d'erreur t'indique le fichier + le n° de ligne où s'est produit l'erreur...... sans ça.... difficile pour nous de t'aider.
Erreur qui se trouve surement sur un
...= new Security(); 

Mais bon... le souci est sûrement du au fait que tu n'avais pas mis la syntaxe complète de l'autoloader (telle que je l'ai indiqué ci-dessus...)




Cordialement,
Jordane
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
4 mars 2015 à 00:26
je te remercie je vais tous reprendre demain car là je n'en peu plus en local tout baigne et sur le serveur je ne peux même plus me connecter.
J'essaierai de reprendre tous ça demain à tête reposée.
Merci en attendant.
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
Modifié par papyclic le 4/03/2015 à 09:52
Bonjour jordane45,

De nouveau sur mon soucis qui est très mais alors très bizarre.
Sur mon serveur distant j'ai importé mes tables, avec FileZilla tous mes fichiers.
Impossible de me connecter à distant par contre en local aucun soucis, donc déjà il y a quelque chose qui me bloque à propos de mon serveur par rapport à mes class.
Déjà avec la fonction que tu m'a donné à propos de mes class il n'y a plus d'erreur.
Par contre lorsque je me connecte ça me bloque au niveau d'une condition...je te met la methode à la fin du post cela concerne la methode banni()
$erreur = "Ton compte a été supprimé";

alors si je supprime cette condition cela me met une erreur concernant la redirection
Warning: Cannot modify header information - headers already sent by (output started at /home/cliquede/www/include/init.php:5) in /home/cliquede/www/page_accueil/connexion.php on line 18

Ensuite je met cette redirection en javascript cela me redirige bien et ça fonctionne très bien.
Alors pourquoi cette condition ne fonctionne t-elle pas à distant ?

Je sais ça parait très bizarre mais là je suis vraiment dépourvu d'idée pour résoudre ce bazarre, peux tu essayer de prendre un peu de temps s'il te plait, en local tout baigne c'est dingue
<?php
class Connexion_class {
 
 private $pseudo;
 private $password;
 private $actif;
 
 private $bdd;
 
 public function __construct($pseudo, $password, $actif) {
  
  $password  = Security::hash($password);
   
  $this->pseudo = $pseudo;
  $this->password  = $password;
  $this->actif  = $actif;
  
  $this->bdd  = bdd();
 }
 
 private function ChampsVide() {
  return(empty($this->pseudo) || empty($this->password)) ? true : false;  
 }

 private function PseudoExist() {
  $sql = "SELECT *
    FROM  tb_adherent
    WHERE pseudo = :pseudo
    AND actif = 1";
  $requete = $this->bdd->prepare($sql);
  $requete->execute(array('pseudo' => $this->pseudo));
  $result = $requete->fetch();
  return ($result) ? $result['password'] : false;
 }

 private function Banni() {
  $sql = "SELECT *
    FROM  tb_adherent
    WHERE pseudo = :pseudo
    AND actif = 1";
  $requete = $this->bdd->prepare($sql);
  $requete->execute(array('pseudo' => $this->pseudo));
  $result = $requete->fetch();
  return($result['actif'] == 0) ? true : false;
 }
 
 private function Session() {
  $sql = "SELECT *
    FROM tb_gestion_admin
    INNER JOIN tb_adherent
    ON tb_adherent.id_adherent = tb_gestion_admin.rid_adherent
    WHERE pseudo = :pseudo
    AND actif = 1";
  $requete = $this->bdd->prepare($sql);
  $requete->execute(array('pseudo' => $this->pseudo));
  $result = $requete->fetch();
  $_SESSION['id_adherent'] = $result['id_adherent'];
  $_SESSION['prenom']    = $result['prenom'];
  $_SESSION['pseudo']    = $this->pseudo;
  $_SESSION['aucune_gestion']  = $result['aucune_gestion'];
  $_SESSION['membre']    = $result['membre'];
  $_SESSION['sortie']    = $result['sortie'];
  $_SESSION['cours']     = $result['cours'];
  $_SESSION['calendrier']   = $result['calendrier'];
 }
 
 public function VerifConnexion() {
  if($this->ChampsVide()) {
   $erreur = 'Veuillez remplir tous les champs';
   
  } else if($this->PseudoExist()) {
   if($this->password == $this->PseudoExist()) {
    if(!$this->Banni()) {
    
     $erreur = 'success';
     $this->Session();
     
    } else {
     $erreur = "Ton compte a été supprimé";
    }
   } else {
    $erreur = "Mauvais mot de passe...ou Mauvais login...Merci de recommencer.</br> Peut-être n'êtes vous pas membre de la Clique ? Dans ce cas désolé...";
   }
  } else {
   $erreur = "Ce compte n'existe pas";
  }
  return $erreur;
 }
}
?>

mon fichier init.php ou il y a la fonction my_autoloader
<?php include('connexion/config.php'); ?>
<?php $bdd = bdd(); ?>
<?php include('fonctions/fonction.php'); ?>

<?php
function my_autoloader($class) {
   require_once 'classes/' . $class . '.php'; 
}
spl_autoload_register('my_autoloader');
?>

attention start_session() il est sur mon fichier index.php également l'include pour accéder au fichier init.php
Merci.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié par jordane45 le 4/03/2015 à 12:34
Bonjour,

Ceci est une autre question..... qui devrait être posée... dans une nouvelle discussion.
(le fait de ne poser qu'une question par discussion, permet aux autres internautes de pouvoir effectuer des recherches sur le forum... dans le cas où ils rencontreraient le même souci.)

Quoi qu'il en soit.....
Ton message d'erreur indique que le souci se situe sur ta page connexion.php à la ligne 18....
Donc.. c'est ce code là qu'il aurait fallu nous montrer.
Ensuite... ce message d'erreur est connu...(des tonnes de discussions foisonnent sur le net à ce sujet.... ) ... il se produit lorsque tu as déjà affiché (via des ECHO) des choses AVANT de faire le Header Location en PHP.
Donc oui... dans ce cas il vaut mieux le faire en Javascript!

Alors pourquoi tous ces soucis et ces messages d'erreur ??? .... tout simplement par ce que la configuration d'apache/php sur le serveur est très certainement (c'est même quasi sûr...) différentes de celle présente sur ton pc.



NB (aucun rapport avec tes soucis... mais c'est mieux): Pour le démarrage des Session.. je t'invite à utiliser ce code
if(session_id() == '') {
 session_start();
}


Cela évitera qu'un jour... tu es des messages t'indiquant une erreur sur le fait que les SESSIONS sont déjà démarrées...(ce code vérifie avant de lancer le session_start qu'il n'a pas déjà été lancé )



Cordialement,
Jordane
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
4 mars 2015 à 11:52
Encore une fois.....
Si la question (initiale) est résolue..
Merci de ne pas oublier de clôturer le sujet
(en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)

Cordialement,
Jordane
0