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:
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) :
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)
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." €<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)