Problème de if dans un fichier PHP


Bgdu67

Messages recommandés

Bonjour,

J'ai un problème de if sur un fichier PHP, je vous explique, j'ai un système de renouvellement de serveur, quand on veut renouveler son serveur on passe par un fichier renew-offre.php (qui autorise si les donnés sont bonnes) et par un fichier renew-oui.php et c'est dans ce fichier que sa coince. Quand je veut renouveler mon serveur avant même de dire que je n'ai pas assez de crédit, il m'affiche :

> Voici les informations du serveur actuellement : <

STOP, le serveur que vous tentez de renouvellé ne vous appartient pas Cliquez ici

Dans le fichier renew-offre.php, cette commande ressemble à ceci :

if ( ($user_id == $serv_uid) or ($a_serv_uid['id_serv'] == $user) ) // Si l'id est bien le meme (Donc c'est que le serveur lui appartient donc on affiche...)

Pensant que sa venait eventuellement de ce fichier je l'ai mis comme ceci :

if ( ($user_id == $user_id) or ($user_id == $user_id) )

Pour voir si cela changez quelque chose mais apparament le fichier renew-offre.php n'est pas en cause car quand je clique sur oui pour validez les infos et que le fameux message d'erreur s'affiche je suis à l'adresse : index.php?page=renew-oui&sid=195&m=3 donc bien dans le renew-oui.php.

Voici deux captures d'écrans :

Après avoir cliquez sur le liens "renouvellement" je valide les informations (fichiers renew-offre.php):

validation%20renouvellement.JPG

Puis on tombe sur le fichier renew-oui.php :

Oui%20renouvellement.JPG

Voilà et pour finir le code php du renew-oui.php c'est moi ou il manque la commande if qui controle si l'id du serveur et celle du membre est la même? Comment la modifier ou la supprimer ?

Code php:

http://php.pastebin.com/m7286b81a

Cordialement,

Lien vers le commentaire
Partager sur d’autres sites

if(!isset($HACK)) { exit(); } //Je sais pas a quoi sa sert mais je le met quand meme :/

Pourquoi le mettre alors ?

Si déjà la première ligne du script tu ne la comprends pas, c'est peut-être normal que tu ne comprennes pas le reste !

Ensuite le script js pour les bonus, ce n'est pas forcément une super idée...

if(isset($user))

$user n'est pas défini. Je ne sais pas d'où il vient, mais tu devrais y réfléchir.

$r_user_id = mysql_query("SELECT id FROM ims_mbr WHERE pseudo='$user'");

Identifier quelqu'un dans ta base de donnée avec son pseudo n'est pas la meilleure des idées. Utilise plutôt directement son identifiant primaire.

$a_user_id = mysql_fetch_array($r_user_id);

$user_id = $a_user_id['id'];

Faire un fetch_array pour récupérer un seul champ c'est très lourd. Il vaut mieux utiliser $user_id = mysql_result($r_user_id, 0, 'id');

$r_serv_uid = mysql_query("SELECT user FROM ims_serv WHERE id_serv='$sid'");

Un identifiant est généralement un nombre, pourquoi tu l'entoures de quote ? Si c'est un nombre, il serait mieux de faire comme ceci :

$sid = (int)$_GET['sid'];

$r_serv_uid = mysql_query("SELECT user FROM ims_serv WHERE id_serv=$sid");

$sid = mysql_real_escape_string(htmlspecialchars($_GET['sid'])); // Sécurisation ...

$r_serv_uid = mysql_query("SELECT id_serv FROM ims_teamspeak WHERE id_serv='".$_GET['sid']."'") or die ("QUERY IMPOSSIBLE");

Pourquoi tu sécurises ta variable et tu ne l'utilises pas dans ta requête ?

$sid = mysql_real_escape_string(htmlspecialchars($_GET['sid'])); // Sécurisation ...

$r_serv_uid = mysql_query("SELECT id_serv FROM ims_teamspeak WHERE id_serv='".$_GET['sid']."'") or die ("QUERY IMPOSSIBLE");

$a_serv_uid = mysql_fetch_array($r_serv_uid);

if ($a_serv_uid['id_serv'] == $sid)

Ca n'a aucun intérêt ce que tu fais là !

Tu récupères tout d'abord le champ id_serv de la table ims_teamspeak dont l'identifiant est donné.

Ensuite tu le compares avec l'identifiant donné en paramètre... ce qui est logiquement toujours vrai !

Je crois que ton problème vient de là.

Sinon petits conseils :

- indente ton code ! Car c'est super illisible sans indenter :/

- factorise ton code. Beaucoup de passages se ressemble, ce qui fait que ton fichier est immense et dur à lire

- utilise des valeurs plus cohérentes !

if ($_GET['m'] == 1) ca veut rien dire.

Il vaut mieux utiliser des constantes :

define('TEAMSPEAKSERVER', 3);

$mode = $_GET['m'];

if ($mode == TEAMSPEAKSERVER) {

...

}

Ca va rendre ton code lisible très facilement ! En effet, moi j'ai dû chercher pour comprendre que $_GET['m'] = 3 c'est pour les serveurs teamspeaks (enfin je crois :) ).

Ensuite, fait la même chose dans ta base de donnée. Car utiliser des champs de type varchar et co pour le type d'une offre, c'est très très moche, surtout si tu changes le nom de l'offre, tu dois changer le nom dans tous tes enregistrements !

Pour éviter ça, tu peux utiliser la même méthode avec des constantes :

define('TYPE_TEAMSPEAKSERVER', 3);

et tu stockes TYPE_TEAMSPEAKSERVER dans la bdd. Les comparaisons sont alors beaucoup plus simple :

SELECT ... FROM ... WHERE type = '.TYPE_TEAMSPEAKSERVER

Si tu corriges déjà ça, ça sera beaucoup mieux :)

Dernier conseil : apprend le xhtml, c'est beaucoup plus lisible qu'un site en tableau ;)

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.