Passage de easyphp à un hebergeur web

WRInaute discret
Bonjour,

Apès avoir monté mon site php/sql sur mon ordinateur avec easyphp, je l'ai transferer sur un hebergeur web.
Celui-ci étant bien sur muni de php4 et php5, mysql.

Mais un probleme survient. Il se trouve que j'ai creer un espace membre, qui lorsque que la personne est connecté le nom de cette s'affiche en haut de la page tel "Bonjour Pseudo".
Sur easyphp aucun probleme, ce système marche très bien.

Mais une fois passer sur l'hébergeur web, lors de ma connexion au compte, le nom indiqué en haut de ma page est "Bonjour Array".

Je n'arrive pas à comprendre pourquoi.
Merci d'avance pour vos réponse et l'aide que vous pourrez m'apporter.

Amicalement,
Helrod
 
WRInaute discret
Hello,
a mon avis, a vu de nez ca ressemble a un probleme de mysql_fetch_assoc

Mais pour en etre sure, fais nous voir ton code.
 
WRInaute discret
Voici mes pages :

Le page ou se trouve les informations de connexion à la base de donnée. (conf.php)
Code:
<?php
$db = mysql_connect('localhost', '******', '******');
mysql_select_db('helrod_site',$db);

if(isset($_SESSION['login']))
{
    $pseudo = $_SESSION['login'];
    $sqllogin = "SELECT * FROM membre WHERE pseudo='".$pseudo."'";
    $rlogin = mysql_query($sqllogin) or die('Erreur SQL !<br>'.$sqllogin.'<br>'.mysql_error());
    $login = mysql_fetch_array($rlogin);
}	
?>
Le page ou se trouve les informations d'identification. (login.php)
Code:
<?php
include('conf.php');

if(isset($_POST) && !empty($_POST['pseudo']) && !empty($_POST['mdp']))
{
    extract($_POST);

    // on recupère le password de la table qui correspond au login du visiteur
    $sql = "select mdp from membre where pseudo='".$pseudo."'";
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

    $data = mysql_fetch_assoc($req);

    if($data['mdp'] != md5($mdp))
    {
        echo '<div align="center">Mauvaise pseudo ou mot de passe <a href="javascript:history.back(1)"><br /><br /><input type="button" value="Retour"></a></div>';
        return (FALSE);
        exit();
    }
    else
    {
        session_start();
        $_SESSION['login'] = $pseudo;

        // On change la valeur du champ connecte
        $sql = "UPDATE membre set connecte='1' WHERE pseudo='$pseudo'";
        $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

        header('location: index.php?page=membre');
        exit;
    }
}
else
{
    echo '<div align="center">Vous avez oublié un champs de connection! <a href="javascript:history.back(1)"><br /><br /><input type="button" value="Retour"></a></div>';
    return (FALSE);
    exit();
}?>
Le page ou se trouve l'acces à l'espace membre, avec le texte de "bienvenue pseudo". (index.php)
Code:
<?php
session_start();
include('conf.php');
?>

<table cellpadding="0" cellspacing="0" border="0" align="center" background="image/design/fond.jpg" width="827" height="768">
    <tr>
        <td colspan="2">
<?php
if(!isset($_SESSION['login']))
{
    echo '
            <form method="post" action="login.php">
            <table border="0" width="40%" cellspacing="0" cellpadding="0" align="center" class="texte">
                <tr>
                    <td height="10" colspan="2"></td>
                </tr>
                <tr>
                    <td align="left"><b>Pseudo</b></td>
                    <td><input type="text" name="pseudo" maxlength="50" size="8" /></td>
                    <td align="left"><b>Passe</b></td>
                    <td><input type="password" name="mdp" maxlength="20" size="8" /></td>
                    <td rowspan="2"><input type="submit" value="Ok" /></td>
                </tr>
            </table>
            </form>
            <div align="center"><a href="?page=inscription">Inscription</a></div>';
}
else
{
    $sql = "SELECT * FROM messagerie WHERE destinataire='$pseudo'";
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    $data = mysql_num_rows($req);

    $date = date("d-m-Y");

    echo'
            <table border="0" width="650" cellspacing="0" cellpadding="0" align="center" class="texte">
                <tr>
                    <td height="10" colspan="4"></td>
                </tr>
                <tr>
                    <td align="center" width="36%">Bienvenue '.$_SESSION['login'].' !<br />';
    if ($pseudo)
    {
        if ($data == '')
        {
            echo 'Vous n\'avez pas de message';
        }
        else
        {
            if ($data == '1')
            {
                echo 'Vous avez <a href="?page=messagerie" alt="">'.$data.'</a> message';
            }
            else
            {
                echo 'Vous avez <a href="?page=messagerie" alt="">'.$data.'</a> messages';
            }
        }
    }
    echo '
                    </td>
                    <td align="left">Nous sommes le '.$date.' et il est : </td>
                    <td align="left" id="ejs_heure" width="13%">Initialisation !</td>
                    <td align="left" width="17%"><a href="deconnexion.php" alt="">Déconnexion</a><br /><a href="?page=membre">Espace membre</a></td>
                </tr>
            </table>';
}
?>
 
WRInaute accro
Bonjour,

Je ne vois pas la ligne dans ton code où tu affiches "Bonjour pseudo" ?

ps : Surveille ton orthographe
 
WRInaute discret
J'ai l'impression que ton probleme vient du fait que $pseudo n'existe pas

essaies de remplacer dans ta page d'identification ca :

$_SESSION['login'] = $pseudo;

par ca
$_SESSION['login'] = $data['pseudo'];
 
WRInaute discret
Lorsque je place le code que tu indique, et que je m'identifie, il me renvoi sans cesse au formulaire d'identification.
 
WRInaute accro
helrod a dit:
Ps : Ou est le problème avec mon orthographe?
echo '<div align="center">Vous avez oublié un champs de connection!
ce serait plutôt ça :
echo '<div align="center">Vous avez oublié un champ de connexion!

non ? :wink:

tant que j'y suis :

echo '<div align="center">Mauvaise pseudo ou mot de passe
je dirais plutôt :
echo '<div align="center">Mauvais pseudo ou mot de passe

puis je passe les commentaires où ce n'est pas grave :p
 
WRInaute accro
jexl a dit:
J'ai l'impression que ton probleme vient du fait que $pseudo n'existe pas

essaies de remplacer dans ta page d'identification ca :

$_SESSION['login'] = $pseudo;

par ca
$_SESSION['login'] = $data['pseudo'];

moi je dirais que la variable $pseudo existe, grâce à ça :

if(isset($_POST) && !empty($_POST['pseudo']) && !empty($_POST['mdp'])) {
extract($_POST);
 
WRInaute discret
La variable pseudo est crée dans le fichier de configuration.

Le premier code que j'ai place dans mon deuxieme post.

Edit: Voici l'adresse du site

J'ai creer une login et mot de passe de test pour que vous puissiez voir ce que cela donne.

Identifiant : Test
Mot de passe : Test
 
WRInaute discret
Ca serai une solution provisoire, car lorsque tu change de page et que tu revien dans l'espace membre, tout l'espace membre à disparut.
 
WRInaute accro
M'enfin, y'a peut être mieux comme gestion des membres.
Là, tu ne fais que vérifier que l'identification est correcte, que se passe-t-il si on accede directement à une page réservée à un membre via url directe ?
tu rediriges vers la page d'identification ?
 
WRInaute accro
Essaie de tracer la valeur de tes variables POST avec un echo par exemple afin d'être sûr de ce que tu récupères ou non.
 
WRInaute discret
J'ai pu voir sur le forum de mon hebergeur un probleme simillaire.
Mais celui ci ne me donne rien de bien, j'ai poster un message pour voir si il connaisse la réponse.
 
WRInaute passionné
helrod a dit:
Ce que je ne comprend pas c'est pourquoi sur mon pc avec easyphp l'affichage est bon.

1. reprend ton code en local

2. modifie le niveau d'error reporting dans ton php.ini. Prend le niveau le plus sévère possible :
error_reporting = E_ALL | E_STRICT
ou simplement
error_reporting = E_ALL

3. ça donne quoi ?

; E_ALL - All errors and warnings (doesn't include E_STRICT)


; E_STRICT - run-time notices, enable to have PHP suggest changes
; to your code which will ensure the best interoperability
; and forward compatibility of your code
 
WRInaute discret
Juste pour voir,
Puisqu'il te renvoie array (un tableau), essaie de faire

echo '<pre>' ;
print_r($pseudo );
echo'</pre>' ;

Pour voir ce qu'il y a dedans.

P.S : oups, j'avais pas vu le extract
 
WRInaute accro
bon si je comprends bien lorsque tu testes ce code :
Code:
echo '<pre>' ; 
print_r($pseudo ); 
echo'</pre>' ;

En premier ca te donne le resultat
après connexion.

Et lorsque tu fais un deuxième essai tu obtiens :
Array
(
[0] => 1
[id] => 1
[1] => Helrod
[pseudo] => Helrod
[2] => ********
[mdp] => *********
[3] => email
=> email
[4] => image/membre/helrod.jpg
[avatar] => image/membre/helrod.jpg
[5] => 2
[lvl] => 2
[6] => 0
[encours] => 0
[7] => 1
[connecte] => 1
) [/quote]
C'est cela ?

ps : essaie d'etre plus explicite car nous ne sommes pas dans ton code, il nous faut nous en imprégner.
Par exemple dans ton post où tu nous cites les bouts de code tu aurais dû les faire précéder du nom de la page php en question car ce n'est pas évident... Cela nous permettrait de mieux t'aider.
Merci :wink:
 
WRInaute discret
Oui apres connexion j'obtien Helrod.

Apres ma connexion je reactualise la page, car c'est à ce moment la que tout l'espace membre devient invisible.
Et là, j'obtien cela:

Array
(
[0] => 1
[id] => 1
[1] => Helrod
[pseudo] => Helrod
[2] => ********
[mdp] => *********
[3] => email
=> email
[4] => image/membre/helrod.jpg
[avatar] => image/membre/helrod.jpg
[5] => 2
[lvl] => 2
[6] => 0
[encours] => 0
[7] => 1
[connecte] => 1
)
[/quote]

Ps: je vais mettre le nom des pages.
 
WRInaute discret
Hello,
La valeur de $pseudo est donc bien un tableau.

Si tu veux afficher ton pseudo, il faut donc faire

echo $pseudo['pseudo'] ;

Par contre je ne comprends pas pourquoi, il te renvoit un coup une chaine de caractere et ensuite un tableau...

Dis nous si ca marche.
 
WRInaute discret
J'ai bien testé ce code, il marche en effet une premiere fois.
Mais lorsque que j'actualise ou change de page pour revenir apres sur l'espace membre, tout disparait ainsi que le "Bienvenue Pseudo" qui devient "Bienvenue".

Merci des réponse que vous m'apporter ^^
 
WRInaute discret
et si tu fais :

$_SESSION['login'] = $pseudo['pseudo'];


puis
echo 'Bienvenue' . $_SESSION['login'] ;

Ca marche ?
 
WRInaute discret
Cela ne maffiche rien du tout.
Mais ce que je ne comprend pas, c'est pourquoi lors de mon actualisation ou changement de page, l'espace membre disparait.

Est-ce parce qu'il crois que la session n'est pas ouverte ou vide?
 
WRInaute passionné
[mode radotage]
Une bonne pratique de programmation consiste a mettre un niveau d'error_reporting très contraignant en mode debug
[/mode radotage]
 
WRInaute discret
Y'a un petit truc qui me chiffonne :

Dans ton conf , tu appelles une session alors que dans certains cas, tu ne mets pas de session_start();

Puisque que ton con est appelé a chaque débuts de script, mets ton session_start(); au début du conf, et enleves le des autres pages.
 
WRInaute passionné
helrod a dit:
@spidetra :

Ou dois je mettre le code?

Explication dans mon premier post.
Change le error_reporting dans ton php.ini. essaye de le faire en local, même si ça marche, et dit nous si ton code explose.
 
WRInaute discret
Non mais tu ne comprend pas que ce n'est pas mon hebergeur qui deconne.
Donc je ne peut changer le php.ini

Et je l'avais fait pour rien, car rien n'etait apparu.
 
WRInaute passionné
helrod a dit:
Non mais tu ne comprend pas que ce n'est pas mon hebergeur qui deconne.
Donc je ne peut changer le php.ini

Et je l'avais fait pour rien, car rien n'etait apparu.

Si je comprend. Non, tu ne l'avais pas fait pour rien, car c'est le niveau d'erreur que tu doit avoir en mode développement.
Evidemment, après la modif du fichier de conf tu avais redémarré Apache.


Donc, en local, avec un niveau d'error_reporting élevé ( E_ALL | E_STRICT ou E_ALL ), tu n'as aucun message d'erreur : pas de Notice, de Warning ou autre.

Chez ton hébergeur, tu peux modifier le niveau d'error_reporting :
http://fr.php.net/manual/fr/function.er ... orting.php

tu as qu'à faire la modif dans un fichier que tu inclus dans tout tes scripts ( un fichier de conf )
 
WRInaute discret
Le niveau d'erreur est déjà E_ALL par default.
Le probleme as été reglé.

J'indique la réponse ici pour ceux à qui cela arriverait.
Il s'agit tout simplement d'une variable qui en ecrase une autre.
En effet ma variable login et $_SESSION['login'] etait en conflit.
En renommant $login en $login_data, le problème est réglé.
 
Discussions similaires
C
Réponses
4
Affichages
1K
christele2
C
Haut