RE: Construction d'un formulaire - Racktor - 15-08-2013
Bhon je retiendrais plus facilement l'explication de Sephi ... ^^
RE: Construction d'un formulaire - Racktor - 16-08-2013
Bon j'ai bidouillé et j'obtiens quelque chose qui ne fait pas d'erreur, j'espère que j'ai pas fait d'erreur sur le plan de la syntaxe, que le code est propre ...
if(isset($_POST['attack']) && !empty($_POST['attack']['lines']))
{
$selected_ids = array_values($_POST['attack']['lines']);
$sane_selected_ids = array_filter($selected_ids, 'is_numeric');
$cast_selected_ids = array_map('intval', $sane_selected_ids);
$hasDuplicates = count($cast_selected_ids) != count(array_unique($cast_selected_ids));
if($hasDuplicates == 0)
{
$allowed_ids = array();
$requete_liste_id_division = "SELECT id FROM ". PREFIX ."militaire_division WHERE pseudo_proprio = '". $pseudo ."' AND statut = 'Prête au combat'";
$sql_liste_id_division = mysql_query($requete_liste_id_division) or die (GENERAL_ERREUR_CONNEXION_BDD); //Execution de la requete
$resultat_liste_id_division = mysql_fetch_array($sql_liste_id_division); //Triage de la requète
while($resultat_liste_id_division = mysql_fetch_assoc($sql_liste_id_division))
{
$allowed_ids[] = $resultat_liste_id_division['id'];
}
$union = array_unique(array_merge($cast_selected_ids, $allowed_ids)); // L'union des deux ensembles, sans doublons.
$allIdsAreAllowed = count($allowed_ids) == count($union);
if($allIdsAreAllowed == 0)
{
echo $_POST['attack']['target'].'<br />';
$new_string='';
foreach ($cast_selected_ids as $val)
{
$new_string .= $val.'-';
}
echo substr($new_string,0,-1);
}
else
{
redirection(2);
}
}
else
{
echo '<b>Vous avez fait une erreur ! nom de gu, d\'nom de gu !</b>';
}
}
RE: Construction d'un formulaire - Sephi-Chan - 16-08-2013
En vrac :
- Tu devrais utiliser une seule langue (l'anglais) pour coder (les nom des tables, de colonnes, de variables, idéalement les commentaires, etc.) ;
- Tu devrais utiliser une seule syntaxe pour tes variable ($camelCase ou $snake_case) et n'utiliser qu'elle (là on voit clairement que tu as fait du copier-coller) ;
- Tu devrais aligner tes = ou ne pas le faire, mais pas mélanger les deux styles (là aussi on voit le copier-coller) ;
- Tu ne devrais pas utiliser d'abréviation (comme proprio) mais toujours les mêmes mots, cohérents ;
- Tu ne devrais pas utiliser de pseudo comme clé (ici "pseudo_proprio") : seulement des ID (par exemple "owner_id");
- Tu ne devrais pas utiliser une chaîne complexe pour stocker tes états (ici "Prête au combat") mais une simple chaîne (comme "ready" ou bien un nombre) stockée dans une constante PHP, puis toujours utiliser cette constante (un peu comme tu le fais pour PREFIX) ;
- Tu devrais utiliser sprintf pour générer tes requêtes SQL et ainsi éviter des concaténation au milieu de la requête ;
- Tu ne devrais pas mettre de commentaires triviaux comme "Execution de la requete" ou "Triage de la requète", qui est mal nommé (ce n'est pas un "triage") en plus de contenir une faute de français (requête, pas requète) ;
- Tu devrais utiliser seulement mysql_fetch_assoc ;
- Tu devrais utiliser un format de sérialisation (json_encode et json_decode) plutôt que de faire la tienne à base de tirets ;
echo $_POST['attack']['target'].''; quel est l'intérêt de concaténer une chaîne vide ?
- Tu devrais utiliser les guillemets doubles quand tu écris une chaîne qui nécessite de l'échappement (ou fermer les balises PHP quand tu génères du HTML) ;
Voilà en gros.
RE: Construction d'un formulaire - Arnadus - 16-08-2013
Citation :Bonjour à tous !
Bon j'ai fini mon script de combat, il est donc fonctionnel maintenant je fais l'interface pour le joueur.
Bhon alors le formulaire en lui-même pas franchement de souci sauf pour la récupération des données : imaginez que mon formulaire est aussi dynamique !
le joueur doit sélection les divisions qu'il souhaite engager dans le combat, le nombre de division maximum est fonction d'un niveau que le chef d'état major a. Donc on répète la même liste de division autant de fois que le niveau le permet logique... mais comment récupérer le résultat des listes ainsi crées ? on prend le niveau est on fait le chemin en sans inverse logiquement ?
une boucle qui récupère les variables POST...
Ensuite je crée une chaine de caractère du système de ce type la : 1-5-6-9
En gros les chiffres correspondent aux id des divisions utilisées, bhon après pour le traitement j’utilise la fonction qui permet de couper le chaine en fonction d'un caractère (ici -). C'est peut être pas trés propre mais bon ca marche 26
Le problème c'est que cette chaine de caractère doit être vérifier : bha oui le joueur peut mettre plusieurs fois la même division ! alors comment détecter dans ce cas les doublons ?
Merci par avance pour le temps que vous consacrerez à mes questions.
Si j'ai bien compris, il s'agit d'un problème de matching: Tu as un formulaire qui contient des informations et tu te demandes comment récupérer ces informations une fois ce formulaire envoyé.
Si c'est bien cela, permets-moi de te mettre en garde. Tous ces problèmes de matching entre tes entités et tes informations envoyées (POST, GET) sont très souvent prises en charge par le framework que tu utilises. Il existe même des composants indépendants que tu peux utiliser et qui feront ça pour toi (donc même pas besoin de framework).
Donc bon voila, je voulais juste te prévenir que, dans un projet professionnel, tu ne seras jamais confronté à ce genre de problématique et que la question que tu nous poses dois juste être vue à titre éducatif et/ou informatif.
RE: Construction d'un formulaire - Xenos - 16-08-2013
Pourquoi sprintf() au lieu d'une concaténation?
RE: Construction d'un formulaire - Sephi-Chan - 16-08-2013
Seulement pour gagner en clarté et réduire le bruit visuel des quotes + point. C'est particulièrement utile pour sortir des appels de fonction (comme mysql_real_escape_string où des opérateurs de cast) du corps de la requête.
RE: Construction d'un formulaire - Xenos - 16-08-2013
D'accord, merci.
Pour le reste, Racktor, Sephi a raison
RE: Construction d'un formulaire - Racktor - 16-08-2013
je pourrais avec un exemple d'utilisation de la fonction sprintf avec cette requete ? :
$requete_liste_id_division = "SELECT id FROM ". PREFIX ."militaire_division WHERE id_membre = $id AND statut = 'Prête au combat'";
RE: Construction d'un formulaire - Xenos - 16-08-2013
Je dirai (en plus de "regarde la doc, Sephi t'as même filé le lien"):
Code PHP : <?php
$requete_liste_id_division = sprintf("SELECT `id` FROM `%smilitaire_division` WHERE `id_membre` = %d AND `statut` = %s", PREFIX, $id, "Prête au combat");
Mais perso, j'utiliserai plutôt (en PHP "pur script"):
Code PHP : <?php
$requete_liste_id_division = sprintf(
"SELECT `id` FROM `%s` WHERE `%s` = %d AND `%s` = %d",
\constante\MySQL\divisionMilitaire\table,
\constante\MySQL\divisionMilitaire\idMembre,
$id,
\constante\MySQL\divisionMilitaire\statut,
\constante\divisionMilitaire\statut\pretAuCombat
);
Bref, j'éviterai les chaînes de texte (en plus avec des accents, donc les coups type "base en ASCII et fichier PHP en UTF-8" sont à prévoir) en guise de statut, et j'utiliserai plutôt une constante, qui aura généralement un typage d'entier (dans des namespaces explicites).
RE: Construction d'un formulaire - Sephi-Chan - 16-08-2013
$requete_liste_id_division = sprintf(
"SELECT id
FROM %smilitaire_division
WHERE id_membre = '%s' AND statut = '%s';",
PREFIX,
(int) $id,
READY
);
|