JeuWeb - Crée ton jeu par navigateur
[REGLÉ ]If ... else ... - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [REGLÉ ]If ... else ... (/showthread.php?tid=1436)



[REGLÉ ]If ... else ... - Single Dark - 16-07-2007

Voilà, c'est fait près de 1 heure que je cherche une solution à mon problème, et je trouve pas :

Alors voici mon problème :
Je suis en train de coder un section ou le joueur peut modifier les options de sont profil.

Mais j'ai un problème avec l'avatar du joueur. Si le joueur n'entre pas de lien pour son avatar, je doit lui en designé une, or ca veut pas.

Voici une partie du code en question :
PS: je sais, c'est pas sécurisé mais je ferai sa quand sa marchera.

Code PHP :
<?php 
if (isset ($_POST['avatar']))
{
$avatar = $_POST['avatar'];
$erreur = "Avatar";
}

else
{
$avatar="http://upload.wikimedia.org/wikipedia/commons/thumb/8/8d/No-Symbol.svg/600px-No-Symbol.svg.png";
$erreur = "Le champs avatar est vide.";
}

mysql_query("UPDATE comptes SET
login='
$new_login',
pass='
$new_mdp',
email='
$new_email',
image='
$avatar'
WHERE id='
$id_joueur'")
or die (
"Erreur dans l'update de la base sql");

Or le reste de mon code fonctionne normalement, et j'ai utiliser le même procedé. Et je vois pas pourquoi ca marche pas...

Résultat :
Rien du tout, rien n'est enregistré dans la base S.Q.L. Aucun message d'erreur.

J'ai comme l'impression, que le else ne marche pas du tout...


Merci à ceux qui font regarde ca...


RE: If ... else ... - Maegia - 16-07-2007

Et si ton $_POST['avatar'] était tout de même envoyé, mais vide ? Réessais en mettant comme condition dans ton if :

Code PHP :
<?php 
if (isset($_POST['avatar']) && $_POST['avatar'] != ''){...}

P.S. En passant, ton code contient d'importantes failles au niveau de la sécurité... À n'importe quel moment, on peut entrer dans ton champ réservé à ton avatar une ligne de code capable de briser en mille morceaux ta BDD... Informes-toi au sujet des protections contre les injections SQL.


RE: If ... else ... - Single Dark - 16-07-2007

Je te remercie Maegia, ca fonctionne ... XD


P.S: Justement, vu que mon script fonctionne, grâce a toi, je vais le sécurisé, comme je l'ai dit plus haut...


RE: [REGLÉ ]If ... else ... - Single Dark - 16-07-2007

Tiens une question es ce que "mysql_real_escape_string" est suffisant au niveau de la sécurité ?

Ou je doit utiliser un systeme plus complexe, Regex ?



P.S: Oups sorry pour le double post, pas fait expret


RE: [REGLÉ ]If ... else ... - Maegia - 17-07-2007

Voici ce qui est suggéré sur le portail Nexen.net concernant la protection contre les injections SQL :

Code PHP :
<?php
// Protège la variable
function quote_smart($value)
{
// Stripslashes
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// Protection si ce n'est pas un entier
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
return
$value;
}

// Connexion
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
OR die(
mysql_error());

// Fabrication d'une requête sécurisée
$query = sprintf("SELECT * FROM users WHERE user=%s AND password=%s",
quote_smart($_POST['username']),
quote_smart($_POST['password']));

mysql_query($query);
?>



RE: [REGLÉ ]If ... else ... - elazard - 17-07-2007

j'ai une question ( c'est surement débil comme d'hab) : ca veut dire quoi ca user=%s AND password=%s"
fin je veux dire les %


RE: [REGLÉ ]If ... else ... - Plume - 17-07-2007

Pour comprendre il faut lire la doc de sprintf Wink

@ tchaOo°


RE: [REGLÉ ]If ... else ... - elazard - 17-07-2007

merci
Elazard qui n'a rien (mais alors là rien) capté et qui va continuer à faire ses ptites requetes de noob^^


RE: [REGLÉ ]If ... else ... - Plume - 17-07-2007

Raaah p'tit joueur ! Big Grin

Bon le principe est simple : sprintf sert à formater une chaîne avec des paramètres.
D'un côté, c'est une méthode sûre, notamment pour le cas des requêtes.
D'un autre, elle permet une bonne lisibilité du code et notamment du contenu de la requête, même si personnellement je ne l'utilise pas.

Ce qu'il faut comprendre, c'est que %s, ça n'a rien à voir avec du SQL.

Code PHP :
<?php 
sprintf
("SELECT * FROM users WHERE user=%s AND password=%s",
quote_smart($_POST['username']),
quote_smart($_POST['password']));
"SELECT * FROM users WHERE user=%s AND password=%s" ~> Ceci n'est qu'une chaîne de caractères quelconque. Ce n'est pas à proprement dit une requête. Tu peux donc faire ce que tu veux.

Les symboles %s, %b, %c [..] ne sont que les formats des paramètres qui doivent être à la place de ces symboles. Dans notre cas, il s'agit de deux chaînes ( s pour string Wink ) Ces paramètres sont les paramètres qui suivent la chaine de caractères, ici : quote_smart($_POST['username']), quote_smart($_POST['password'])
Tous deux sont bel et bien des chaînes de caractères. Tu peux mettre autant de paramètres que tu veux, il faut qu'il y ait autant de symboles que de paramètres.

Après, l'ordre de remplacement va de soit. Le premier symbole est remplacé par le premier paramètre, le deuxième symbole est remplacé par le deuxième paramètre et ainsi de suite.

@ tchaOo°