Vous retrouvez la req que j'ai essayer de faire plus bas dans mon code mais la voici quand même:
Elle marche mais par exemple je ne récupère par en bdd la variable photo mais le reste oui ....
//La j'aimerais récupérer en plus donc photo, titre ,phone,postcode ,city ,street mais je n'y arrive pas
$db->query("INSERT INTO orders (user_id,amount,created,datas,txn_id,photo) VALUES(".$uid.",".$payment_amount.",NOW(),'".$data."','".$txn_id."','".$photo."')");
Page formulaire.php
<?php session_start (); ?>
<?php
try
{
$bdd = new PDO('mysql:host=**********;dbname=***********','*************','**************');
$bdd->exec('SET NAMES utf8');
}
catch(Exception $e)
{
echo 'Une erreur est survenue !';
die();
}
// Même chose que error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Document sans titre</title>
<link rel="stylesheet" href="css/bootstrap.css">
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/font-awesome.min.css">
<link rel="Stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/themes/base/jquery-ui.css" />
</head>
<body>
<div class="container">
<nav><?php if (isset($_SESSION['user'])): ?>
<li><a href="profil.php" title="S'inscrire">Bienvenue,<?php echo $_SESSION['user']['email']; ?></a></li>
<li><a href="login.php?logout" title="Se connecter">Logout</a></li>
<?php endif ?>
<h1>Choisir une formule d'abonement</h1>
<?php
$erreurs = array(); //tableau contenant des messages d'erreurs
/* traitement des erreurs
* tous les champs du formulaire non remplis seront placés
* dans le tableau des erreurs $erreurs.A la fin du traitement
* ce tableau sera soit vide, auquel cas on exécute la requête insert
* pour inserer les données en bd, soit ce tableau n'est pas vide(champs non remplis) on invite
* l'utilisateur à remplir tous les champs
*/
if(!empty($_POST)) {//soumission du formulaire
//Verification titre
if(empty($_POST['titre']))
{
$erreurs['titre'] = 'Renseigner un nom de sortie';
}
//Verification ville
if(empty($_POST['city']))
{
$erreurs['city'] = 'Renseigner une ville';
}
//Verification code postal
if(empty($_POST['postcode']))
{
$erreurs['postcode'] = 'Renseigner un code postal';
}
//Verification description
if(empty($_POST['email']))
{
$erreurs['email'] = 'verifier';
}
/////////
// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
$dossier = 'img/annonce/';
$fichier = basename($_FILES['photo']['name']);
$taille_maxi = 1000000;
$taille = filesize($_FILES['photo']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['photo']['name'], '.');
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = 'Veuillez vérifier que le format de votre photo soit de type png, gif, jpg, jpeg, ';
}
if($taille>$taille_maxi)
{
$erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
//On formate le nom du fichier ici...
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{
echo 'Téléchargement effectué avec succès !';
}
else //Sinon (la fonction renvoie FALSE).
{
echo 'Echec du téléchargement !';
}
}
else
{
echo $erreur;
}
//fin traitement des erreurs
//s'il y a problème, procède au debogage en decommentant les 2 lignes çi-dessus:
//var_dump($_POST);
//die('fin debogage');
//le tableau d'erreurs est vide alors on insère les données
if( empty( $erreurs) ){
$req = $bdd->prepare('INSERT INTO orders ( photo, titre, phone, street, postcode, city)
VALUES (:photo, :titre, :phone, :street, :postcode, :city, )');
$retour= $req->execute(array(
'photo'=>$_FILES['photo']['name'],
'titre'=>$_POST['titre'],
'phone'=>$_POST['phone'],
'street'=>$_POST['street'],
'postcode'=>$_POST['postcode'],
'city'=>$_POST['city']
));
if( $retour ===false) echo "Problème lors de l'insertion";
}else{//le tableau ne contient
echo "<p> renseignez les champs vides</p>";
}
}//fin de la soumission du formulaire
?>
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" enctype="multipart/form-data">
<!-- titre de la sortie -->
<label>titre :</label>
<input class="form-control" type="text" name="titre" value="<?php if(isset($_POST['titre'])) echo $_POST['titre'];?>" />
<div class="error"><?php if(isset($erreurs['titre'])) echo $erreurs['titre'];?></div>
<!-- Ville de la sortie -->
<label>Ville *</label>
<input class="form-control" type="text" name="city" value="<?php if(isset($_POST['city'])) echo $_POST['city'];?>" />
<div class="error"><?php if(isset($erreurs['city'])) echo $erreurs['city'];?></div>
<!-- Ville de la sortie -->
<label>Rue</label>
<input class="form-control" type="text" name="street" value="<?php if(isset($_POST['street'])) echo $_POST['street'];?>" />
<div class="error"><?php if(isset($erreurs['street'])) echo $erreurs['street'];?></div>
<!-- Code postal de la sortie -->
<label>Code postal *</label>
<input class="form-control" type="text" name="postcode" value="<?php if(isset($_POST['postcode'])) echo $_POST['postcode'];?>" />
<div class="error"><?php if(isset($erreurs['postcode'])) echo $erreurs['postcode'];?></div>
<label>Télephone</label>
<input class="form-control" type="text" name="phone" value="<?php if(isset($_POST['phone'])) echo $_POST['phone'];?>" />
<div class="error"><?php if(isset($erreurs['phone'])) echo $erreurs['phone'];?></div>
<label>Photo</label>
<input name="photo" type="file"/>
<select name="amount">
<?php
$req = $db->query('SELECT * FROM offers');
while($d = $req->fetch(PDO::FETCH_ASSOC)){
?>
<option value="<?php echo $d['price']; ?>"><?php echo $d['name'];?> -<?php echo $d['price'];?> Euros</option>
<?php
}
?>
</select>
<input name="currency_code" type="hidden" value="EUR" />
<input name="shipping" type="hidden" value="0.00" />
<input name="tax" type="hidden" value="0.00" />
<input name="return" type="hidden" value="http://www.url/succes.php" />
<input name="cancel_return" type="hidden" value="URL_ANNULATION" />
<input name="notify_url" type="hidden" value="http://www.url/ipn.php" />
<input name="cmd" type="hidden" value="_xclick" />
<input name="business" type="hidden" value="l'adresse_vendeur" />
<input name="item_name" type="hidden" value="offre publicitaire" />
<input name="no_note" type="hidden" value="1" />
<input name="lc" type="hidden" value="FR" />
<input name="bn" type="hidden" value="PP-BuyNowBF" />
<input name="custom" type="hidden"value="user_id=<?php echo $_SESSION['user']['id'] ?>" />
<input type="submit" value="S'abonner" class="btn primary">
</form>
</div>
</body>
<script src="js/jquery.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>
<script type="text/javascript" src="js/bootstrap.min.js"></script>
</html>
Page ip.php
<?php
file_put_contents('log', print_r($_POST,true));
// fonction pour vérifier l'unicité de txn_id
function VerifIXNID($txn_id){
file_put_contents('log','Vérification txn_id ');
$db = new PDO("mysql:host=*****;dbname=******","********","**************");
$nbreponse = $db->query("SELECT COUNT(*) FROM orders WHERE txn_id=".$txn_id)->fetchColumn();
if($nbreponse > 0 ){
return 1;
}else{
return 0;
}
}
/**-----------------------------------------------
* Email
-------------------------------------------------**/
$emailto = $_POST['payer_email'];;
$emailfrom = "[email protected]";
$sujetprefix = "[PAYPAL]";
$charset = "utf-8";
$fichier_log = fopen('log.txt', 'w+');
$log = fgets($fichier_log);
$log .="(".date('Y-m-d')." ".date('H:i') .") - Le script est executé.";
fputs($fichier_log, $log);
$log = fgets($fichier_log);
// Adresse Email de la boutique
$email_account = "[email protected]";
$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
// post back to PayPal system to validate
// renvoyer a paypal pour validation
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Host: http://www.sandbox.paypal.com\r\n"; // http://www.paypal.com for a live site
$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
// Affecter les variables postées aux variables locales
$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'];
$num_cart_items = intval($_POST['num_cart_items']);
// numero de transaction
$txn_id = $_POST['txn_id'];
// ON Y MET LE PAQUET mais ça marche pas ...
$photo = $_FILES['photo'];
// parser la variable custom
parse_str($_POST['custom'],$custom);
/* $custom['user_id] = 1*/
if (!$fp) {
// HTTP ERROR
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIED") == 0) {
// check the payment_status is Completed
if($payment_status == "Completed"){
file_put_contents('log','status completed');
// check that receiver_email is your Primary PayPal email
if($email_account == $receiver_email){
file_put_contents('log','email confirmée ');
// check that txn_id has not been previously processed
// if (VerifIXNID($txn_id) == 0) {
file_put_contents('log','txn_id vérifier ');
// check that payment_amount/payment_currency are correct
// process payment
$uid = $custom['user_id'];
// sauvegarder la commande
$data=serialize($_POST);
/*sauvegarde des infos dans un fichier log*/
file_put_contents('log_'.$txn_id, print_r($_POST,true));
// connexion a la base de données
$db = new PDO('mysql:host=*******;dbname=**********','**************','***************');
$req = $db->query('SELECT * FROM offers WHERE price='.$payment_amount.' LIMIT 1');
$d = $req->fetch(PDO::FETCH_ASSOC);
if(!empty($d)){
$duration = $d['duration'];
$uid = $custom['user_id'];
$data = serialize($_POST);
//On met à jour la date d'expiration
$db->query('UPDATE users SET expiration = DATE_ADD(NOW(), INTERVAL '.$duration.' MONTH) WHERE id = '.$uid);
//La j'aimerais récupérer en plus donc photo, titre ,phone,postcode ,city ,street mais je n'y arrive pas
$db->query("INSERT INTO orders (user_id,amount,created,datas,txn_id,photo) VALUES(".$uid.",".$payment_amount.",NOW(),'".$data."','".$txn_id."','".$photo."')");
file_put_contents('log','Le paiement à bien était confirmé');
}else{
file_put_contents('log','Le paiement ne correspond à aucune offre');
}
// Envoi du mail
$mail_To = $emailto;
$mail_Subject = "Votre commande sur notre boutique";
$entetes = "From: ".$emailfrom."\n";
$entetes .= "Reply-To: ".$emailfrom."\n";
$entetes .= "MIME-Version: 1.0 \n";
$entetes .= "Content-Transfer-Encoding: 8bit \n";
$entetes .= "Content-type: text/plain; charset=".$charset."\n";
$mail_Body = "Bonjour,<br\>Merci d'avoir choisi notre site pour faire vos achats, Votre commande partira dans les plus brèfs délais.";
// $mail_Body .= "\n";
// $mail_Body .= "\n---------------------------------------------------------------------------------";
// $mail_Body .= "\n" . "Nombre d'objets dans le panier: " . $num_cart_items;
// if (strlen($item_name1) > 1) { $mail_Body .= "\n\n" . "1er objet en commande: " . $item_name1 . "\n" . "Numéro de l'objet 1: " . $item_number1 . " - " . "Quantité: " . $quantity1; }
// if (strlen($item_name2) > 1) { $mail_Body .= "\n\n" . "2e objet en commande: " . $item_name2 . "\n" . "Numéro de l'objet 2: " . $item_number2 . " - " . "Quantité: " . $quantity2; }
// if (strlen($item_name3) > 1) { $mail_Body .= "\n\n" . "3e objet en commande: " . $item_name3 . "\n" . "Numéro de l'objet 3: " . $item_number3 . " - " . "Quantité: " . $quantity3; }
// if (strlen($item_name4) > 1) { $mail_Body .= "\n\n" . "4e objet en commande: " . $item_name4 . "\n" . "Numéro de l'objet 4: " . $item_number4 . " - " . "Quantité: " . $quantity4; }
// if (strlen($item_name5) > 1) { $mail_Body .= "\n\n" . "5e objet en commande: " . $item_name5 . "\n" . "Numéro de l'objet 5: " . $item_number5 . " - " . "Quantité: " . $quantity5; }
// if (strlen($item_name) > 1) {
// $mail_Body .= "\n" . "Objet en commande: " . $item_name;
// $mail_Body .= "\n" . "Numéro de l'objet: " . $item_number;
// $mail_Body .= "\n" . "Quantité: " . $quantity;
// }
// $mail_Body .= "\n";
// $mail_Body .= "\n---------------------------------------------------------------------------------";
// $mail_Body .= "\n";
// $mail_Body .= "Equipe de ....";
mail($mail_To, $mail_Subject, $mail_Body, $entetes);
// }
// }else{
// file_put_contents('log','Transaction déja éffectué ');
// }
}else{
file_put_contents('log','le paiement ne correspond a aucune offre');
}
}else{
// problème sur le statut de paiement
file_put_contents('log','Il y a un problème sur le statut de paiement');
}
exit();
}
else if (strcmp ($res, "INVALID") == 0) {
// log for manual investigation
// transaction invalide
file_put_contents('log','Transaction invalide');
}
}
fclose ($fp);
}
?>