Page 1 sur 2

[AIDE] Problème d'UPDATE sql dans un fichier Php

Posté : 11 févr. 2016, 16:02
par Nekk
Bonjour à tous !

Voici mon problème

Je tente d'intégrer un script StarPass sur mon site internet.
Lorsque j'utilise le code d'essais, je suis bien redirigé vers ma page "success" MAIS ... L'update SQL qui devrait ajouter du contenu au contenu déjà présent sur ma Table "user" dans la colonne "diamonds" ne fonctionne pas...

En gros, starpass reconnait que le code est bon, il me dit que j'ai gagné mon contenu supplémentaire mais la BDD ne se met pas à jours ...

Mon site est un CMS, tout est en raccord avec l'ID de l'utilisateur connecté sur son compte donc je ne pense pas que le problème vienne de là..

Je vous donne le code en question, merci de m'éclairer si j'ai fais une boulette quelque part !
<?php
include("../init.php");
include("../includes/files/register.php");
include("../includes/files/session.disconnect.php");

$do2 = safe($_GET['starpass'],'SQL'); if($do2 == "1") {
// Déclaration des variables
$ident=$idp=$ids=$idd=$codes=$code1=$code2=$code3=$code4=$code5=$datas='';
$idp = Settings('IDP');
// $ids n'est plus utilisé, mais il faut conserver la variable pour une question de compatibilité
$idd = Settings('IDD');
$ident=$idp.";".$ids.";".$idd;
// On récupère le(s) code(s) sous la forme 'xxxxxxxx;xxxxxxxx'
if(isset($_POST['code1'])) $code1 = $_POST['code1'];
if(isset($_POST['code2'])) $code2 = ";".$_POST['code2'];
if(isset($_POST['code3'])) $code3 = ";".$_POST['code3'];
if(isset($_POST['code4'])) $code4 = ";".$_POST['code4'];
if(isset($_POST['code5'])) $code5 = ";".$_POST['code5'];
$codes=$code1.$code2.$code3.$code4.$code5;
// On récupère le champ DATAS
if(isset($_POST['DATAS'])) $datas = $_POST['DATAS'];
// On encode les trois chaines en URL
$ident=urlencode($ident);
$codes=urlencode($codes);
$datas=urlencode($datas);

/* Envoi de la requête vers le serveur StarPass
Dans la variable tab[0] on récupère la réponse du serveur
Dans la variable tab[1] on récupère l'URL d'accès ou d'erreur suivant la réponse du serveur */
$get_f=@file("http://script.starpass.fr/check_php.php ... TAS=$datas");
if(!$get_f)
{
exit("Votre serveur n'a pas accès au serveur de StarPass, merci de contacter votre hébergeur.");
}
$tab = explode("|",$get_f[0]);

if(!$tab[1]) $url = Settings('Url')."/payment/error";
else $url = $tab[1];

// dans $pays on a le pays de l'offre. exemple "fr"
$pays = $tab[2];
// dans $palier on a le palier de l'offre. exemple "Plus A"
$palier = urldecode($tab[3]);
// dans $id_palier on a l'identifiant de l'offre
$id_palier = urldecode($tab[4]);
// dans $type on a le type de l'offre. exemple "sms", "audiotel, "cb", etc.
$type = urldecode($tab[5]);

// Si $tab[0] ne répond pas "OUI" l'accès est refusé
// On redirige sur l'URL d'erreur
if(substr($tab[0],0,3) != "OUI")
{
Redirect(Settings('Url')."/payment/error");
exit;
}
else
{
/* Le serveur a répondu "OUI"

On place un cookie appelé CODE_BON et qui vaut la valeur 1
S'il existe, c'est que l'internaute est autorisé,
sinon on le renverra sur une page d'erreur */
setCookie("CODE_BON", "1", 0);

// vous pouvez afficher les variables de cette façon :
// echo "idd : $idd / codes : $codes / datas : $datas / pays : $pays / palier : $palier / id_palier : $id_palier / type : $type";
}

// On vérifie si le cookie existe
if(isset($HTTP_COOKIE_VARS['CODE_BON']))
{
// Si le cookie existe mais que le contenu n'est pas bon on le redirige sur la page d'erreur
if( $HTTP_COOKIE_VARS['CODE_BON] != '1'){
Redirect(Settings('Url')."/payment/error");
exit(1);
}
}
else{
$bdd->exec("UPDATE `users` SET `diamonds` = diamonds + ".Settings('Prix_1')." WHERE id = '".safe($user['id'],'SQL')."'");
$bdd->exec("INSERT INTO `retrophp_payment` (`user_id`, `pseudo`, `statut`, `nombres`, `type`, `code`, `operation` , `remis`) VALUES ('".safe($user['id'],'SQL')."', '".safe($user['username'],'SQL')."', 'Valide', '".Settings('Prix_1')."', 'diamants', '".safe($codes,'SQL')."', 'Achat de diamants', '1');");
Redirect(Settings('Url')."/payment/success");
exit(1);
}
}
?>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title><?php echo Settings('Name'); ?>: <?PHP echo $pagename; ?> </title>
<link type="text/css" rel="stylesheet" href="<?php echo Settings('Url_Images'); ?>/v5/css/habbo.popup.css?<?PHP echo $update; ?>">
<link rel="shortcut icon" href="<?php echo Settings('Url_Images'); ?>/v5/favicon.ico?<?PHP echo $update; ?>" type="image/vnd.microsoft.icon" />
<link href='//fonts.googleapis.com/css?family=Ubuntu:400,700,400italic,700italic|Ubuntu+Condensed' rel='stylesheet' type='text/css'>
</head>
<header>
<div id="container">
<a id="logo" style="background-image: url('<?php echo Settings('Url'); ?>/images/<?php echo Settings('Logo'); ?>');height: 40px;position: absolute;top: 20px;left: 85px;width: 110px;"></a>
</div>
</header>
<body>
<center><div id="starpass_<?php echo Settings('IDD'); ?>"></div>
<script type="text/javascript" src="http://script.starpass.fr/script.php?idd=<?php echo Settings('IDD'); ?>&datas="></script>
<noscript>Veuillez activer le Javascript de votre navigateur s'il vous pla&icir;t.<br />
<a href="http://www.starpass.fr">Micro Paiement StarPass</a>
</noscript></center>
</body>
</html>
La Valeur IDD est bien implanté dans la table setings de ma BDD.
J'espère vraiment trouver de l'aide de votre côté car après des heures de recherches, vous êtes mon dernier espoir :D

Amicalement;
Nekk

Re: [AIDE] Problème d'UPDATE sql dans un fichier Php

Posté : 11 févr. 2016, 17:33
par Mazarini
C'est parfois plus facile de faire :
$SQL = "UPDATE `users` SET `diamonds` = diamonds + ".Settings('Prix_1')." WHERE id = '".safe($user['id'],'SQL')."'";
$bdd->exec($SQL);
If ($bdd->errno) {
   die($SQL.'<br>'.$bdd->error);
}
if ($bdd->affected_rows !== 1) {
   die($SQL.'<br>'.$bdd->affected_rows.' de remplacé');
}
Ca te permettrai de vérifier qu'il n'y a pas d'erreur SQL et qu'il y a bien 1 ligne de modifiée tout en contrôlant le SQL utilisé

Re: [AIDE] Problème d'UPDATE sql dans un fichier Php

Posté : 11 févr. 2016, 18:48
par Nekk
Merci mon ami !

Mais d'un côté comme de l'autre, l'update ne se fait pas :S

Re: [AIDE] Problème d'UPDATE sql dans un fichier Php

Posté : 11 févr. 2016, 20:50
par Nekk
Bon, je me suis inscrit, ce sera plus simple pour la suite !
Donc ton code:

Code : Tout sélectionner

If ($bdd->errno) { die($SQL.'<br>'.$bdd->error); } if ($bdd->affected_rows !== 1) { die($SQL.'<br>'.$bdd->affected_rows.' de remplacé'); }
Ne me rapporte aucunes erreurs ! C'est déjà pas mal !

Ensuite :

Code : Tout sélectionner

$SQL = "UPDATE `users` SET `diamonds` = diamonds + ".Settings('Prix_1')." WHERE id = '".safe($user['id'],'SQL')."'"; $bdd->exec($SQL);
Est certainement mieux que le mien mais hélas, n'injecte toujours pas les données dans la table :(

Re: [AIDE] Problème d'UPDATE sql dans un fichier Php

Posté : 11 févr. 2016, 21:07
par or 1
que retourne un echo $SQL ?
l'update se fait dans phpmyadmin avec la requete générée ?

Re: [AIDE] Problème d'UPDATE sql dans un fichier Php

Posté : 11 févr. 2016, 21:23
par Nekk
Peux-tu me donner la requête à exécuter dans Phpmyadmin s'il te plait ? Je ne suis pas très a l'aise avec ce genre d'écriture et je ne voudrait pas te rapporter une erreur :)

UPDATE users SET diamonds = 100
WHERE id = 1

Quelque chose comme ça ? :P

Re: [AIDE] Problème d'UPDATE sql dans un fichier Php

Posté : 11 févr. 2016, 21:24
par or 1
ce que retourne
echo $SQL;

Re: [AIDE] Problème d'UPDATE sql dans un fichier Php

Posté : 11 févr. 2016, 21:29
par Nekk
Oui, l'update se fait correctement !

Re: [AIDE] Problème d'UPDATE sql dans un fichier Php

Posté : 11 févr. 2016, 21:35
par or 1
avec UPDATE users SET diamonds = 100 WHERE id = 1
ou avec ce que retourne echo $SQL ?

Re: [AIDE] Problème d'UPDATE sql dans un fichier Php

Posté : 11 févr. 2016, 22:11
par Nekk
Avec UPDATE users SET diamonds = 100 WHERE id = 1
Echo SQL ne me rapporte rien ou alors je ne le place pas correctement ...

Re: [AIDE] Problème d'UPDATE sql dans un fichier Php

Posté : 11 févr. 2016, 22:18
par or 1
$SQL = "UPDATE `users` SET `diamonds` = diamonds + ".Settings('Prix_1')." WHERE id = '".safe($user['id'],'SQL')."'";
echo $SQL;
$bdd->exec($SQL);

et si rien ne s'affiche, c'est que cela ne passe pas dans cette partie du code.

Re: [AIDE] Problème d'UPDATE sql dans un fichier Php

Posté : 11 févr. 2016, 22:23
par Nekk
Oui c'est exactement ce que j'ai fait et rien ne s'affiche ...
La seul autre page qui suit est ma page "success" qui affiche le message comme quoi le paiment est validé et le contenu ajouté.

Re: [AIDE] Problème d'UPDATE sql dans un fichier Php

Posté : 11 févr. 2016, 22:29
par or 1
le ' manquant à la ligne
if( $HTTP_COOKIE_VARS['CODE_BON] != '1'){
a été corrigé ?

Re: [AIDE] Problème d'UPDATE sql dans un fichier Php

Posté : 11 févr. 2016, 22:31
par Nekk
Oui et remplacé par

if(isset($HTTP_COOKIE_VARS['code'+iDocumentId]))

Je te donne le nouveau code

Code : Tout sélectionner

<?php include("../init.php"); include("../includes/files/register.php"); include("../includes/files/session.disconnect.php"); $do2 = safe($_GET['starpass'],'SQL'); if($do2 == "1") { // Déclaration des variables $ident=$idp=$ids=$idd=$codes=$code1=$code2=$code3=$code4=$code5=$datas=''; $idp = Settings('IDP'); // $ids n'est plus utilisé, mais il faut conserver la variable pour une question de compatibilité $idd = Settings('IDD'); $ident=$idp.";".$ids.";".$idd; // On récupère le(s) code(s) sous la forme 'xxxxxxxx;xxxxxxxx' if(isset($_POST['code1'])) $code1 = $_POST['code1']; if(isset($_POST['code2'])) $code2 = ";".$_POST['code2']; if(isset($_POST['code3'])) $code3 = ";".$_POST['code3']; if(isset($_POST['code4'])) $code4 = ";".$_POST['code4']; if(isset($_POST['code5'])) $code5 = ";".$_POST['code5']; $codes=$code1.$code2.$code3.$code4.$code5; // On récupère le champ DATAS if(isset($_POST['DATAS'])) $datas = $_POST['DATAS']; // On encode les trois chaines en URL $ident=urlencode($ident); $codes=urlencode($codes); $datas=urlencode($datas); /* Envoi de la requête vers le serveur StarPass Dans la variable tab[0] on récupère la réponse du serveur Dans la variable tab[1] on récupère l'URL d'accès ou d'erreur suivant la réponse du serveur */ $get_f=@file("http://script.starpass.fr/check_php.php?ident=$ident&codes=$codes&DATAS=$datas"); if(!$get_f) { exit("Votre serveur n'a pas accès au serveur de StarPass, merci de contacter votre hébergeur."); } $tab = explode("|",$get_f[0]); if(!$tab[1]) $url = Settings('Url')."/payment/error"; else $url = $tab[1]; // dans $pays on a le pays de l'offre. exemple "fr" $pays = $tab[2]; // dans $palier on a le palier de l'offre. exemple "Plus A" $palier = urldecode($tab[3]); // dans $id_palier on a l'identifiant de l'offre $id_palier = urldecode($tab[4]); // dans $type on a le type de l'offre. exemple "sms", "audiotel, "cb", etc. $type = urldecode($tab[5]); // vous pouvez à tout moment consulter la liste des paliers à l'adresse : http://script.starpass.fr/palier.php // Si $tab[0] ne répond pas "OUI" l'accès est refusé // On redirige sur l'URL d'erreur if(substr($tab[0],0,3) != "OUI") { Redirect(Settings('Url')."/payment/error"); exit; } else { /* Le serveur a répondu "OUI" On place un cookie appelé CODE_BON et qui vaut la valeur 1 Ce cookie est valide jusqu'à ce que l'internaute ferme son navigateur Dans les pages suivantes, nous testerons l'existence du cookie S'il existe, c'est que l'internaute est autorisé, sinon on le renverra sur une page d'erreur */ setCookie("CODE_BON", "1", 0); // Si vous avez plusieurs documents, nommer le cookie plutôt 'code'+iDocumentId // vous pouvez afficher les variables de cette façon : // echo "idd : $idd / codes : $codes / datas : $datas / pays : $pays / palier : $palier / id_palier : $id_palier / type : $type"; } // On vérifie si le cookie existe if(isset($HTTP_COOKIE_VARS['code'+iDocumentId])) { // Si le cookie existe mais que le contenu n'est pas bon on le redirige sur la page d'erreur if( $HTTP_COOKIE_VARS['code'+iDocumentId] != '1'){ Redirect(Settings('Url')."/payment/error"); exit(1); } } else{ $SQL = "UPDATE `users` SET `diamonds` = diamonds + ".Settings('Prix_1')." WHERE id = '".safe($user['id'],'SQL')."'"; echo $SQL; $bdd->exec($SQL); $bdd->exec("INSERT INTO `retrophp_payment` (`user_id`, `pseudo`, `statut`, `nombres`, `type`, `code`, `operation` , `remis`) VALUES ('".safe($user['id'],'SQL')."', '".safe($user['username'],'SQL')."', 'Valide', '".Settings('Prix_1')."', 'diamants', '".safe($codes,'SQL')."', 'Achat de diamants', '1');"); Redirect(Settings('Url')."/payment/error"); echo $SQL; exit(1); } } ?> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title><?php echo Settings('Name'); ?>: <?PHP echo $pagename; ?> </title> <link type="text/css" rel="stylesheet" href="<?php echo Settings('Url_Images'); ?>/v5/css/habbo.popup.css?<?PHP echo $update; ?>"> <link rel="shortcut icon" href="<?php echo Settings('Url_Images'); ?>/v5/favicon.ico?<?PHP echo $update; ?>" type="image/vnd.microsoft.icon" /> <link href='//fonts.googleapis.com/css?family=Ubuntu:400,700,400italic,700italic|Ubuntu+Condensed' rel='stylesheet' type='text/css'> </head> <header> <div id="container"> <a id="logo" style="background-image: url('<?php echo Settings('Url'); ?>/images/<?php echo Settings('Logo'); ?>');height: 40px;position: absolute;top: 20px;left: 85px;width: 110px;"></a> </div> </header> <body> <?PHP echo $SQL; ?> <center><div id="starpass_<?php echo Settings('IDD'); ?>"></div> <script type="text/javascript" src="http://script.starpass.fr/script.php?idd=<?php echo Settings('IDD'); ?>&datas="></script> <noscript>Veuillez activer le Javascript de votre navigateur s'il vous pla&icir;t.<br /> <a href="http://www.starpass.fr">Micro Paiement StarPass</a> </noscript></center> </body> </html>

Re: [AIDE] Problème d'UPDATE sql dans un fichier Php

Posté : 11 févr. 2016, 22:35
par or 1
c'est donc que ton cookie existe
if(isset($HTTP_COOKIE_VARS['code'+iDocumentId]))
il faut donc le supprimer de ton navigateur s'il a été crée à un moment et qu'il ne devrait pas l’être.