Parse ERROR

Fermé
villdan36 Messages postés 3 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 5 septembre 2011 - 4 sept. 2011 à 21:42
 __construct - 5 sept. 2011 à 19:16
Bonjour,

Pour le site d'une association, un ami m'a aidé à programmer en Php un connexion sécurisée pour les membres. Mais après avoir entré l'identifiant et mot de passe et cliqué sur valider, l'erreur suivante apparaît :

Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in ... Membre.class.php on line 4

Le site est hébergé par free.

Si quelqu'un peut m'aider...

Ci-dessous le code complet du fichier "membre.class.php

Merci pour votre aide.


<?php

class Membre {
private $lid ;
private $pseu ;
private $pass ;
private $derco ;
// private $deract ;

private function charge($typ){
$mfich = fopen('mbrs', 'r');
$nb = intval( fgets($mfich) );

if($typ == 'connect') $this->lid = 0 ;

for($i=0; $i<$nb ;$i++){
$tps = explode( ';' , trim( fgets($mfich) ) );
if( ( ($typ == 'connect' || $typ == 'repass') && $tps[0] == $this->pseu )
|| ($typ == 'id' && $i == $this->lid-1 ) ){
// echo 'ligne'.$i ;
$this->lid = $i+1 ;
$this->pseu = $tps[0] ;
$this->pass = $tps[1] ;
$this->derco = $tps[2] ;
$i = $nb+1 ;
}
}

fclose($mfich);
}

private function sauv(){
$mfich = fopen('mbrs', 'r+');
$nb = intval( fgets($mfich) );

$texte = $nb."\n" ;

for($i=1; $i<$this->lid ;$i++){
$texte .= trim( fgets($mfich) )."\n" ;
}
fgets($mfich) ; // ici, on zape la ligne
// echo ' -> '.$this->pseu.';'.$this->pass.';'.$this->derco ;
$texte .= $this->pseu.';'.$this->pass.';'.$this->derco."\n" ;
for(; $i<$nb ;$i++){ // le décalage fait par le non $i++ permet le '<' et non le '<='
$texte .= trim( fgets($mfich) )."\n" ;
}

rewind($mfich);
// fwrite($mfich,'ouihjuoj'); <----- ça veut pass
fwrite($mfich, $texte);

fclose($mfich);
}

private function ajout_mbr($pseudo){
$mfich = fopen('mbrs', 'r+');
$nb = intval( fgets($mfich) );

$texte = ($nb+1)."\n" ;

for($i=0; $i<$nb ;$i++){
$texte .= trim( fgets($mfich) )."\n" ;
}
$texte .= $pseudo.';1aca8eb736893e8dd105ab225919830176037378e97515cfc4667c688d2be847;0'."\n" ; // le mote de passe par défaut est 'codepass'

rewind($mfich);
fwrite($mfich, $texte);

fclose($mfich);

$this->pseu = $pseudo ;
$this->lid = $nb ;
$this->pass = '1aca8eb736893e8dd105ab225919830176037378e97515cfc4667c688d2be847' ;
$this->derco = 0 ;
}

private function connect($mot){
if( $this->passEstOk($mot) ){
$this->derco = time();
$this->sauv();
}else{
$this->lid = 0 ;
}
}

public function passEstOk($mpass){
return ($this->pass == hash('sha256', $mpass) ) ;
}

public function __construct($typ, $val1, $val2=''){
if($typ=='connect'){
$this->pseu = $val1 ;
$this->charge($typ) ;
$this->connect($val2) ;
}else if($typ=='id'){
$this->lid = $val1 ;
$this->charge($typ) ;
}else if($typ=='ajout'){
if($val2=='ajt1mbr'){
if( $this->idDe($val1) == 0 ){
$this->ajout_mbr($val1);
}else{
$this->lid = -1 ;
}
}else{
$this->lid = -7 ;
}

}else if($typ=='repass'){
if($val2=='ajt1mbr'){
if( $this->idDe($val1) > 0 ){
$this->pseu = $val1 ;
$this->charge($typ);
$this->pass = '1aca8eb736893e8dd105ab225919830176037378e97515cfc4667c688d2be847' ;
$this->sauv();
}else{
$this->lid = -1 ;
}
}else{
$this->lid = -7 ;
}

}
}


public function pseudo(){
return $this->pseu ;
}

public function id(){
return $this->lid ;
}

public function chgPass($anc,$nou,$ren){
if( $this->passEstOk($anc) ){
if( $nou==$ren ){
$this->pass = hash('sha256', $nou) ;
$this->sauv() ;
return 0 ;
}else{
return 2 ;
}
}else{
return 1 ;
}
}


public function exist(){
// echo '('.$this->lid.' > 0)';
return ($this->lid > 0);
}


private function idDe($pseudo){
$mfich = fopen('mbrs', 'r');
$nb = intval( fgets($mfich) );

$ret = 0 ;

for($i=0; $i<$nb ;$i++){
$tps = explode( ';' , trim( fgets($mfich) ) );
if( $tps[0] == $pseudo ){
$ret = $i+1 ;
$i = $nb+1 ;
}
}

fclose($mfich);
return $ret ;
}

private function pseudoDe($id){
$mfich = fopen('mbrs', 'r');
$nb = intval( fgets($mfich) );

if($nb<$id){ fclose($mfich); return ''; }

for($i=1; $i<$id ;$i++){
fgets($mfich);
}
$tps = explode( ';' , trim( fgets($mfich) ) );
$ret = $tps[0] ;

fclose($mfich);
return $ret ;
}
}

1 réponse

Bonsoir,

Sans vouloir dire de bêtise mais il me semble que la version de PHP que tu utilises sur Free est inférieure à la 5.0 et donc les déclarations de variables en public, protected et private ne fonctionnent pas!
Vérifies ta version de PHP avec un phpinfo() pour savoir quelle est la version de PHP installée sur ton hébergement.
1
villdan36 Messages postés 3 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 5 septembre 2011
4 sept. 2011 à 22:37
Bonsoir __construct,

Merci de ta réponse très rapide. Comme je ne suis pas le programmeur en Php, mais un ami, comment et ou dois-je saisir cette info "phpinfo()" ?

Autre question, si free n'utilise pas la version 5, est-ce à dire que ma connexion sécurisée ne fonctionnera jamais ???

Merci
0
Tu crées un fichier nommé infophp.php que tu places à la racine de ton site dans lequel tu inscrits juste ce bout de code :
<?php
phpinfo();
?>

Puis dans la barre d'adresse de ton navigateur tu tapes l'adresse de ton site comme par exemple :
http://monsite.free.fr/infophp.php

Et tu auras tout le listing du fichier php.ini sous tes yeux et notamment la version de PHP utilisée!
Ensuite tu SUPPRIMES bien ce fichier de ton site sinon un utilisateur malveillant pourrait l'utiliser pour trouver comment accéder à ton hébergement par script.

Il y a moyen de changer de version PHP par l'intermédiaire d'une instruction dans un fichier .htaccess mais je ne sais pas si Free l'autorise, je n'ai jamais utilisé les services de Free.
0
villdan36 Messages postés 3 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 5 septembre 2011
5 sept. 2011 à 18:25
Bonsoir __construct,

Je n'ai pas pu écrire plus tôt, le boulot...

J'ai fait ce que tu m'a dit, j'ai créé le fichier infophp.php, j'ai suivi ta procédure et j'ai eu le listing comme prévu, la version est la suivante : PHP version 5.1.3RC4-dev

D'autre part, sur un autre forum, un utilisateur conseillait de créer un fichier .htaccess avec à l'interieur la ligne Php 5

J'ai mis ce fichier à la racine de mon site et maintenant je n'ai plus le même message d'erreur, mais celui-ci :

Warning: Cannot modify header information - headers already sent by (output started at /mnt/147/sdb/f/c/ascepe.chateauroux/membre/Membre.class.php:1) in /mnt/147/sdb/f/c/ascepe.chateauroux/membre/connect.php on line 11

et je suis réinvité à entrer à nouveau l'ID et Mdp. (fichier connect.php) comme ci-dessous


Pseudo et/ou mot de passe incorrect.
Retour à l'accueil.
Se connecter
Identifiant:
Mot de passe:

Y a t-il une solution ?

Avec mes remerciements

Daniel
0
Warning: Cannot modify header information - headers already sent by (output started at /mnt/147/sdb/f/c/ascepe.chateauroux/membre/Membre.class.php:1) in /mnt/147/sdb/f/c/ascepe.chateauroux/membre/connect.php on line 11

Si tu fais un echo (ou un print) avant d'envoyer un en-tête (header), alors tu provoque ce genre de message d'avertissement. Par exemple si dans un script je fais ceci :
<?php
echo "connexion réussie!";
header('Location: membre.php');
?>

PHP m'affiche le message d'avertissement que tu as en ce moment...
Vérifies que rien n'est ENVOYE au navigateur AVANT le header()
0