Fonction Header PHP

DCO2 Messages postés 56 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 3 avril 2006 - 6 déc. 2005 à 14:45
 J_G - 21 déc. 2005 à 20:39
Bonjour,

J'aimerai savoir comment paramétrer une fonction header.

Voici le débur de la page:

<?php
session_start();
if (@$userid &amp;&amp; @$password) {
    require "connect.inc";
    $res = @mysql_query("SELECT userid FROM users WHERE userid='$userid' AND password='$password' AND level='registered'");
    if(@mysql_num_rows($res) != 0) {
        $verified_user = $userid;
        session_register("verified_user");
        //echo "bon password";
        Header("Location: ."/".$page_redirection");
//.....
?>


Si je met cette fonction Header comme ci dessus j'ai un page blanche qui s'affiche.
J'ai essayé plusieurs manière de la paramétrer mais toujours sans résultat.
Merci de votre aide.

76 réponses

DCO2 Messages postés 56 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 3 avril 2006
8 déc. 2005 à 22:19
Bonsoir,

J'ai enlevé les ob_start et ton ob_end_flush
1- le level sert à vérifier dans la base que le client s'est bien enregistré via un mail
2- j'ai déjà essayé en enlevant les @ et les $ dant les fonction sans succés.
3- connect.inc ne sert qu'à la connection à la bd c'est là que se vérifie le bon userid et le bon password.
Voici le code du connect.inc
<?
// DEBUT - Reglages
$db_host="00.000.000.000"; // Adresse de la base de données
$db_user="username"; // Username (pour la base de données)
$db_pass="password"; // Password (pour la base de données)
$db="db_name"; // Nom de la base de données
$site_name="NOM DE MON SITE"; // Nom de votre site
$serveur="http://mon_site.com/"; // Adresse de votre serveur
$mail_controle=1; // 1 si vous voulez recevoir un mail lors de l'inscription d'un membre (0 sinon)
$adresse_webmaster="machin.truc@hostname.com";// Adresse mail du webmaster
$validite=3600*24*7; // Durée avant laquelle on doit valider son inscription en secondes
$page_redirection="exemple.php";// Page sur laquelle on atterit après s'être loggué.
// FIN - REGLAGES
mysql_connect($db_host,$db_user,$db_pass) or die("Unable to connect to database");
mysql_select_db($db) or die("Unable to select database");
?>

pour un essai j'ai mis le bout de code que tu as mis dans ta réponse et impossible de se connecter il met "Mauvaise saisie de votre Nom ou du Mot de Passe !"
Une question qu'est ce que empty?

Je ne sais plus quoi faire pour que cela marche.
Merci pour toute l'aide que tu peux m'apporter.
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
9 déc. 2005 à 18:06
isset vérifie que la variable existe et empty vérifie que la variable est vide ou non... .. .



Question bête mais qui expliquerait le fait que mon code refuse de te
connecter... est ce que tes mots de passe sont cryptés ou pas dans ta
base parce que pour le bout de code que je t'ais donné je suis parti du
principe que tes passes étaient hachés avec md5... si c'est pas le cas
soit tu les hache avec md5 pour les stocker dans ta bdd ce qui serait
préférable pour des raisons de sécurité... soit tu remplace
md5($_POST['password']) par $_POST['password']... .. .



Pour ce qui est du level il serait pas plus simple de stocker
l'information en numérique 1 si le compte est validé 0 s'il ne l'est
pas ainsi tu n'aura qu'a tester l'état de cette variable via
empty($level) ou empty($datas['level']) si on reprend mon exemple...
qui plus est ça économisera un peu de place dans ta BDD... .. .



Personellement je te conseillerais aussi d'une part de définir tes
identifiant de connection à la bdd via des constantes
(define('MA_CONSTANTE', 'ma valeur');) plutot que des variables ainsi
elle pourront être utilisé n'importe ou dans tes scripts sans risquer
d'être modifiés... je te conseil aussi d'utiliser une class sql comme
celle ci... ça te
permettra de changer facilement tes requetes sql sans pour autant
réécrire tous tes script et ça simplifiera ton code... .. .



Bon courage à toi et bonne continuation... .. .


@ tchaOo°




l'homme est un loup pour l'homme... .. .
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
9 déc. 2005 à 18:15
Petit précision... empty vérifie que la variable contient une valeur
non null c'est à dire qu'elle est vide (''), à 0, false, que c'est un
tableau vide ou qu'elle est null... .. .



http://www.php.net/manual/fr/function.empty.php



Je te conseil de télécharger la doc php sur php.net (http://www.php.net/download-docs.php) ça te sera utile... .. .



@ tchaOo°

l'homme est un loup pour l'homme... .. .
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
9 déc. 2005 à 18:33
"$res = @mysql_query("SELECT userid FROM boutique_users WHERE
userid='".$_POST["userid"]."' AND password='".$_POST["password"]."' AND
level='registered'");
if(@mysql_num_rows($res) != 0) {
$verified_user = $userid;
session_register("verified_user");
//echo "bon password";
Header("Location: ../".$page_redirection);"

mysql_fetch_array() jviens de te dire !!!!
0

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

Posez votre question
DCO2 Messages postés 56 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 3 avril 2006
9 déc. 2005 à 20:48
Bonsoir à tous,

Voici le code modifié suiivant les instructions de Kankrelune:
<?php
if (isset($_POST['userid']) && !empty($_POST['userid']) && isset($_POST['password']) && !empty($_POST['password'])) {
require('connect.inc');
$res = mysql_query("SELECT password,level FROM boutique_users WHERE userid='".strip_tags(trim($_POST["userid"]))."'");
if(!mysql_num_rows($res)) {
//pas d'enregistrement
header('location: identification.php?m=1');
} else {
//on décompose en tableau associatif
$datas = mysql_fetch_array( $res, MYSQL_BOTH );
//on compare
if(!strcmp($_POST['password']),$datas['password'])) {
//on lance la session
session_start();
$_SESSION['verified_user'] = $userid;
//echo 'bon password';
header('location: ../'.$page_redirection);
}
else
{
header('location: identification.php?m=1');
}
}
else
{
header('location: identification.php?m=1');
}
?>

Mais cela ne fonctionne toujours pas et maintenant j'ai une page blanche lorsque l'on a entré le userid et le password. Même si l'on met met un userid ou un password incorrect il ne bloque pas en disant mauvais pseudo ou mauvais mot de passe.

Merci de votre aide.
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
9 déc. 2005 à 21:17
C'est mal codé. Relis la doc ==> mysql_num_rows() renvoit FALSE que quand y'a une erreur, pas quand y'a pas d'enregistrement ...

Je te code le tout :

<?php
if (isset($_POST['userid']) && !empty($_POST['userid'])
&& isset($_POST['password']) &&
!empty($_POST['password']) ) {
require('connect.inc'); $res mysql_query("SELECT level FROM boutique_users WHERE userid '".mysql_real_escape_string( trim($_POST['userid']) )."' AND password = '".mysql_real_escape_string( trim($_POST['password']) ) ");
if( mysql_num_rows($res) === 1 ) {
//on décompose en tableau associatif
$data = mysql_fetch_array( $res, MYSQL_ASSOC );
//on lance la session
session_start();
$_SESSION['verified_user'] = $data['userid'];
header('Location: ../'.$page_redirection);
exit();
} else {
header('location: identification.php?m=1');
exit();
} else {
header('location: identification.php?m=1');
exit;
}
?>

C'est comme ca qu'on fait ! On fait les tests sur ta DB et tu récupères le résultat ensuite ! Lis bien la doc www.php.net sur les fonctions mysql_fetch_array(), mysql_num_rows() également !
Ca peut aider par la suite !
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
9 déc. 2005 à 21:18
Et j'ai fais mon erreur :D$res mysql_query("SELECT level FROM boutique_users WHERE userid
'".mysql_real_escape_string( trim($_POST['userid']) )."' AND password =
'".mysql_real_escape_string( trim($_POST['password']) ) ");

Par ==>
$res mysql_query("SELECT userid, level FROM boutique_users WHERE userid
'".mysql_real_escape_string( trim($_POST['userid']) )."' AND password =
'".mysql_real_escape_string( trim($_POST['password']) ) ");

Pense aussi a te documenter sur SQL au passage !
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
9 déc. 2005 à 21:48
FhX... le num_rows enverra 0 s'il n'y a pas d'enregistrement ce qui
revient au même... après je suis d'accord " === 1" est plus propre...
.. .



Par contre faudra m'expliquer pourquoi dans ta requete tu demande le
userid alors que ton WHERE est sur le userid... lOol... .. . ;o)



@ tchaOo°

l'homme est un loup pour l'homme... .. .
0
DCO2 Messages postés 56 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 3 avril 2006
9 déc. 2005 à 21:49
Je viens de faire la modif indiquée et cela ne fonctionne toujours pas. J'ai toujours une page blanche et si l'on met met un userid ou un password incorrect il ne bloque pas en disant mauvais pseudo ou mauvais mot de passe.
Merci de votre patience.
0
DCO2 Messages postés 56 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 3 avril 2006
9 déc. 2005 à 21:53
pour ce qui est du level j'ai suivi votre conseil j'ai mis "0" pour non confirmé et "1" pour confirmé.
0
DCO2 Messages postés 56 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 3 avril 2006
9 déc. 2005 à 21:55
Mais une autre question me vient à l'esprit.
Avec ce code comment fait on pour vérifier si le level est bien à 1 pour donner l'accès à la page demandée?
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
12 déc. 2005 à 11:47
Pour tester ton level vas voir la fonction empty dans la doc... .. .



Pour le reste tu es sûr d'avoir error_reporting d'activé... .. ?



met "error_reporting(E_ALL);" au tout dédut de ton script... .. .



@ tchaOo°




l'homme est un loup pour l'homme... .. .
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
12 déc. 2005 à 12:21
Nan mais DCO2 tu veux faire trop de trucs alors que ta base initiale ne marche pas...

" le num_rows enverra 0 s'il n'y a pas d'enregistrement ce qui revient au même"
Entre FALSE et 0... y'a une sacrée différence. C'est comme si tu me disais que NULL = 0, ce qui est faux aussi.
Y'a pas de mal à vouloir rétablir une logique de programmation :o

"Par contre faudra m'expliquer pourquoi dans ta requete tu demande le
userid alors que ton WHERE est sur le userid... lOol... .. . ;o)" Heu, bonne question ... !

Pour débugger un projet ==> fait des die('test'); un peu partout. Comme ca, si ca t'affiche 'test' dans ton navigateur, c'est que tout marche comme il faut...
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
12 déc. 2005 à 13:25
FhX je ne veux aucunement réécrire la logique de programation... relis la doc et après on en recause... je cite... .. .
<!--StartFragment -->



Instruction if ()


Comme nous l'avons vu dans le paragraphe consacré aux expressions, expr</VAR> est convertie en sa valeur booléenneexpr</VAR> vaut <TT><gras>TRUE</TT>, PHP exécutera l'instruction et si elle vaut <TT>FALSE</TT>, l'instruction sera ignorée. Plus de détails sur les valeurs qui valent <TT>FALSE</TT> sont disponibles dans la section Conversion en booléen.
<!--StartFragment -->


booléen

de valeurs de type bool, les valeurs suivantes sont considérées comme fausses (<TT>FALSE</TT>) :



<LI>
Le booléen <TT>FALSE</TT> lui-même

</LI>
<LI>
L'entier 0 (zéro)

</LI>
<LI>
Le chaîne de caractères 0.0 (zéro)

</LI>
<LI>
La chaîne de caractères vide et la chaîne de caractères "0"

</LI>
<LI>
Le tableau vide (aucun élément)

</LI>
<LI>
L'objet vide (aucun élément) (PHP 4 uniquement)

</LI>
<LI>
La type spéciale <TT>NULL</TT>

</LI>
Toutes les autres valeurs sont considérées comme vraies (<TT>TRUE</TT>) (y compris les ressource).

Donc on est bien d'accord... l'entier 0 sera concidéré comme False dans un if... et pour cela pas besoin de réinventer la logique de php... .. . :oP

@ tchaOo°

l'homme est un loup pour l'homme... .. .
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
12 déc. 2005 à 13:44
C'est une égalité converti... pas une égalité stricte ! Ce qui change beaucoup la donne !
En effet, la doc PHP stipule bien qu'il y a conversion des expressions dans un type booleen... cependant, ce que la doc ne te dis pas, c'est que cette conversion se fait comme si tu avais un opérateur == dans ton if.
En d'autres termes :

$var = 1;
if ( $var ) { // } <==> if ( $var == TRUE ) { // }

Sauf que :
if ( $var ) { // } <=/=> if ( $var === TRUE ) { // }

Citation de la doc :
== est un op&#233;rateur d'&#233;galit&#233;
 
qui retourne un bool&#233;en

Et c'est à cause de ce genre de choses qu'on voit des erreurs fleurirent de partout ! Après les gens s'étonnent que des fois ca marche, des fois ca marche pas ...

L'utilisation de la strict égalité permet de se prémunir de beaucoup de choses, comme on se prémuni des variables globales grâce à get_magic_quote_gpc() par exemple.

Mais tu as cependant raison car tu utilises l'opérateur d'égalité, moi l'opérateur de strict égalité. Au moins je suis sûr plus tard que mon code marchera toujours :)

Mais je maintiens ce que je dis quand même : "le num_rows enverra 0 s'il n'y a pas d'enregistrement ce qui revient au même" 0 !== FALSE dans l'absolu !

Citation de la doc au passage :
Retourne le nombre de lignes dans un jeu de résultats en cas de succès, ou
<tt>FALSE</tt> si une erreur survient.
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
12 déc. 2005 à 14:10
Pour le num_rows je n'ais jamais dit que je cherchais False... je
vérifie juste s'il trouve quelque chose ou non... 0 passe comme false
dans mon if renvoyant le membre vers la page d'identification... .. .



Comme je l'ais dis le fait que tu utilise un opérateur de strict
égalité rend ton code plus propre mais le mien marche aussi et n'est
pas une abhération de language comme tu semblais l'incinuer (de toute
façon au final on s'en fout ;o)... .. .



à partir de là ça change pas grand chose pour DCO2 dont le code bloque toujours... lOol... .. . ;o)



@ tchaOo°


l'homme est un loup pour l'homme... .. .
0
DCO2 Messages postés 56 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 3 avril 2006
12 déc. 2005 à 17:22
Bonjour à vous tous et merci pour votre aide.

Pour voir où le code bloque j'ai fait un test avec die('test'); ligne après ligne, comme le préconise FhX et les test a réussit à chaque fois sauf à la ligne
Header("Location: ../".$page_redirection); ou test ne s'est pas affiché.

J'ai modifié cette fonction en mettant comme ceci:
Header("Location: ../.$page_redirection"); la page demande par cette redirection ne f'affiche toujours pas maintenant j'ai une erreur 404 car l'adresse est:
http://www.mon_site.com/.boutique/index.php au lieu d'être:

http://www.mon_site.com/boutique/index.php sans le point devant boutique.
Et si j'enlève le point dans le code cela fait une erreur 404.

J'ai aussi entré l'adresse complète de la page qui doit s'affichée et là ça bloque comme avant en faisant comme ceci:
Header("Location: http://www.com/boutique/index.php");

D'où cela peut il venir?

Merci de votre aide.
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
12 déc. 2005 à 17:48
" à partir de là ça change pas grand chose pour DCO2 dont le code bloque toujours..." Oui, y'a au moins une chose de sur :)

Bon :
Header("Location: ../".$page_redirection); ou test ne s'est pas affiché.

"Header("Location: ../.$page_redirection"); la page demande par cette redirection ne f'affiche toujours pas maintenant j'ai une erreur 404 car l'adresse est:
http://www.mon_site.com/.boutique/index.php au lieu d'être:"

heu ... fait un die($page_redirection); histoire de voir ce que ca marque !
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
12 déc. 2005 à 19:08
Et le error_reporting(E_ALL); au début de la page... tu l'as mis... rien ne s'affiche... .. ?



@ tchaOo°




l'homme est un loup pour l'homme... .. .
0
DCO2 Messages postés 56 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 3 avril 2006
12 déc. 2005 à 19:16
Bonsoir,

En mettant die($page_redirection); cela m'affiche "boutique/index.php"

pour le error_reporting(E_ALL); rien ne s'affiche et j'ai la page erreur 404.

merci de votre aide.
0
Rejoignez-nous