04-06-2015, 04:24 PM
Je ne résiste pas à l'envie d'en faire la synthèse, car c'est un bon cas d'école
• ; en fin de ligne
• , entre les colonnes d'une requête SQL
• $ avant un nom de variable PHP
• Injection _POST
• Injection SQL
• Respecter les indentations
• Dans une chaine à "guillemets doubles", une variable est remplacée par sa valeur, pas dans une chaine à 'guillemets simples'
• Usuellement, les commandes SQL dans une requête sont en majuscules, les noms de table, colonnes, db etc sont en minuscules
• Chaque table SQL a un et un seul rôle précis, et un nom explicite (la table LOGIN contient les transferts d'argent?)
• Un IDE t'aurait souligné que $totalanque n'a pas été définie (mais $totalbanque oui); un IDE ça aide, et oui, c'est comme un correcteur orthographique ou un test unitaire: quand il dit que c'est faux, c'est faux, mais s'il ne dit pas que c'est faux, c'est pas forcément juste
• <?php pour débuter du code php, ?> pour le fermer; on ne peut pas imbriquer des <?php
• utf8_encode() est inutile pour des nombres, ou pour toute autre chaine alphanumérique (c'est inutile pour les 128 premiers caractères ASCII)
• Il faut échapper les sorties HTML via htmlspecialchars(); à la limite, on peut s'en passer si on est certain du typage des variables echoées
• ; en fin de ligne
• , entre les colonnes d'une requête SQL
• $ avant un nom de variable PHP
• Injection _POST
• Injection SQL
• Respecter les indentations
• Dans une chaine à "guillemets doubles", une variable est remplacée par sa valeur, pas dans une chaine à 'guillemets simples'
• Usuellement, les commandes SQL dans une requête sont en majuscules, les noms de table, colonnes, db etc sont en minuscules
• Chaque table SQL a un et un seul rôle précis, et un nom explicite (la table LOGIN contient les transferts d'argent?)
• Un IDE t'aurait souligné que $totalanque n'a pas été définie (mais $totalbanque oui); un IDE ça aide, et oui, c'est comme un correcteur orthographique ou un test unitaire: quand il dit que c'est faux, c'est faux, mais s'il ne dit pas que c'est faux, c'est pas forcément juste
• <?php pour débuter du code php, ?> pour le fermer; on ne peut pas imbriquer des <?php
• utf8_encode() est inutile pour des nombres, ou pour toute autre chaine alphanumérique (c'est inutile pour les 128 premiers caractères ASCII)
• Il faut échapper les sorties HTML via htmlspecialchars(); à la limite, on peut s'en passer si on est certain du typage des variables echoées
Code PHP :
<?php
if (!isset($_POST['transfert']))
return; // throw new \Exception("Quantité à transférer manquante.");
$transfert = (int)$_POST['transfert'];
$totalargent = (int)$argent - $transfert;
$totalbanque = (int)$banque + $transfert;
$pseudo = $_SESSION['pseudo']; // Considère que la session est bien construite, et que $_SESSION['pseudo'] existe
// Préférer les requêtes préparées, mais on se contentera d'une requête échappée
$sql = "UPDATE compte_joueur SET argent=" . $totalargent . ", banque=" . $totalbanque . " WHERE pseudo='" . mysqli_real_escape_string($pseudo) . "'";
echo " Vous avez transféré vers votre compte en banque n°" . htmlspecialchars($id) . " " . $transfert;
?>