Page 1 sur 1

Condition vérification db pour exécution d'un scrypt

Posté : 18 déc. 2013, 09:06
par Polkakind
Bonjour, voici, je fais actuellement un scrypt avec quelques condition ..
Le scrypt fonctionne réellement une fois sur deux, et parfois ignore mes conditions !!!!
Parfois, il ne supprime pas le vote ( oui, il y a un vote dedans ^^ ) pour que l'utilisateur vote une seconde fois, en indiquant mon erreur, soit que le délai escompté n'est pas terminé, même après le double du temps exigé

Voici le scrypt
<?php
$pseudo = $_GET['pseudo']; 
$iipp = $_GET['iipp']; 
	$db_host = 'xxx.xxx.xxx.xxx';
	$db_user = 'xxxxxxxxx';
	$db_pass = 'xxxxxxxxx';
	$conn = @odbc_connect("Driver={SQL Server};Server=$db_host;", $db_user, $db_pass);	
	$result2 = @odbc_exec($conn,"SELECT UserID FROM PS_UserData.dbo.user_votes WHERE UserID = '".$pseudo."' AND date > DATEADD(HOUR, -1, GETDATE())") or die('erreur lors de la selection par nom de compte');
	if(odbc_num_rows($result2) > 0){
	echo "<center><H2>Le d&eacute;lai d'une heure n'est pas encore &eacute;coul&eacute; repasse plus tard !!!<H2></center>";
	} else {
	$deletevote = @odbc_exec($conn,"DELETE FROM PS_UserData.dbo.user_votes Where UserID = '".$pseudo."'");
	$setvoted = @odbc_exec($conn,"INSERT INTO PS_UserData.dbo.user_votes (UserID,ip,date) VALUES ('".$pseudo."','{$iipp}',GETDATE()) ") or die('Erreur d\'insertion');
	$updatepoints = @odbc_exec($conn,"UPDATE PS_UserData.dbo.Users_Master set Point=Point+45 where UserID = '".$pseudo."'") or die('erreur lors de l\'ajout de points');
	echo "Votre vote a bien été comptabilisé, merci de repasser dans une heure."
	}
?>
De plus, lorsque l'utilisateur tente de revoter ( lorsque le scrypt lui accorde :D ) il n'a pas la redirection vers le lien du site déposé.

Et pour ceux qui se le demande, oui, je m'arrache les cheveux là, car je ne comprends plus rien du tout :cry:

Merci de vote aide ^^

Re: Condition vérification db pour exécution d'un scrypt

Posté : 18 déc. 2013, 12:14
par Mazarini
Le seul problème que je peux soupsonner, c'est sur 'date > DATEADD(HOUR, -1, GETDATE())")'
Le plus simple serait de faire une conversion de 'date' en string genre "AAAAMMJJHHMMSS" dans la requête et de calculer la date - 1 heure en php.

Re: Condition vérification db pour exécution d'un scrypt

Posté : 18 déc. 2013, 12:59
par Polkakind
Merci pour ta réponse.

Le seul "soucis" c'est que ce scrypt fonctionne à merveille sur l'ancien site internet, donc ton soupçon, certe judicieux, n'est visiblement pas le soucis ^^

J'ai quand même pris la peine de tester au cas ou hein, je ne vais pas laisser quelqu'un me donner une réponse en suposant qu'il a tord, et je te confirme que cela ne change rien. Les problèmes reste les même, malheureusement.

Pour des questions de sécurité, le site est mis à jour ( refais entièrement en faite :D ) et je me demande pourquoi sur le nouveau sa coince et pas sur l'ancien.

Re: Condition vérification db pour exécution d'un scrypt

Posté : 19 déc. 2013, 00:18
par moogli
salut,

Sais tu le chemin que suis le script ?

qu'elles sont les différences entre l'ancien et le nouveau site internet ?

pourquoi des @ ?
vire les pour debogguer correctement.

s'il s'agit d'une refonte pourquoi ne pas utiliser pdo ou sqlsrv ?

Ton script est sensible aux injections SQL il n'y aurait pas une histoire de magic quote ?


@+

Re: Condition vérification db pour exécution d'un scrypt

Posté : 19 déc. 2013, 04:34
par Polkakind
Alors, oui, je connais le chemin de tout les scrypts puisque je le fais moi même ;)

La différence avec l'ancien et le nouveau site, c'est que l'ancien ne possédait pas de gestion de compte, et était très sommaire graphiquement.
Le nouveau comporte une gestion de compte, une gestion de ticket, ainsi qu'une gestion du perso sur l'autre bdd ( celle du jeu )

Les @ sont très important. Ils permettent de simplement caché la ligne. Soit, lorsqu'une personne inspecte la page, il ne verra pas la demande faite à la sql
Les virer serai donc une erreur, mais je te rassure, cela ne change absoluement rien au fonctionnement du code. C'est typique des bdd ocbd

Je ne connais pas pdo, mais le site lui est en sqlsrv. Pour ce qui concerne les commandes sur le jeu, seul ocbd fonctionne. C'est assez particulier.

Je connais trop peu les magic quote du à leur problème de performance. Je ne travail pas. Seulement, si quelqu'un peut m'aider dans ce codage, je suis preneur.

On m'informe en parrallèle que oui, le scrypt à une sensibilité, du a son url. Un personne pourrait voter pour une autre ...ect .. hum, j'ai étudier, et vous demande ce que vous en pensez.

Un bouton sur la page index => "Voter" => envoi une popin dont l'url est la suivante => http://xxxxx/index.php?file=User&op=edit_account
J'ai tenté de changer le " =user" par un utilisateur lambda du site, moi sa ne fonctionne pas, mais une personne ( qui développe en commun avec moi ) m'informe qu'elle l'a fait.
La popin comporte une include ( là, on est sur le scrypt que je vous ai donné )

Ce que je cherche à vrai dire, c'est une popin qui viendrai chercher le pseudo de l'utilisateur sur le site, si le pseudo et bien dans la bdd sql, alors je vais dans la bdd du jeu, je supp son vote, j'implémente un nouveau vote avec l'heure de vote ( pour le vote 1x par heure ), je lui offre des points pour son vote dans son compte jeu, et je lui retourne la redirection du site de vote ( oxigen ) afin qu'il valide un catpcha.

Autre faille, et je ne sais comme là résoudre pour le moment, c'est que si la personne n'entre pas le catpcha, alors elle reçois quand même les points, et son vote n'est pas compté ...

Je suis preneur de toute idée ( n'aimant pas le tout fait :p ), structuration du code.

Merci

Re: Condition vérification db pour exécution d'un scrypt

Posté : 19 déc. 2013, 12:33
par moogli
@ évite que le message d'erreur s'affiche et n'évite en aucun cas de voir une quelconque erreur sql.
en production les erreurs php ne doivent pas être affichées (display_error = off dans la configuration de php).

en développement il est important que les erreurs affichent pour pouvoir les traiter.

s'il y aune gestion de compte l'informtation de l'utilisateur connecté doit être utilisé pour les requêtes et non un quelconque passage par formulaire.
Cette information doit être présente en session (tableau $_SESSION)

quand je parle du chemin que suis le script c'est plutôt au niveau code, savoir quel if est validé pas etc histoire d'être certain de ce qui se passe.
Est ce que tu utilise un deboguer (zend debugger ou xdebug couplé à ton ide favoris) ?

la tu est en développement donc :
- vire les @ et vois si tu as des messages d'erreurs
- utilise un debugger pour suivre l’exécution du script, voir les
- Tu fait un select pour savoir s'il y a déjà une ligne, donc tu peux faire soit un update soit u insert le delete est inutile.
- Les magic quotes c'est le mal c'est pas à utiliser ;)
Autre faille, et je ne sais comme là résoudre pour le moment, c'est que si la personne n'entre pas le catpcha, alors elle reçois quand même les points, et son vote n'est pas compté ...
ça c'est du à un problème de conditionnement des requêtes. En clair tu as un if(captcha valid) et dedans tu doit mettre les requêtes d'insertion / update etc.
d'ailleurs vérifier le contenu du formulaire c'est la première chose à faire ;)

@+