ACCUEIL
NEWS
FORUM
COMPTE
3
Utilisateur(s) en ligne
Oltana.net
02 Décembre 2023 à 19:08:41
Bienvenue,
Invité
. Veuillez
vous connecter
ou
vous inscrire
.
Connexion avec identifiant et mot de passe
Nouvelles
:
Bascule sur SMF faite!
Oltana.net
>
Informatique Créatrice
>
Webmastering
> Fil de discussion:
[Résolu][PHP] Enregistrement multichamps dans une table
Pages: [
1
]
Bas de page
« sujet précédent |
| sujet suivant »
Auteur
Fil de discussion: [Résolu][PHP] Enregistrement multichamps dans une table (Lu 25762 fois)
0 Membres et 1 Invité sur ce fil de discussion.
[Résolu][PHP] Enregistrement multichamps dans une table
Norore
Animateurs
Hors ligne
Sexe:
Messages: 369
«
le:
30 Avril 2008 à 09:30:38 »
Bonjour, bonjour ^^ ! Bon, comme, avec moi, un problème en programmation n'arrive jamais seul ( :ange !
Voici le script en question (côté administration, cela va sans dire :oO ! Autrement dit, si je note que l'on recrute 5 templiers noirs, cela va indiquer que l'on recrute 5 joueurs par classe 8| ...) : que la case soit cochée ou décochée, elle me renvoi toujours "checked", un ami m'a demandé si les checkbox ne renvoient pas plutôt une donné booléenne, je préférerais vérifier auprès d'experts en php avant de devenir complètement chauve :love !
Merci d'avance
!
Edit : le réel besoin réside dans le fait que nous avons récemment reçu nos premiers postulants et que nous allons donc avoir besoin d'indiquer à d'éventuels futurs postulants quelles sont leurs chances d'être acceptés dans la guilde ^^ !
Journalisée
Citation de: Secondat de Montesquieu
Je me croirais le plus heureux des mortels si je pouvais faire que les hommes puissent se passer de leur préjugé.
Re: [PHP] Enregistrement multichamps dans une table
superjun
Posteur assidu
Hors ligne
Messages: 137
«
Répondre #1 le:
30 Avril 2008 à 11:13:20 »
Commenceons par le plus simple :haha )
Donc :
Code:
WHERE `recru_class` LIKE "'.$i.'"'
Ce n'est peut-être pas le seul endroit où il y a cette erreur. Donc corrige ça et teste, voir si ça va mieux
Journalisée
What isn't remembered never happened...
Re: [PHP] Enregistrement multichamps dans une table
Norore
Animateurs
Hors ligne
Sexe:
Messages: 369
«
Répondre #2 le:
30 Avril 2008 à 13:52:10 »
Pour le UPDATE, au niveau du WHERE, tu en es sûr ? Ce n'est pas le premier UPDATE que j'utilise, dans d'autres scripts l'opérateur est un simple "=" et ceux-ci marchent parfaitement bien, j'ai donc du mal à comprendre pourquoi ça ne marcherai pas ici
!
Journalisée
Citation de: Secondat de Montesquieu
Je me croirais le plus heureux des mortels si je pouvais faire que les hommes puissent se passer de leur préjugé.
Re: [PHP] Enregistrement multichamps dans une table
superjun
Posteur assidu
Hors ligne
Messages: 137
«
Répondre #3 le:
30 Avril 2008 à 20:11:25 »
C'est peut-être effectivement moi qui me trompe, et il faudrait relire la doc pour en être sûr ^^
Mais logiquement, l'opérateur '=' est un opérateur qui assigne une valeur à quelque chose (J'ai dit logiquement, car presque partout en programmation, ou il me semble, c'est le cas). Lorsqu'on veut utiliser la comparaison homologue à un '=', on devrait utiliser '=='. Je sais qu'avec MySQL il faut utiliser 'LIKE' à la place.
Or, la clause WHERE est nécessairement (par définition) suivie d'une instruction comparative, ce qui voudrait dire qu'il faut utiliser 'LIKE' (ou autre opérateur de comparaison).
Et normalement, si tu opère une assignation et qu'elle réussi (je vois pas pourquoi ça ne serait pas le cas), ça renvoie une valeur booléenne TRUE.
Donc ça reviendrait à dire 'WHERE [l'assertion a été effectuée avec succès]', donc partout.
Je regarderai à nouveau ton code tantôt, pour essayer d'y déceler autre chose ^^
Journalisée
What isn't remembered never happened...
Re: [PHP] Enregistrement multichamps dans une table
Patami
Administrateur
Hors ligne
Messages: 599
«
Répondre #4 le:
30 Avril 2008 à 22:03:07 »
salut
pas le temps de m'amuser sur le code, mais je confirme le fait qu'il ne faut qu'un seul " = " en SQL et MySQL pour effectuer une comparaison, tandis qu'il en faut deux avec php
Journalisée
Votre site 100% configurable en un tour de main, c'est désormais possible avec
KwsPHP
Re: [PHP] Enregistrement multichamps dans une table
Norore
Animateurs
Hors ligne
Sexe:
Messages: 369
«
Répondre #5 le:
30 Avril 2008 à 22:38:33 »
Citation de: "Patami"
pas le temps de m'amuser sur le code, mais je confirme le fait qu'il ne faut qu'un seul " = " en SQL et MySQL pour effectuer une comparaison, tandis qu'il en faut deux avec php :langue ! Merci Patami ^^ !
Journalisée
Citation de: Secondat de Montesquieu
Je me croirais le plus heureux des mortels si je pouvais faire que les hommes puissent se passer de leur préjugé.
Re: [PHP] Enregistrement multichamps dans une table
superjun
Posteur assidu
Hors ligne
Messages: 137
«
Répondre #6 le:
01 Mai 2008 à 00:33:52 »
Au temps pour moi
Normalement, ça devrait afficher 12 lignes avec les 12 requêtes effectuées. Ca permettra déjà d'y voir un peu plus clair. Si c'est pas le cas, tu peux executer séparément chaque requête à partir de PHPMyAdmin (ou autre) et étudier le résultat afin de déduire l'origine de l'erreur.
--Edit--
Ne serait-ce pas en fait simplement que pour chaque passage de la boucle, seule $i change ?
Je m'explique : La requête est effectuée pour toutes les valeurs de $i comprises entre 0 et 11, mais il n'y a rien dans la boucle qui modifie $nb et $open en fonction de $i, si bien que ces deux variables resteront identiques pour chaque valeur de $i, donc pour chaque MàJ de la BDD. (Typiquement, la méthode empirique décrite au-dessus aurait permis de mettre ce genre de problème en évidence
)
Journalisée
What isn't remembered never happened...
Re: [PHP] Enregistrement multichamps dans une table
Norore
Animateurs
Hors ligne
Sexe:
Messages: 369
«
Répondre #7 le:
03 Mai 2008 à 15:06:46 »
En fait, il semblerait que le problème provienne clairement du formulaire :/ !
Citation
UPDATE `recrutement` SET `recru_nb`="0", `recru_open`="Y" WHERE `recru_class`="0"
UPDATE `recrutement` SET `recru_nb`="0", `recru_open`="Y" WHERE `recru_class`="1"
UPDATE `recrutement` SET `recru_nb`="0", `recru_open`="Y" WHERE `recru_class`="2"
UPDATE `recrutement` SET `recru_nb`="0", `recru_open`="Y" WHERE `recru_class`="3"
UPDATE `recrutement` SET `recru_nb`="0", `recru_open`="Y" WHERE `recru_class`="4"
UPDATE `recrutement` SET `recru_nb`="0", `recru_open`="Y" WHERE `recru_class`="5"
UPDATE `recrutement` SET `recru_nb`="0", `recru_open`="Y" WHERE `recru_class`="6"
UPDATE `recrutement` SET `recru_nb`="0", `recru_open`="Y" WHERE `recru_class`="7"
UPDATE `recrutement` SET `recru_nb`="0", `recru_open`="Y" WHERE `recru_class`="8"
UPDATE `recrutement` SET `recru_nb`="0", `recru_open`="Y" WHERE `recru_class`="9"
UPDATE `recrutement` SET `recru_nb`="0", `recru_open`="Y" WHERE `recru_class`="10"
UPDATE `recrutement` SET `recru_nb`="0", `recru_open`="Y" WHERE `recru_class`="11"
Mais là, j'en perds mon latin
...
Journalisée
Citation de: Secondat de Montesquieu
Je me croirais le plus heureux des mortels si je pouvais faire que les hommes puissent se passer de leur préjugé.
Re: [PHP] Enregistrement multichamps dans une table
superjun
Posteur assidu
Hors ligne
Messages: 137
«
Répondre #8 le:
04 Mai 2008 à 02:43:28 »
Citation
// on a cliqué pour valider, on enregistre les données
if(isset($_POST['valider']))
{
$nb = clean($_POST['nb']);
if(isset($_POST['open'])){$open="Y";}else{$open="N";}
for($i = 0 ; $i < 12 ; $i++)
{
mysql_query('UPDATE `recrutement` SET `recru_nb`="'.$nb.'", `recru_open`="'.$open.'" WHERE `recru_class`="'.$i.'"') or die ("Impossible de modifier les données dans la table `recrutement` !
" .mysql_error(). "
" .mysql_errno());
}
Dans cette partie du code, la valeur de $nb et de $open ne peuvent vraisemblablement pas changer en fonction de la classe qui a été sélectionnée dans le formulaire :
Un seul $nb et un seul $open sont récupérés pour toutes les classes, donc ces deux variables auront les mêmes valeurs pour chaque classe.
En fait, dans ton formulaire, tu as oublié de créer un tableau pour 'nb' (alors que tu l'as fais pour 'open'). Ainsi, le formulaire soumis ne pourra renvoyer qu'une seule valeur pour 'nb'.
Dans le cas de 'open', c'est du coté du traitement qu'il y a une erreur, puisque tu cherches à savoir si 'open' existe (isset($open)) alors qu'il l'est obligatoirement puisque c'est un tableau (à moins qu'il ne soit jamais coché). Donc la valeur de $open est 'Array'.
Pour finir, la fonction clean() que tu utilises assigne peut-être une valeur par défaut en cas d'erreur (qui serait, dans ce cas, 0). Mais comme je n'ai pas le code de la fonction, ce n'est peut-être pas le cas
Voici le code corrigé :
Code:
<?php
/* page d'administration pour le recrutement */
// array pour les classes
// initialisation des classes
$classe
= array(
0
=>
'Assassin'
,
1
=>
'Barbare'
,
2
=>
'Chaman de l\'Ours'
,
3
=>
'Conquérant'
,
4
=>
'Démonologue'
,
5
=>
'Eclaireur'
,
6
=>
'Gardien'
,
7
=>
'Hérault de Xotli'
,
8
=>
'Nécromancien'
,
9
=>
'Prêtre de Mitra'
,
10
=>
'Tempête de Set'
,
11
=>
'Templier noir'
);
?>
<div id="milieu">
<h1>Modification de l'état du recrutement</h1>
<div class="contenu">
<?php
if(!isset(
$_POST
[
'valider'
&
#93;))
{
?>
<a href="admin.php?admin=admin" title="Retourner à la page d'administration.">Retour à la page d'administration.</a>
<form name="formulaire" method="POST" action="admin.php?admin=recrutement">
<?php
$selrecru
=
mysql_query
(
'SELECT * FROM `recrutement`'
) or die (
"Impossible de s&ecaute;lectionner les données concernant le recrutement.<br />"
&
#46;mysql_error(). "<br />" .mysql_errno());
while(
$affrecru
=
mysql_fetch_assoc
(
$selrecru
))
{
extract
(
$affrecru
);
?>
<p>
<strong>
<?php
echo
$classe
[
$recru_class
&
#93; ;
?>
:</strong></em> <br />
<em><strong>Nombre :</strong></em> <input type="text" class="submit" name="nb[
<?php
echo
$recru_class
;
?>
]" maxlength="2" value="
<?php
echo
$recru_nb
;
?>
" /><br />
<em>Ouvert :</em> <input type="checkbox" name="open[
<?php
echo
$recru_class
;
?>
]" value="Y"
<?php
if(
$recru_open
==
'Y'
){echo
'checked'
;}
?>
/>
</p>
<?php
}
?>
<input type="submit" class="submit" name="valider" value="Valider le recrutement." />
</form>
<?php
}
// on a cliqué pour valider, on enregistre les données
if(isset(
$_POST
[
'valider'
&
#93;))
{
$nb
=
clean
(
$_POST
[
'nb'
&
#93;);
for(
$i
=
0
;
$i
<
12
;
$i
++)
{
if(isset(
$_POST
[
'open['
&
#46;$i.']'])){$open="Y";}else{$open="N";}
mysql_query
(
'UPDATE `recrutement` SET `recru_nb`="'
&
#46;$nb[$i].'", `recru_open`="'.$open.'" WHERE `recru_class`="'.$i.'"') or die ("Impossible de modifier les données dans la table `recrutement` !<br />" .mysql_error(). "<br />" .mysql_errno());
}
?>
<p>L'état du recrutement a été modifié avec succés.<br />
<a href="admin.php?admin=admin" title="Retourner à la page d'administration.">Retour à la page d'administration.</a><br />
<a href="admin.php?admin=recrutement" title="Retourner à la page de recrutement.">Retour à la page d'état du recrutement.</a></p>
<?
}
?>
</div>
</div>
J'ai enlevé le hidden de nom 'class' qui n'est apparemment pas repris dans le traitement (donc à priori inutile).
Il faut juste encore vérifier que la fonction clean() traite correctement les tableaux. Si ce n'est pas le cas, il faut la placer dans la boucle et utiliser
Code:
$nb[$i] = clean($_POST['nb['.$i.']']);
ou
$nb = clean($_POST['nb['.$i.']']);
qui nécessite alors la correction appropriée dans le texte de la requête
Si ça marche toujours pas, il faudrait tester les valeurs que te renvoie le formulaire par $_POST en utilisant ce petit code :
Code:
<pre>
<?php print_r
(
$_POST
);
?>
</pre>
Journalisée
What isn't remembered never happened...
Re: [PHP] Enregistrement multichamps dans une table
Norore
Animateurs
Hors ligne
Sexe:
Messages: 369
«
Répondre #9 le:
04 Mai 2008 à 08:23:52 »
Merci, je vais regarder ça
!). Pour ce qui est de te dire exactement leur fonctionnement respectif, il faudra que tu demandes au créateur de Connectix Board
...
Edit : ça me renvoit deux maginifiques erreurs (répétées 12 fois, de 0 à 11 chacune) :
Citation de: "SQL"
Notice: Undefined index: nb[0] in c:\documents and settings\divertissements\mes documents\création site web et +\sites_web\cocordia_aoc\admin\recrutement.php on line 51
Notice: Undefined index: open[0] in c:\documents and settings\divertissements\mes documents\création site web et +\sites_web\cocordia_aoc\admin\recrutement.php on line 52
Journalisée
Citation de: Secondat de Montesquieu
Je me croirais le plus heureux des mortels si je pouvais faire que les hommes puissent se passer de leur préjugé.
Re: [PHP] Enregistrement multichamps dans une table
superjun
Posteur assidu
Hors ligne
Messages: 137
«
Répondre #10 le:
04 Mai 2008 à 14:20:27 »
Argh... j'ai dû me planter dans l'utilisation des tableaux de variables dans un formulaire...
Tu pourrais me dire la valeur de $_POST une fois que tu as envoyé le formulaire ?
Code:
<pre>
<?php print_r
(
$_POST
);
?>
</pre>
Et puis aussi me donner le code de la fonction clean() (il faut vérifier qu'elle gère les tableaux).
--Edit--
En fait, tu peux déjà essayer le code suivant, et si ça marche toujours pas, faire ce que je t'ai dis plus haut
Code:
<?php
/* page d'administration pour le recrutement */
// array pour les classes
// initialisation des classes
$classe
= array(
0
=>
'Assassin'
,
1
=>
'Barbare'
,
2
=>
'Chaman de l\'Ours'
,
3
=>
'Conquérant'
,
4
=>
'Démonologue'
,
5
=>
'Eclaireur'
,
6
=>
'Gardien'
,
7
=>
'Hérault de Xotli'
,
8
=>
'Nécromancien'
,
9
=>
'Prêtre de Mitra'
,
10
=>
'Tempête de Set'
,
11
=>
'Templier noir'
);
?>
<div id="milieu">
<h1>Modification de l'état du recrutement</h1>
<div class="contenu">
<?php
if(!isset(
$_POST
[
'valider'
&
#93;))
{
?>
<a href="admin.php?admin=admin" title="Retourner à la page d'administration.">Retour à la page d'administration.</a>
<form name="formulaire" method="POST" action="admin.php?admin=recrutement">
<?php
$selrecru
=
mysql_query
(
'SELECT * FROM `recrutement`'
) or die (
"Impossible de s&ecaute;lectionner les données concernant le recrutement.<br />"
&
#46;mysql_error(). "<br />" .mysql_errno());
while(
$affrecru
=
mysql_fetch_assoc
(
$selrecru
))
{
extract
(
$affrecru
);
?>
<p>
<strong>
<?php
echo
$classe
[
$recru_class
&
#93; ;
?>
:</strong></em> <br />
<em><strong>Nombre :</strong></em> <input type="text" class="submit" name="nb[
<?php
echo
$recru_class
;
?>
]" maxlength="2" value="
<?php
echo
$recru_nb
;
?>
" /><br />
<em>Ouvert :</em> <input type="checkbox" name="open[
<?php
echo
$recru_class
;
?>
]" value="Y"
<?php
if(
$recru_open
==
'Y'
){echo
'checked'
;}
?>
/>
</p>
<?php
}
?>
<input type="submit" class="submit" name="valider" value="Valider le recrutement." />
</form>
<?php
}
// on a cliqué pour valider, on enregistre les données
if(isset(
$_POST
[
'valider'
&
#93;))
{
for(
$i
=
0
;
$i
<
12
;
$i
++)
{
$nb
=
clean
(
$_POST
[
'nb'
&
#93;[$i]);
if(isset(
$_POST
[
'open'
&
#93;[$i])){$open="Y";}else{$open="N";}
mysql_query
(
'UPDATE `recrutement` SET `recru_nb`="'
&
#46;$nb.'", `recru_open`="'.$open.'" WHERE `recru_class`="'.$i.'"') or die ("Impossible de modifier les données dans la table `recrutement` !<br />" .mysql_error(). "<br />" .mysql_errno());
}
?>
<p>L'état du recrutement a été modifié avec succés.<br />
<a href="admin.php?admin=admin" title="Retourner à la page d'administration.">Retour à la page d'administration.</a><br />
<a href="admin.php?admin=recrutement" title="Retourner à la page de recrutement.">Retour à la page d'état du recrutement.</a></p>
<?
}
?>
</div>
</div>
J'ai remplacé $_POST['nb['.$i.']'] par $_POST['nb'][$i] (même chose pour 'open'), qui devrait normalement être correct, cette fois, et j'ai mis la fonction clean() directement dans la boucle, ce qui fait qu'on n'a plus besoin de vérifier si elle traite correctement les tableaux (mais ce serait quand même utile de savoir, pour la suite).
Journalisée
What isn't remembered never happened...
Re: [PHP] Enregistrement multichamps dans une table
Norore
Animateurs
Hors ligne
Sexe:
Messages: 369
«
Répondre #11 le:
04 Mai 2008 à 14:48:04 »
Superjun ? Je t'adore ^^ ! C'est exactement ce qu'il faut :haha !
Edit : c'est tellement simple en plus que je ne sais pas pourquoi je n'y ai pas pensé moi-même... Ah si, j'ai des examens demain et après-demain, c'est pour ça
!
Journalisée
Citation de: Secondat de Montesquieu
Je me croirais le plus heureux des mortels si je pouvais faire que les hommes puissent se passer de leur préjugé.
Pages: [
1
]
Haut de page
Oltana.net
>
Informatique Créatrice
>
Webmastering
> Fil de discussion:
[Résolu][PHP] Enregistrement multichamps dans une table
« sujet précédent |
| sujet suivant »
Aller à:
Merci de choisir une destination:
-----------------------------
Préambule
-----------------------------
=> Infos, règles et fonctionnalités
-----------------------------
Informatique Pratique
-----------------------------
=> Hardware
=> Software
=> Gravure
=> Linux
-----------------------------
Informatique Créatrice
-----------------------------
=> Programmation
=> Art Graphique
=> Art Musical
=> Webmastering
-----------------------------
Tutoriels
-----------------------------
=> Grimoire
=> Demandes et propositions
-----------------------------
Discussion
-----------------------------
=> Taverne
=> Présentation
=> Culturama
=> Actualités
=> Petites Annonces
=> Boîte à idées
=> Flash Gamez
Chargement...