Insert To probleme

Eléphanteau du PHP | 48 Messages

21 janv. 2012, 19:12

ok mais je me trompe si je dis que cette ligne ne sert a rien dans mon code ?

ViPHP
xTG
ViPHP | 7331 Messages

21 janv. 2012, 20:35

Effectivement elle semble ne servir à rien vu que tu accèdes toujours à $_POST. :)

Eléphanteau du PHP | 48 Messages

21 janv. 2012, 21:40

;p ok super !

autre chose

est ce que je dois securiser egalement une requete fetch ?
<?php
session_start();
 

$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=bd_principale', 'root', '', $pdo_options);
    


$loginOK = false;  // cf Astuce
      

// On n'effectue les traitement qu'à la condition que 
// les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['password'])) )
{
    extract($_POST);  // je vous renvoie à la doc de cette fonction
  
    $login_echap = $bdd->quote($_POST['password']);
    echo $login_echap;

      // On va chercher le mot de passe afférent à ce login
    $sql = "SELECT nom, prenom, adresse, complement_adresse, ville, code_postale, mail, login, pwd FROM bd_principale WHERE login = '".addslashes($login)."'";
    $req = $bdd->query($sql) or die(mysql_error().'<br />'.$sql);
       
                
      // On vérifie que l'utilisateur existe bien
    if ($req->rowCount() > 0)
	  {
    	echo 'utilisateur existant';
      $data = $req->fetch();  
      $truc = $data['pwd'];
      echo $truc;
    	 // On vérifie que son mot de passe est correct
	    if ($password == $data['pwd']) 
		  {
      		$loginOK = true;
      }
	  }
	  echo 'utilisateur inexistant';
}

// Si le login a été validé on met les données en sessions
if ($loginOK)
 {
 	$_SESSION['nom'] = $data['nom'];
 	$_SESSION['prenom'] = $data['prenom'];
 	$_SESSION['adresse'] = $data['adresse'];
 	$_SESSION['complement_adresse'] = $data['complement_adresse'];
	$_SESSION['ville'] = $data['ville'];
 	$_SESSION['code_postale'] = $data['code_postale'];
 	$_SESSION['mail'] = $data['mail'];
 	$_SESSION['login'] = $data['login'];

  echo 'Vous etes connecter en tant que:';
  echo  'nom : ',$_SESSION['nom'],
        '<br />prenom : ',$_SESSION['prenom'],
        '<br />adresse : ',$_SESSION['adresse'],
        '<br />complement_adresse : ',$_SESSION['complement_adresse'],
        '<br />ville : ',$_SESSION['ville'],
        '<br />code_postale : ',$_SESSION['code_postale'],
        '<br />mail : ',$_SESSION['mail'],
        '<br />login : ',$_SESSION['login']; 
 }

else 
{ 
echo $login_echap;
//header('Location: loginfaux.html');
}
?>
Je voudrais remplacer le addslash avec une variable preparée comme dans cet exemple (un code qu'on a vu precedement ensemble)
<?php

$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=bd_principale', 'root', '', $pdo_options);

$adre_echap = $bdd->quote($_POST['Itm_8_00_7']);
echo $adre_echap;

if ( isset($_POST) && (!empty($_POST['Itm_8_00_7'])) )
{
	extract($_POST);  

  	// On va chercher l'adresse mail dans la base
  	$sql = "SELECT mail FROM bd_principale WHERE mail = $adre_echap";
  	$req = $bdd->query($sql) or die(mysql_error().'<br />'.$sql);

  		if ($req->rowCount() > 0)
			{
            echo '<br /> Adresse mail deja utilisé.';
			}	
			else

			{
			$bdd->query('INSERT into bd_principale(nom, prenom, adresse, complement_adresse, code_postale, ville, mail, login, pwd) VALUES(' . $bdd->quote($_POST['Itm_8_00_1']) . ', '. $bdd->quote($_POST['Itm_8_00_2']) .', '. $bdd->quote($_POST['Itm_8_00_3']) .', '. $bdd->quote($_POST['Itm_8_00_4']) .', '. $bdd->quote($_POST['Itm_8_00_5']) .', '. $bdd->quote($_POST['Itm_8_00_6']) .', '. $bdd->quote($_POST['Itm_8_00_7']) .', '. $bdd->quote($_POST['Itm_8_00_8']) .','. $bdd->quote($_POST['Itm_8_00_9']) .')');
			}
}  
?>
j'ai fait plein d'essai mais rien a faire !
Est ce que si tu utilise un quote pour l'enregistrement dans la bd, le quote modifi t-il la chaine de caractere ou simplement rajoute t-il des ' ' qui ne seront pas interpreter par la suite ?

merci

ViPHP
xTG
ViPHP | 7331 Messages

22 janv. 2012, 10:31

La fonction quote est à utiliser pour toute requête qui ne passe pas par un prepare() (requête préparée, mais aucune utilité dans tes cas).
Elle ne fait pas que détecter les types de variable pour rajouter ou non des quotes, elle protège aussi les caractères spéciaux qui pourrait faire échouer la requête ou la modifier.