[RESOLU] Convertion PDO

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 : [RESOLU] Convertion PDO

Re: [RESOLU] Convertion PDO

par moogli » 08 févr. 2014, 18:32

aucun, le cookie c'est un confort (comme tu l'indique).
mais cela peux aussi être une faille de sécurité (c'est falsifiable, après tous c'est un fichier dans le contexte navigateur client).

Attention tout de même il y a, par défaut, un cookie qui est placé pour la session php (regarde les cookies avec l'extension développeur d'un navigateur).


@+

Re: Convertion PDO

par dogmongo » 08 févr. 2014, 16:23

tout en clôturant ce post je voudrait vous poser une question, A-t-on réellement besoins des cookies pour créer des accès sécurisés ?
ou est l'intérêt en dehors d'éviter aux membres de devoir se connecter à chaque fois ?

Re: Convertion PDO

par dogmongo » 08 févr. 2014, 14:52

en tout cas ca ma bien aidé, j'avance plutôt bien :D

Re: Convertion PDO

par moogli » 08 févr. 2014, 12:43

encore merci pour votre aide , en ce moment j'ai l'impression qu'il y a que vous pour la permanence
ben une fois que ma fille dors j'ai du temps "libre" ^^

sinon j'ai juste enlever un if et virer des lignes vide / inutile c'est pas grand chose ;)


@+

Re: Convertion PDO

par dogmongo » 08 févr. 2014, 12:24

Merci pour ce super tuto :shock: , la prochaine dans le premier message je dépose une tasse de café avec croissant :mrgreen: :mrgreen: :mrgreen:

tu as conscience que tu à réduit mon code de moitié quand même ? =D>

j'ai hâte de l'étudier, je vais l'examiner et le comparer à mon anciens pour comprendre mes erreurs et ne plus les refaire

encore merci pour votre aide :wink: , en ce moment j'ai l'impression qu'il y a que vous pour la permanence =D>

Re: Convertion PDO

par moogli » 08 févr. 2014, 12:11

bon aller avec les yeux mieux ouvert se sera mieux.

j'ai confondu exec et execute ... :oops:

donc ce que tu fait est presque correct.
au niveau code pas grand chose à redire par contre ta requête SQL n'est pas bonne .
les marqueurs nommés doivent commencer par ':' (cf doc de bindValue) or toi tu dois demander une ligne où email = 1 :)

j'ai repris ton code pour qu'il soit plus fonctionnel.
J'ai supposé que l'existance des variables étaient vérifiée avant (genre d'où vient $s_Login, vu sont une variable de session qui n'est pas prise dans $_SESSION ?)
<?php
$db = new PDO("");
$query = 'SELECT email FROM source_clients WHERE email=:email';

$select = $db->prepare($query);
$select->bindValue(':email', md5($s_Login));
$ret = $select->execute();
if ($ret !== false) {
    $row = $select->fetch();
    if ($row !== false) {
        if ($row['pass'] == sha1($_POST['s_Pass'])) {
            $_SESSION['mailsutilisateur'] = $_POST['s_Login'];
            // attention redondance avec la lige du dessus c'est la même chose sous forme de tableau c'est tout.
            $_SESSION['S_membre'] = $row;

            $NewMembreID = md5(uniqid(rand(), true));
            // Attention ce if est inutile car
            // 1 : tu ne selectionne pas le userID dans la requête
            // 2 : si tu es la c'est qu'il y a un résultat donc cette doit exister et ne pas être vide (vu son nom c'est la PK non ?)
            // 3 : tu utilise  $_SESSION['S_membre']['clt_id'] qui ne peux pas exister puisse qu'il n'est pas selectionné dans la requête et que tu écrse S_membre 3 ligne plus haut ;)
            if (!empty($row['userID'])) {
                $sql = "UPDATE source_clients" .
                    "SET userid= '" . $NewMembreID . "' " .
                    "WHERE clt_id = '" . $_SESSION['S_membre']['clt_id'];
                $db->exec($sql);
                // TODO ajouter la gestion d'erreur :  try / catch + test du retour de la méthode exec
            }
            $cookietime = time() + (86400 * $temp_vie_cookie);
            setcookie("MembreID", $NewMembreID, $cookietime);
            header("Location: index.php");
        } else {
            echo " error de mdp ";
        }
    } else {
        echo " pas de résultat  donc utilisateur inconnu";
    }

} else {
    echo 'Erreur SQL : ';
    $err = $db->errorInfo();
    echo $err[2];
}
$select->closeCursor();
voila comme ça c'est mieux est plus clair :)


@+

Re: Convertion PDO

par dogmongo » 08 févr. 2014, 11:40

ca fait deux jour que je la bouffe la doc, bon et bien je vais en manger encore une peu coté pdostatement :mrgreen:

merci de votre aide

Re: Convertion PDO

par moogli » 08 févr. 2014, 11:34

Non il veux dire que la méthode execute() retourne quelque chose (une pdostatement pour être exact) et que c'est sur cette objet que la méthode fetch existe et pas sur la classe PDO !

Plus d'info sur la doc de PDO (c'est généralement bien documenté avec de beau exemple ;)

@+

Re: Convertion PDO

par dogmongo » 08 févr. 2014, 10:42

merci de ta réponse mais ,
tu veux dire que c'est le bon code sauf qu'il faut que je ferme ma connexion après ?
	$query = 'SELECT email'
		. ' FROM source_clients'
		. ' WHERE email=1;';
		
	$select = $db->prepare($query);
	$select->bindValue(1, 	md5($s_Login), 	PDO::PARAM_STR);
	$select->execute();


	    if ($query !== false) {

		//$row = mysql_fetch_array($query);	 
		$row = $select->fetch();

        if ($row !== false){

            unset($query);
			
            if ($row['pass'] == sha1($_POST['s_Pass'])) 
			{
				$_SESSION['mailsutilisateur'] = $_POST['s_Login'];
										
                unset($row['pass']); // info inutile en session
				
                $_SESSION['S_membre'] = $row;

                $NewMembreID = md5(uniqid(rand(), true));
				              
			    if(!empty($row['userID']))
				{

                    $sql = "UPDATE source_clients".
                        "SET userid= '" . $NewMembreID . "' ".
                         "WHERE clt_id = '" . $_SESSION['S_membre']['clt_id'];
						 
                    if (mysql_query($sql) === false) {

                    }
                }
                $cookietime = time() + (86400 * $temp_vie_cookie);
                setcookie("MembreID", $NewMembreID, $cookietime);
                header("Location: index.php");
            } else {
                echo " error de mdp ";
            }
        } else {
            
			echo " pas de résultat  donc utilisateur inconnu";
        }
    } else {
         
		 echo " erreur SQL, => mysql_error();";
    }
} else {
	
     echo "Utilisateur non trouv&eacute; <br />";
}



	$select->closeCursor();
	$select = NULL;

Re: Convertion PDO

par xTG » 07 févr. 2014, 19:19

L'équivalent est bien fetch.
Il faut l'utiliser sur l'objet retourné par la méthode execute. :)

Convertion PDO

par dogmongo » 07 févr. 2014, 18:54

Bonjour,

j'ai des soucis de conversion PDO, j'ai encore un peu de mal à me familiariser avec !
j'ai cherché sur google mais apparemment il y a pas de solution claire à ma recherche, voici le code que je converti PDO
	$query = 'SELECT email'
		. ' FROM source_clients'
		. ' WHERE email=1;';
		
	$select = $db->prepare($query);
	$select->bindValue(1, 	md5($s_Login), 	PDO::PARAM_STR);
	$select->execute();
 	$select->closeCursor();
	$select = NULL;
	
	    if ($query !== false) {

		$row = mysql_fetch_array($query);	 

        if ($row !== false){

            unset($query);
			
            if ($row['pass'] == sha1($_POST['s_Pass'])) 
			{
				$_SESSION['mailsutilisateur'] = $_POST['s_Login'];
										
                unset($row['pass']); // info inutile en session
				
                $_SESSION['S_membre'] = $row;

                $NewMembreID = md5(uniqid(rand(), true));
				              
			    if(!empty($row['userID']))
				{

                    $sql = "UPDATE source_clients".
                        "SET userid= '" . $NewMembreID . "' ".
                         "WHERE clt_id = '" . $_SESSION['S_membre']['clt_id'];
						 
                    if (mysql_query($sql) === false) {

                    }
                }
                $cookietime = time() + (86400 * $temp_vie_cookie);
                setcookie("MembreID", $NewMembreID, $cookietime);
                header("Location: index.php");
            } else {
                echo " error de mdp ";
            }
        } else {
            			
        }
    } else {    
	
    }
} else {
     
echo "Utilisateur non trouv&eacute; <br />";
}



if (!empty($_COOKIE['MembreID'])) { // si le cookie existe
	
    $sql = "SELECT *
        FROM source_clients
		WHERE userid='" . mysql_real_escape_string($NewMembreID). "'  "; 
        
    $query = mysql_query($sql);

    if ($query !== false) {
        $row = mysql_fetch_array($query);
        
		if ($row !== false) {
            mysql_free_result($query); // important
            unset($row['pass']); 
            $_SESSION['S_membre'] = $row;
            
$cookietime = time() + $temp_vie_cookie; 
            setcookie("MembreID", $_COOKIE['MembreID'], $cookietime);
        } else {
			
         // echo " utilisateur inconnu !";
        }
		
    } else {
		  echo mysql_errno($$link) . ": " . mysql_error($link) . "\n";		  
    }
}

Pour l'instant je bloque sur cette ligne, je n'arrive pas à trouver l'équivalent PDO de:
$row = mysql_fetch_array($query);
j'ai l'erreur suivante

Code : Tout sélectionner

atal error: Call to undefined method PDO::fetch()

merci de votre aide