8791 sujets

Développement web côté serveur, CMS

Bonjour, je vous soumets un problème dont je ne trouve pas l'explication:

J'ai un fichier qui permet de traiter des infos passées depuis un formulaire pour un paiement paypal.

Voici le code de ce fichier qui update une table si le paiement est accepté par paypal:

<?php
session_start(); 

require("ajout_id_conf.php");
require('connexion.inc.php'); 
$db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd);
$mailTo="XXXXXX@XXXXX.com";
$email_account = "XXXXXX@XXXX.XX";
$req = 'cmd=_notify-validate';

foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}

// renvoyer au systeme Paypal pour validation
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);

// assign posted variables to local variables
$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];
$payment_date = $_POST['payment_date'];

$str=$_POST['custom'];
parse_str($str);

$headerMail= "Content-Type:text/html;charset=iso-8859-1\n";
$headerMail.= "Content-Transfer-Encoding: 8bit\n";
$headerMail.="From: me";

$textMail="
	<strong>Détail de la commande</strong><br />
	Commande numéro:".$txn_id."<br />
	prix: ".$payment_amount." &euro;<br />
	1 -> : ".$pseudo."<br />
	2 -> : ".$code."</br>";


fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp($res, "VERIFIED") == 0) {


mail($mailTo,"titre du mail",$textMail,$headerMail);
	if ( $payment_status == "Completed") {
	
		if ( $email_account == $receiver_email) {


$db = new PDO("mysql:host=XXXXX;dbname=XXXXX","XXXX","XXXX");
$req = $db->query('SELECT * FROM options WHERE price ='.$payment_amount.' and code = '.[b][#red]$code[/#][/b].'');


$dd = $req->fetch(PDO::FETCH_ASSOC);
	if (!empty($dd)) {
	$duration = $dd['duration'];	
	$size=$dd['size'];
	$marque=$dd['marque'];

	$uid = $pseudo;
	$datas = serialize($_POST);


// je cree un fichier de log sur le serveur avec en entete le mail du payeur
$debutlog = $payer_email;
$logtxt= "log.txt";
$fpin=fopen($debutlog.$logtxt,'a');
fwrite($fpin,$datas) ;


$reqa = $db->prepare('UPDATE clients  SET expiration_marque = DATE_ADD(NOW(), INTERVAL '.$duration.' DAY), paiement_marque="oui" WHERE pseudo = :ki');

// création du tableau de valeur
$reqa->execute(array('ki' => $uid,));



}}}}}
fclose ($fp);
//}
?>


le probleme vient de ma variable $code qui se trouve dans : $req = $db->query('SELECT * FROM options WHERE price ='.$payment_amount.' and code = '.$code.'');

je récupère la variable $code par un fichier précédent (bouton paypal) :

<?php if (($_SESSION['size'] == "S") and ($_SESSION['duration'] == "7"))
{
echo '<div align="center" style="color:#FFFFFF; font-family:arial; font-size:12px;">Vous avez choisi d\'afficher votre marque ('.$_SESSION['marque'].')<br />
dans le format '.$_SESSION['size'].' pour une durée de '.$_SESSION['duration'].' jours</div><br />
<br />
<div align="center" style="color:#FFFFFF; font-family:arial; font-size:12px;">Pour continuer veuillez cliquer sur le bouton "Acheter"</div><br />
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
[#red]<input type="hidden" name="custom" value="pseudo='.$pseudo_membre.'&code=S7" />[/#]
<input type="hidden" name="hosted_button_id" value="XXXXXXXXXX">
<table align="center">
<tr>
<td bgcolor="'.$couleurfond.'"><img src="img/pix.gif" height="35" width="1" /></td>
</tr>
<tr><td bgcolor="'.$couleurfond.'"><div align="center">
<input type="hidden" name="currency_code" value="EUR">
<input type="image" class="paypal_input" src="http://www.xxxx.xx/img/acheter_paypal.gif" border="0" name="submit" alt="PayPal - la solution de paiement en ligne la plus simple et la plus sécurisée !" >
<img alt="" border="0" src="https://www.sandbox.paypal.com/fr_FR/i/scr/pixel.gif" width="1" height="1"></div>
</form>
</td></tr>
<tr><td bgcolor='.$couleurfond.'"><img src="img/pix.gif" height="20" width="1" /></td>
</tr>
</table>
';
} ?>



Quand je mets un valeur en dure (genre S7) l'update se fait bien. Je sais que je récupère correctement cette variable puis que dans le mail que je reçois la variable prend la bonne valeur (S7 ou S14 ou M21 ...)

Je dois faire une erreur dans l'ecriture de la requête, mais je ne vois pas où. Merci à tous ceux qui prendront le temps de se pencher sur ce problème
Modifié par pareto (15 Jun 2012 - 11:06)
Salut,

ton problème vient simplement du fait que tu n'as pas mis les guillemet sur ta requête.
$req = $db->query('SELECT * FROM options WHERE price ='.$payment_amount.' and code = '.$code.''); 

au lieu de
$req = $db->query('SELECT * FROM options WHERE price = \''.$payment_amount.'\' and code = \''.$code.'\' ');


Mais en principe tu ne devrait pas utiliser cette méthode. Si tu as des variables dans ta requete SQL, utilise plutôt prepare() que query().


// On prépare la requète
$req = $db->prepare('SELECT * FROM options WHERE price = [langue]rice and code = :code');

// Pour chaque paramètre du met : suivis du nom de ta variable ou du champ, c'est egal
// Ex: :variable1, :variable2, etc. Ils doivent juste être unique
// pas besoin de mettre entre guillemet, PDO s'en charge à ta place, pratique!
// Ensuite tu les reportes dans $req->bindParam() et tu leur assigne ta variable
$req->bindParam(:price, $payment_amount, 	PDO: [langue]ARAM_STR);
$req->bindParam(:code, $code, 	PDO: [langue]ARAM_STR);
$req->execute();


Bref plus d'info ici : http://php.net/manual/fr/pdo.prepare.php

PS: Vu qu'alsacréation utilise un générateur de smeily automatique, tu verra des Smiley langue dans mon code. remplace les par des : P sans espace entre.

Avis aux modérateurs: Possible de virer ces smeily automatique quand il sont dans une partie code là? c'est relou à la fin Smiley langue
Bonjour,
Sp4tz a écrit :
PS: Vu qu'alsacréation utilise un générateur de smeily automatique, tu verra des Smiley langue dans mon code. remplace les par des : P sans espace entre.

Avis aux modérateurs: Possible de virer ces smeily automatique quand il sont dans une partie code là? c'est relou à la fin Smiley langue

Merci pour ton "avis", sois sûr qu'il sera rapidement pris en compte.

Bien cordialement.
Julien Royer a écrit :
Bonjour,

Merci pour ton &quot;avis&quot;, sois sûr qu'il sera rapidement pris en compte.

Bien cordialement.


roooh alors ça c'est du rapide et bien vu! merci Smiley lol