N-PN White-Hat Project
[php] Code source ? - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Programmation (https://dev.n-pn.fr/forum/forumdisplay.php?fid=72)
+--- Forum : Langages interprétés (https://dev.n-pn.fr/forum/forumdisplay.php?fid=27)
+--- Sujet : [php] Code source ? (/showthread.php?tid=3495)



[php] Code source ? - Yuri - 17-11-2013

Salut j'aimerais savoir si on pouvais raccourcir ce type de code, il s’agit d'additionner et redonner aux membres des points :

Code PHP :
$connect mysql_connect($ip$id$mdp);
mysql_select_db($database);

// On affiche le nombre de points que le membre a déjà et on stock l'information dans une variable

$table2 mysql_query("SELECT * FROM accounts WHERE account='$username'");
while (
$tab_contenu=mysql_fetch_assoc($table2))
{
$points $tab_contenu['points'];
}

$username $_SESSION['username'];
$point $points+$point_par_appel;

// On additionne les points du membre avec les points achetés

$table mysql_query("UPDATE accounts SET points='$point' WHERE account='$username'");
$rows = ($table);

if(
$rows==1)
// si tout est OK, on lui remet les points achetés et on le prévient du nombre qu'il a gagné.
{


echo 
"<em style='color:green;'>Felicitation ! Vous avez été créditée de $point_par_appel points !</em>";

}else echo
"<p style='color:red;margin-left:500px;'>Erreur, code invalide</p>"



RE: [php] Code source ? - Dobry - 17-11-2013

Bonjour,
Je ne suis pas sûr d'avoir saisi ce que tu souhaite faire, mais il y a un certains nombre d'éléments qui me dérangent dans ton code, et qui ne peuvent être negligés !
En effet, tu ne fais aucune vérification sur les variables qui tu ajoutes dans tes requêtes qui sont donc à priori toutes vulnérables aux injections SQL, par exemple si $username contient " ' ", la requete va être completement transformée et le pirate pourra faire ce qu'il veut sur ta base de donnée.
Tu peux trouver une explication sur ce type de faille http://n-pn.fr/t/Comment+exploiter+une+faille+SQL+Injection/1199, mais je trouve que ce "tuto" est très incomplet car il ne présente aucune solution à ce problème.

Je pense que la meilleur solution pour pallier à ce problème est d'utiliser les requetes préparées, disponible avec PDO ou Mysqli par exemple, cependant, si tu souhaite garder ton code similaire, tu peux utiliser la fonction http://php.net/manual/fr/function.mysql-real-escape-string.php sur tes variables (ce qui confirme ce que je disais avant).

Je me suis peut être éloigné de la question principale et peut être que tu fais ce traitement dans une partie du code que tu ne nous a pas montré, tout ca pour dire qu'il faudrait changer pour PDO ou Mysqli !

Une autre chose qui me gène c'est que tu fais appel à $username dans ta première requête, avant même de l'instancier à l'aide de la session (et il manque le sessions_start()) encore une fois, peut être que ce n'est juste pas dans la partie du code que tu nous a montré, et dans ce cas, j'aurais écrit tout cela pour rien.


RE: [php] Code source ? - Yuri - 17-11-2013

Ceci-ci est juste une partie du code, le bout de code dédiée aux remises de points aux membres.
Je prends note pour PDO Wink
Merci


RE: [php] Code source ? - 0pc0deFR - 17-11-2013

Tu ne peux pas vraiment réduire le code sauf en te passant des variables que tu définis type $username ou $point. Je rejoins ce qui à été dit sur le post précédent, pas mal de choses ne vont pas.


RE: [php] Code source ? - InstinctHack - 17-11-2013

si c'est juste de la réduction de code :
Code PHP :

$connect = mysql_connect($ip, $id, $mdp);
mysql_select_db($database);
// On affiche le nombre de points que le membre a déjà et on stock l'information dans une variable
while ($tab_contenu=mysql_fetch_assoc(mysql_query("SELECT * FROM accounts WHERE account='$username'")))
$points = $tab_contenu['points'];
// On additionne les points du membre avec les points achetés
if(mysql_query("UPDATE accounts SET points='$points+$point_par_appel' WHERE account='$_SESSION['username']'")==1)
echo "<em style='color:green;'>Felicitation ! Vous avez été créditée de $point_par_appel points !</em>";
else echo"<p style='color:red;margin-left:500px;'>Erreur, code invalide</p>";
 

devrait fonctionner.


RE: [php] Code source ? - Sh4dows - 17-11-2013

Citation :Ceci-ci est juste une partie du code, le bout de code dédiée aux remises de points aux membres.
Après si tu as juste besoin d'ajouter des points sans avoir à afficher le nombre de point que le membre possède avant l'achat, tu peux faire ça en une requête SQL au lieu de 2 Tongue

Code PHP :

<?php
$username = $_SESSION['username'];
$point_par_appel = 10;
$table = mysql_query("UPDATE account SET points=points+$point_par_appel WHERE account=$username");
$rows = ($table);
if($rows==1){
    echo "<em style='color:green;'>Felicitation ! Vous avez été créditée de $point_par_appel points !</em>";
} else {
    echo"<p style='color:red;margin-left:500px;'>Erreur, code invalide</p>";
}
 

En gros tu SET tonchamp=tomchamp+n Wink


RE: [php] Code source ? - Yuri - 17-11-2013

@Instinct :
Code PHP :
points='$points+$point_par_appel' 
Erreur ici mais c'est bon corriger. Merci à vous tous. Pour votre aide Wink

@Sh4dow : Cool Thx je link this Wink


Yuri.
Encore merci