Appel d'une function

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Appel d'une function

par dunbar » 13 mai 2007, 11:57

Ben tout dépend de ce que fait la méthode quote() de la classe PDO.

On peut supposer, d'après son nom et si elle est bien faite, qu'elle va prendre en compte le type de base à laquelle tu te connectes pour protéger de la façon qui va bien les caractères spéciaux.
Si pour MySQL il suffit d'ajouter un antislash devant les apostrophes par exemple, pour des bases comme Oracle, il faut en fait doubler les apostrophes...
C'est probablement ce que fait, ou devrait faire cette fonction :)

Dès lors, c'est plutôt le addSlashes() qui me semble inutile et qui devrait être effectué si nécessaire par quote() en testant le parametre magick quotes nottament :)


Si la question par contre portait plus sur le fait ou non d'utiliser ne fonction pour faire ce test, je dirais que la réponse est : réutilises-tu cette fonction par ailleurs ? Si oui, alors c'est justifié, si non, bah ca vaut peut être pas la peine de passer par une fonction alors que ce bout de code n'apparaitra qu'à un seul et unique endroit de tout ton site :)
Merci pour cette réponse toujours aussi détaillé:wink:

par Ryle » 13 mai 2007, 01:23

Ben tout dépend de ce que fait la méthode quote() de la classe PDO.

On peut supposer, d'après son nom et si elle est bien faite, qu'elle va prendre en compte le type de base à laquelle tu te connectes pour protéger de la façon qui va bien les caractères spéciaux.
Si pour MySQL il suffit d'ajouter un antislash devant les apostrophes par exemple, pour des bases comme Oracle, il faut en fait doubler les apostrophes...
C'est probablement ce que fait, ou devrait faire cette fonction :)

Dès lors, c'est plutôt le addSlashes() qui me semble inutile et qui devrait être effectué si nécessaire par quote() en testant le parametre magick quotes nottament :)


Si la question par contre portait plus sur le fait ou non d'utiliser ne fonction pour faire ce test, je dirais que la réponse est : réutilises-tu cette fonction par ailleurs ? Si oui, alors c'est justifié, si non, bah ca vaut peut être pas la peine de passer par une fonction alors que ce bout de code n'apparaitra qu'à un seul et unique endroit de tout ton site :)

par dunbar » 12 mai 2007, 19:02

Faut procéder par ordre... S'il t'affiche le mauvais message, c'est qu'il rentre dans la mauvaise structure (le else au lieu du if). S'il rentre dans le else, c'est que le test est faux. Si le test est faux, c'est que la fonction renvoi false. Si la fonction renvoi false, c'est parce que $row['nbres'] n'est pas égal à 1 ... alors à quoi est il égal ? et pourquoi a-t-il cette valeur ? sans doute parce que la requête sql ne trouve pas de résultat.

Affiche la requête SQL que tu génères, tu verras qu'il y a un soucis et que les deux champs de la clause WHERE sont vides... reste plus qu'à trouver pourquoi ces deux variables ne contiennent pas les valeurs de celles passées en paramètre :)
Je te remercie j'ai trouver, mais je vais abandonner cette méthode qui me semble faire beaucoup de chipotage pour pas grand chose.
Come par exemple ?
$nom_sql   =  $dbh->quote($login) ; 
$pass_sql  =  $dbh->quote($pass) ; 

              $sql = "SELECT 
              count(*) as nbres 
              FROM users 
              WHERE login='".addslashes($nom_sql)."' 
              AND pass='".md5(addslashes($pass_sql))."'" ; 
Pourquoi ne pas simplement faire ???


              $sql = "SELECT 
              count(*) as nbres 
              FROM users 
              WHERE login='".addslashes($_POST['login'])."' 
              AND pass='".md5(addslashes($_POSt['pass']))."'" ; 

C'est pour le plaisir de taper du code ou il y à une meilleur raison :?:

Merci

par Ryle » 12 mai 2007, 18:20

Faut procéder par ordre... S'il t'affiche le mauvais message, c'est qu'il rentre dans la mauvaise structure (le else au lieu du if). S'il rentre dans le else, c'est que le test est faux. Si le test est faux, c'est que la fonction renvoi false. Si la fonction renvoi false, c'est parce que $row['nbres'] n'est pas égal à 1 ... alors à quoi est il égal ? et pourquoi a-t-il cette valeur ? sans doute parce que la requête sql ne trouve pas de résultat.

Affiche la requête SQL que tu génères, tu verras qu'il y a un soucis et que les deux champs de la clause WHERE sont vides... reste plus qu'à trouver pourquoi ces deux variables ne contiennent pas les valeurs de celles passées en paramètre :)

Appel d'une function

par dunbar » 12 mai 2007, 16:21

Bonjour,

Je créer un fichier d'indentification et j'ai un soucis avec l'appel de ma function:
Mon fichier vérif
<?php
/**************Debut de la Session***************/

session_start();
require_once "function.php";
/**************Données du formaulaire************/

if ( isset( $_POST['login'] ) && isset ( $_POST['motdepasse'] )) {

	/*récupération des données********/

	$nom          = $_POST['login'] ;
	$motdepasse   = $_POST['motdepasse'] ;

	/*vérification de l'existance du couple**/

    if ( verification($nom, $motdepasse)) {

    /*Le couple existe alors on crée un nouvelle identifiant de session*/

    session_regenerate_id() ;

    /*Sauvegarde des données de session*/

    $_SESSION['nom'] = $nom ;
    $message = "Vous êtes correctement identifié" ;

    } else {

    	/*En cas d'erreur avertisment*/

    	$message  = "Mauvais mot de passe" ;
    	$message .= '<a href="auth.php">Retour</a>' ;

    }

   } else {

        /* Il manque un champ ou plus ? ***/

      $message  = "Le login et/ou le mot de passe est manquant" ;
      $message .= '<a href="auth.php">Retour</a>' ;

    }
?>
et mon fichier function
function verification($nom, $motdepasse){

/**********	Connexion MySQL********/

$dbhote   = 'localhost' ;
$dbuser   = 'dunbar' ;
$dbpass   = '000000000' ;
$dbbase   = 'phpavance' ;

$dsn  = 'mysql:dbname='.$dbbase.';host='.$dbhote.'';
$dbh  = new PDO ($dsn, $dbuser, $dbpass);


/*******Création de la requête**********/

$nom_sql   =  $dbh->quote($login) ;
$pass_sql  =  $dbh->quote($pass) ;

              $sql = "SELECT
              count(*) as nbres
              FROM users
              WHERE login='".addslashes($nom_sql)."'
              AND pass='".md5(addslashes($pass_sql))."'" ;

     /***Execution de la requête***/

     $result = $dbh->query($sql) ;
     $row    = $result->fetch() ;
     $result = null ;
     if($row['nbres'] == 1){

              return TRUE;

      }else{

              return FALSE;

       }


 }
Mon soucis est que je dois problament mis prendre comme un manche parce il ne fait pas les test et me renvoie automatiquement à l'erreur mauvais mot passe et ça même si je ne rentre aucune données

Merci :wink: