OVH Community, votre nouvel espace communautaire.

Problème PHP 5


bouleau
26/07/2015, 17h08
Merci Janus,

bon, j'essaie différentes choses,
ce qui coince je pense, c'est la redirection en fin du script login.php

// REDIRECTION VERS UNE PAGE PROTEGEE AVEC L'IDENTIFIANT SERVANT DE CLE
header("Location:zonemembre.php?id=$id");

je dois passer de la page index à la page zonemambre.php avec l'id réécrite du membre par la page login,
et le script se plante sur la page login, sur laquelle il ne doit faire que passer pour récupérer ce id?xxxxxxx

j'ai essayé en java, mais sans succès

function redir($url){
echo "";
}
// Utiliser la redirection ---------------
redir("zonemembre.php?id=$id");
j'ai annulé le /header("Location:$url_erreur"); en milieu de script

(j'ai modifié $requete=mysql_query, avec ton code ou avec le mien, c'est pareil,
sans .ovhconfig tout va bien, avec .ovhconfig, blocage )


bonne soirée, si vous avez les idées, merci d'avance

janus57
26/07/2015, 16h22
Bonjour,

Oh Janus non ?
Pourquoi ne pas demander au mieux placé pour te dire s'il y a des erreurs ? PHP lui-même
parce que dans tous les cas c'est PHP qui parse ?

Et que la technique de test en SSH fonctionne uniquement chez les hébergeur avec SSH d'activé (ce qui n'est pas le cas partout).
Donc perso j'ai pris l'habitude de me fier soit à la coloration syntaxique (qui change en cas d'erreur), soit à un IDE PHP, soit au site donné plus haut, et si jamais je test en local via WAMP/LAMP selon le PC ou je suis.

@bouleau, faut vraiment faire attention aux double quote, faut soit mettre un \ devant soit utiliser des simple pour les variables dans la requête MySQL, en tout cas c'est ce que je vois partout sur les doc (j'utilise jamais cette syntaxe) :
Code:
$sql_bdd sur le serveur $sql_server
******Vérifiez les paramètres du fichier conf.php"; exit;} // Rendre la base de données , la base courante $db_selected = mysql_select_db('xxxxxxxxx', $db_link); if (!$db_selected) { die ('Impossible de sélectionner la base de données : ' . mysql_error()); } // ON SELECTIONNE L'ENREGISTREMENT CONTENANT LE LOGIN ET // MOT DE PASSE SAISIS A LA PAGE INDEX $requete=mysql_query("SELECT * from membre where pseudo='$pseudo_membre' and passe='$passe_membre'",$db_link) or die(mysql_error()); // SI AUCUN ENREGISTREMENT NE CORRESPOND if(mysql_num_rows($requete)==0) { // REDIRECTION VERS LA PAGE ERREUR header("Location:$url_erreur"); } // SI LE LOGIN ET MOT DE PASSE SONT EXACTES else { // CREATION D'UN IDENTIFIANT ALEATOIRE $taille = 20; $lettres = "abcdefghijklmnopqrstuvwxyz0123456789"; srand(time()); for ($i=0;$i<$taille;$i++) { $id.=substr($lettres,(rand()%(strlen($lettres))),1 ); } // MISE A JOUR DE L'IDENTIFIANT DANS LA TABLE $requete=mysql_query("update membre set id='$id' where pseudo='$pseudo_membre' and passe='$passe_membre'",$db_link) or die(mysql_error()); // REDIRECTION VERS UNE PAGE PROTEGEE AVEC L'IDENTIFIANT SERVANT DE CLE header("Location:zonemembre.php?id=$id"); } // DECONNEXION MYSQL mysql_close(); ?>
Cordialement, janus57

bouleau
26/07/2015, 15h12
Citation Envoyé par janus57

Pourquoi y a encore des erreurs
des erreurs sans doute,
puisque l'espace membre ne fonctionne pas en PHP5 et très bien en PHP4.9

le reste du site fonctionne très bien en PHP5

si j'ajoute le fichier .ovhconfig, le script login.php ne fonctionne pas
pourtant un tout petit script de 44 lignes,

si une ame charitable peut regarder de nouveau ce code, à l'exécution je suis redirigée vers la page d'erreur (code en gras)
require("conf.php");


// CONNEXION A LA BASE DE DONNEE
$db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd);
if(!$db_link) {echo "Connexion impossible à la base de données $sql_bdd sur le serveur $sql_server
******Vérifiez les paramètres du fichier conf.php"; exit;}

// Rendre la base de données , la base courante
$db_selected = mysql_select_db('xxxxxxxxx', $db_link);
if (!$db_selected) {
die ('Impossible de sélectionner la base de données : ' . mysql_error());
}

// ON SELECTIONNE L'ENREGISTREMENT CONTENANT LE LOGIN ET
// MOT DE PASSE SAISIS A LA PAGE INDEX

$requete=mysql_query("SELECT * from membre where pseudo="$pseudo_membre" and passe="$passe_membre"",$db_link) or die(mysql_error());

// SI AUCUN ENREGISTREMENT NE CORRESPOND
if(mysql_num_rows($requete)==0)
{
// REDIRECTION VERS LA PAGE ERREUR
header("Location:$url_erreur");

}

// SI LE LOGIN ET MOT DE PASSE SONT EXACTES
else
{
// CREATION D'UN IDENTIFIANT ALEATOIRE
$taille = 20;
$lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
srand(time());
for ($i=0;$i<$taille;$i++)
{
$id.=substr($lettres,(rand()%(strlen($lettres))),1 );
}

// MISE A JOUR DE L'IDENTIFIANT DANS LA TABLE
$requete=mysql_query("update membre set id="$id" where pseudo="$pseudo_membre" and passe="$passe_membre"",$db_link) or die(mysql_error());

// REDIRECTION VERS UNE PAGE PROTEGEE AVEC L'IDENTIFIANT SERVANT DE CLE
header("Location:zonemembre.php?id=$id");
}

// DECONNEXION MYSQL
mysql_close();
?>

Abazada
26/07/2015, 14h37
Citation Envoyé par janus57
Bonjour,
Citation Envoyé par bouleau
Bonsoir,
j'essaie de repérer les erreurs php avec ce vérificateur
http://fr.piliapp.com/php-syntax-check/
mais il ne trouve pas d'erreur
Avez-vous d'autres liens pour faire ces vérifications
pour les erreurs de syntaxe non,
sinon y a des IDE tel que netbean qui peuvent faire une analyse complet du projet à la recherche d'erreurs.
Oh Janus non ?
Pourquoi ne pas demander au mieux placé pour te dire s'il y a des erreurs ? PHP lui-même

Code:
dev ~ $ alias php=/usr/local/php5.6/bin/php
dev ~ $ cd test
dev ~/test $ for file in *.php; do php -l $file; done
No syntax errors detected in titi.php
Errors parsing toto.php
No syntax errors detected in tutu.php
pro ~/test $
Ok, ça ne donne pas de détails,
mais c'est un moyen très simple de faire une 1ère passe rapide sur l'ensemble des tes .php
et ça marche en Mutu aussi

janus57
26/07/2015, 13h29
Bonjour,

pour les erreurs de syntaxe non, sinon y a des IDE tel que netbean qui peuvent faire une analyse complet du projet à la recherche d'erreurs.

Pourquoi y a encore des erreurs (en fin si le script a été fait pour PHP3 cela ne m'étonne pas trop en faite) ?

Cordialement, janus57

bouleau
26/07/2015, 00h22
Bonsoir,
j'essaie de repérer les erreurs php avec ce vérificateur
http://fr.piliapp.com/php-syntax-check/

mais il ne trouve pas d'erreur

Avez-vous d'autres liens pour faire ces vérifications

Merci et bonne soirée

janus57
25/07/2015, 21h17
Bonjour,

Site du zéro => openclassroom (changement de nom)

Et maintenant dans la section PHP y a plusieurs tuto pour faire un espace membre avec des conseils et tout ce qui va avec (pas de code complet prêt à copier/coller ce qui "oblige" à suivre le tuto et faire le code).

Cordialement, janus57

bouleau
25/07/2015, 19h35
j'ai tout appris ce que je sais, ou presque sur le site du zero, il y a déjà bien des années, je me suis bien amusée
je vais voir openclassroom

merci de me le rappeler

janus57
25/07/2015, 18h40
Bonjour,

hum bah là un bon coup de manuel PHP ne fera pas de mal, sinon y a des tuto pour créer des espace membre sur openclassroom.

Sinon y a le choix de basculer sur un CMS.

Bonne chance.

Cordialement, janus57

bouleau
25/07/2015, 18h28
Merci Janus,
je ne connais pas le site de ton lien,
mais effectivement le script que j'utilise pour mon espace membre est très ancien, il fonctionne depuis plusieurs années en PHP4

donc c'est là mon problème, pouvoir le modifier pour l'utiliser en PHP5

Merci encore pour ton aide,
je vais chercher un tutoriel qui puisse m'être accessible pour essayer autre chose, car je programme avec mes connaissances d'autodidacte,

Bonne soirée

janus57
25/07/2015, 17h23
Citation Envoyé par bouleau
Merci Janus,
j'ai essayé ton code complet,
en entrant le pseudo marie3 qui existe bien dans la table,
j'ai cette erreur

Unknown column 'marie3' in 'where clause'

merci de ton aide
Bonjour,

""mon"" code est juste le votre sans erreur de syntaxe (Double quotes à gogo).

Tout ce que j'ai fait c'est éliminé les erreurs de syntaxe rien de plus, tout le reste viens de vous.

D'ailleurs bizarrement ce code est le même que ici : https://openclassrooms.com/forum/suj...e-membre-98137
Et donc à l’origine ce script est un script PHP3 c'est ça ?

EDIT :
code complet mis à jour après avoir vu un topic sur mysql_db_query car j'ai jamais utilisé ce genre de choses.

Cordialement, janus57

bouleau
25/07/2015, 15h56
Merci Janus,
j'ai essayé ton code complet,
en entrant le pseudo marie3 qui existe bien dans la table,
j'ai cette erreur

Unknown column 'marie3' in 'where clause'

merci de ton aide

janus57
25/07/2015, 15h41
Citation Envoyé par Gaston_Phone
$requete=mysql_db_query($DBName,"select ...

Hum! Hum! ne serait-ce pas plutôt :
$requete=mysql_db_query(Table>,"select ...
Bonjour,

hum d'après la doc, non du tout :
Code:
resource mysql_db_query ( string $database , string $query [, resource $link_identifier = NULL ] )


database

    Le nom de la base de données qui sera sélectionnée.
query

    La requête MySQL.

    Les données contenues dans la requête doivent être proprement échappées.
link_identifier

    La connexion MySQL. S'il n'est pas spécifié, la dernière connexion ouverte avec la fonction mysql_connect() sera utilisée. Si une telle connexion n'est pas trouvée, la fonction tentera d'ouvrir une connexion, comme si la fonction mysql_connect() avait été appelée sans argument. Si aucune connexion n'est trouvée ou établie, une alerte E_WARNING est générée.
Cf : http://php.net/manual/fr/function.mysql-db-query.php

Par contre pour moi ce devrait être ceci :
Code:
$requete=mysql_db_query($DBName,"select pseudo,passe from membre where pseudo='$pseudo_membre' and passe='$passe_membre'",$fh_db) or die(mysql_error());
Très mal de jouer avec des double quote par dessus des double quotes

Et le "must" (je pense) pour ne pas se planter c'est de faire ceci :
Code:
$sql_query = "select pseudo,passe from membre where pseudo='$pseudo_membre' and passe='$passe_membre' ";
$requete=mysql_db_query($DBName,$sql_query,$fh_db) or die(mysql_error());
Note :
Tester ces différents codes (ci-dessous) ici http://fr.piliapp.com/php-syntax-check/
Code 1 :
Code:
Code 2 :
$sql_query = "select pseudo,passe from membre where pseudo='$pseudo_membre' and passe='$passe_membre' ";
$requete=mysql_db_query($DBName,$sql_query,$fh_db) or die(mysql_error());
?>
Code:

Code 3 :
Code:
Code 4 (complet) :
Code:
 0) exit;


$sel = mysql_select_db($DBName, $fh_db);

// ON SELECTIONNE L'ENREGISTREMENT CONTENANT LE LOGIN ET
// MOT DE PASSE SAISIS A LA PAGE INDEX
$sql_select_query = "select pseudo,passe from membre where pseudo='$pseudo_membre' and passe='$passe_membre'";
$requete=mysql_db_query($DBName,$sql_select_query,$fh_db) or die(mysql_error()); 

// SI AUCUN ENREGISTREMENT NE CORRESPOND
if(mysql_num_rows($requete)==0)
{
// REDIRECTION VERS LA PAGE ERREUR
header("Location:$url_erreur");
}

// SI LE LOGIN ET MOT DE PASSE SONT EXACTES
else
{
// CREATION D'UN IDENTIFIANT ALEATOIRE
$taille = 20;
$lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
srand(time());
for ($i=0;$i<$taille;$i++)
{
$id.=substr($lettres,(rand()%(strlen($lettres))),1 );
}

// MISE A JOUR DE L'IDENTIFIANT DANS LA TABLE
$sql_update_query = "update membre set id='$id' where pseudo='$pseudo_membre' and passe='$passe_membre'";
$requete=mysql_db_query($DBName,$sql_update_query,$fh_db) or die(mysql_error());

// REDIRECTION VERS UNE PAGE PROTEGEE AVEC L'IDENTIFIANT SERVANT DE CLE
header("Location:zonemembre.php?id=$id");
}

// DECONNEXION MYSQL
mysql_close($fh_db);
?>
Cordialement, janus57

Gaston_Phone
25/07/2015, 14h45
$requete=mysql_db_query($DBName,"select ...

Hum! Hum! ne serait-ce pas plutôt :
$requete=mysql_db_query(Table>,"select ...

bouleau
25/07/2015, 13h36
Merci Abazada,

oui, effectivement, en supprimant les 2 "echo" du script test, je n'ai plus cette erreur,
par contre j'ai une erreur après

$requete=mysql_db_query($DBName,"select pseudo,passe from membre where pseudo="$pseudo_membre" and passe="$passe_membre"",$fh_db) or die(mysql_error());
Connexion impossible à la base de données sur le serveur
Vérifiez les paramètres du fichier conf.php

fichier conf.php


$DBhost = "mysql5-35"; // Par exemple

$DBowner = "xxxx"; // ton login SQL

$DBpw = "xxxx"; // ton password SQL

$DBName = $DBowner;

// REDIRECTION VERS UNE PAGE ERREUR AU CAS OU LE LOGIN ET MOT DE PASSE SONT INVALIDES
$url_erreur="erreur.htm";

// PAGE PRINCIPALE PROTEGEE PAR MOT DE PASSE
$zone_membre="zonemembre.php";
?>

Abazada
25/07/2015, 12h38
Bonjour,
Le "already sent" est un très grand classique
Tu ne doit rien avoir envoyé/écrit avant d'utiliser header()
or dans ton cas tu as un "echo" vers la ligne 8...

bouleau
25/07/2015, 12h22
Bonjour,
en modifiant mon code pour essayer la connexion en m'inspirant du script de Gaston Phone, j'ai une erreur ligne 44

Warning: Cannot modify header information - headers already sent by (output started at /home/bonneocc/www/membre/login.php:8) in /home/bonneocc/www/membre/login.php on line 44

la ligne 44 est en gras, est-ce que cette ligne peut poser problème ?

Merci


// CONNEXION A LA BASE DE DONNEE
$fh_db = mysql_connect($DBhost, $DBowner, $DBpw);

$Erreur = mysql_error();

echo " mysql_connect=".$fh_db." - Erreur=".mysql_error()."
\n";

if (strlen($Erreur) > 0) exit;



$sel = mysql_select_db($DBName, $fh_db);

echo " mysql_select_db=".$sel." - Erreur=".mysql_error()."

\n";
// ON SELECTIONNE L'ENREGISTREMENT CONTENANT LE LOGIN ET
// MOT DE PASSE SAISIS A LA PAGE INDEX
$requete=mysql_db_query($DBName,"select pseudo,passe from membre where pseudo="$pseudo_membre" and passe="$passe_membre"",$fh_db) or die(mysql_error());

// SI AUCUN ENREGISTREMENT NE CORRESPOND
if(mysql_num_rows($requete)==0)
{
// REDIRECTION VERS LA PAGE ERREUR
header("Location:$url_erreur");
}

// SI LE LOGIN ET MOT DE PASSE SONT EXACTES
else
{
// CREATION D'UN IDENTIFIANT ALEATOIRE
$taille = 20;
$lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
srand(time());
for ($i=0;$i<$taille;$i++)
{
$id.=substr($lettres,(rand()%(strlen($lettres))),1 );
}

// MISE A JOUR DE L'IDENTIFIANT DANS LA TABLE
$requete=mysql_db_query($DBName,"update membre set id="$id" where pseudo="$pseudo_membre" and passe="$passe_membre"",$fh_db) or die(mysql_error());

// REDIRECTION VERS UNE PAGE PROTEGEE AVEC L'IDENTIFIANT SERVANT DE CLE
header("Location:zonemembre.php?id=$id");
}


// DECONNEXION MYSQL
mysql_close($fh_db);
?>

bouleau
25/07/2015, 01h01
Bonsoir Gaston Phone,
j'ai testé le script,
la bdd s'est créée, elle ne s'est pas supprimée, elle est toujours là avec 3 enregistrements
Durée du traitement = 0.01 secondes
avec ou sans le fichier .ovhconfig (Version de PHP : 4.4.9 puis 5.4.38)
merci de ton aide

Gaston_Phone
24/07/2015, 22h58
Essaie ce script --> OVH - Test de Base de Données via un script

bouleau
24/07/2015, 22h54
et bien non, mince, ça ne change rien, toujours le même problème, comme si la connexion à la bdd ne se fait pas,
pourtant avec les mêmes identifiants, en php 4.4.9 ça fonctionne

bouleau
24/07/2015, 22h36
Merci beaucoup Janus, je vais tester ça,
pour mysql oui, je vais avoir à réécrire, je reviendrai sans doute demander conseil,

Bonne soirée

janus57
24/07/2015, 22h14
Bonjour,

bon je fait avec les bribe de code que vous donnez…

Donc voici perso quelques chose sans erreur de syntaxe (et qui doit fonctionner normalement) :
Code:
$sql_bdd sur le serveur $sql_server
xxxxxxxx"; exit;} // ON SELECTIONNE L'ENREGISTREMENT CONTENANT LE LOGIN ET // LE MOT DE PASSE SAISIS A LA PAGE INDEX $query="select pseudo,passe from membre_machines where pseudo= '$pseudo_membre' and passe= '$passe_membre'"; $requete=mysql_db_query($sql_bdd,$query,$db_link) or die(mysql_error()); // SI AUCUN ENREGISTREMENT NE CORRESPOND if(mysql_num_rows($requete)==0) { // REDIRECTION VERS LA PAGE ERREUR header("Location:$url_erreur"); }
Par contre va bientôt falloir oublier les fonction mysql_ qui sont obsolète…

Cordialement, janus57

bouleau
24/07/2015, 19h17
merci Janus de ton aide,
je viens d'ajouter le début du code de la page login qui fait appel a la page configuration
mais ça n'apparait pas encore, je n'ai pas l'habitude du forum je crois qu'il faut attendre
je le remet





// CONNEXION A LA BASE DE DONNEE
$db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd) ;
if(!$db_link) {echo "Connexion impossible à la base de données $sql_bdd sur le serveur $sql_server
xxxxxxxx"; exit;}

// ON SELECTIONNE L'ENREGISTREMENT CONTENANT LE LOGIN ET
// LE MOT DE PASSE SAISIS A LA PAGE INDEX
$requete=mysql_db_query($sql_bdd,"select pseudo,passe from membre_machines where pseudo="$pseudo_membre" and passe="$passe_membre"",$db_link) or die(mysql_error());

// SI AUCUN ENREGISTREMENT NE CORRESPOND
if(mysql_num_rows($requete)==0)
{
// REDIRECTION VERS LA PAGE ERREUR
header("Location:$url_erreur");
}
le script ne va pas plus loin, et renvoie sur la page erreur

janus57
24/07/2015, 19h07
Bonjour,

hum là clairement il manque un bout de code, car c'est pas ce code qui fait la connexion au SQL y a juste les infos dans ce fichier rien de plus.

De plus un message d'erreur serait utile pour aider (en plus du bon code).

Cordialement, janus57

bouleau
24/07/2015, 18h31
Bonjour à tous,

je cherche de l'aide pour un problème pour le passage de mon site en PHP 5

c'est un plan 90

j'ai créé la page .ovhconfig

tout fonctionne, sauf l'espace membre, pas de connection à la BDD

je n'arrive pas à mettre le doigt sur le petit truc qui ne va pas

je me permets de vous donner le code de la page de connexion,

/*-----------------------------------------------------------------*/


// SERVEUR SQL
$sql_serveur="mysql5-35";

// LOGIN SQL
$sql_user="xxxxxx";
// MOT DE PASSE SQL
$sql_passwd="xxxxxx";
// NOM DE LA BASE DE DONNEES
$sql_bdd="xxxxxxxxx";

$url_erreur="erreur.htm";

$zone_membre="zonemembre.php";
?>
Est-ce que déjà il n'y a pas de modification à apporter à ce niveau en php 5, celà fonctionnait pour php 4

Merci beaucoup de vos réponses
Bonne journée