DCO2
Messages postés56Date d'inscriptionjeudi 14 avril 2005StatutMembreDerniè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 && @$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.
DCO2
Messages postés56Date d'inscriptionjeudi 14 avril 2005StatutMembreDerniè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.
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 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... .. .
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 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... .. .
DCO2
Messages postés56Date d'inscriptionjeudi 14 avril 2005StatutMembreDerniè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.
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 !
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 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']) ) ");
DCO2
Messages postés56Date d'inscriptionjeudi 14 avril 2005StatutMembreDerniè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.
DCO2
Messages postés56Date d'inscriptionjeudi 14 avril 2005StatutMembreDerniè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?
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 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...
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 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 -->
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 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érateur d'égalité
qui retourne un boolé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.
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 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)
DCO2
Messages postés56Date d'inscriptionjeudi 14 avril 2005StatutMembreDerniè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:
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");
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 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 !