Bonjous a tous,
j 'ai une REQ qui affiche une list des livres (nomLivre,nombreExemplaire) ds des inputs text afin de les modifier
mais j'ai un problem au niveau de l’incrémentation nom des inputs (name="")
j'ai trouvé cette solution mais je veux m'assurer si cette manière est pratique ou nn .
<?php
$Name_Input_Incr=1;
foreach ($result as $value):?>
<input type="hidden" value="<?php echo $value->id; ?>" name="input<?php echo $Name_Input_Incr++;?>">
<input type="text" value="<?php echo $value->nomLivre; ?>" name="input<?php echo $Name_Input_Incr++;?>">
</br>
<input type="text" value="<?php echo $value->nombreExemplaire; ?>" name="input<?php echo $Name_Input_Incr++;?>">
<?php endforeach; ?>
Salut,
Difficile de comprendre où tu veux en venir.
Tu as appelé une variable "$Name_Input_Incr", que tu incrémentes ? Pour la valeur de l'attribut "name" des balises "input" ?
Tellement bizarre.
Et alors pour ton 1er livre tu vas avoir :
Pour le livre 2 :
etc.
Ça me semble impensable.
Qu'est-ce que tu essaies de faire avec ça ?
j'ai un problem au niveau de l’incrémentation nom des inputs (name="")
j'ai trouvé cette solution
Ben écoutes... Oui ça va incrémenter...
Je ne comprends vraiment pas, ni ce que tu veux faire, ni ce que tu nous demandes.
je vais t'expliquer.
j'ai une page Modification des livres qui affiche la liste des livres (NomLivre ,quantité ) dans des Input Text afin de les modifier
le problem mtn c'est il faut incrementer les name des input afin de l'extraire par la method POST
si par exemple je fais les name des inputs comme ca :
foreach ($result as $value):?>
<input type="hidden" value="<?php echo $value->id; ?>" name="id">
<input type="text" value="<?php echo $value->nomLivre; ?>" name="nomLivre">
</br>
<input type="text" value="<?php echo $value->quantite; ?>" name="quantite">
<?php endforeach; ?>
vue cote client (ce sont des input de type text et nn pas label )
id Nom Livre Quantité
1 Les Misérables I 70
2 Le Petit Prince 50
3 Le Rouge et le Noir 30
4 Le Grand Meaulnes 10
button=> [modifier]
quand les données seront posté par la methode post on va recevoir just les derniers inputs
la valeur du $_POST[''id"] quand va recevoir 4
la valeur du $_POST[''nomLivre"] quand va recevoir Le Grand Meaulnes
la valeur du $_POST[''quantite"] quand va recevoir 10
$db->UpdatFunction( $_POST[''id"], $_POST[''nomLivre"], $_POST[''quantite"]);
il va modifier just la dernier ligne
c'est pr cette raison j'ai utilisé l'incrementation
j'espère mtn que tu as bien compris mon problem
Bonsoir,
Et pourquoi ne pas utiliser l'id du livre comme identifiant de l'input ?
<?php foreach ($result as $value):?>
<input type="text" value="<?= $value->nomLivre; ?>" name="nomLivre_<?= $value->id; ?>">
</br>
<input type="text" value="<?= $value->quantite; ?>" name="quantite_<?= $value->id; ?>">
<?php endforeach; ?>
En fait tu as créé une page d'administration de tes livres.
Dans cette page, tu veux avoir la possibilité de modifier les informations de PLUSIEURS livres d'UN seul coup.
Je ne suis pas sûr d'avoir compris puisque tu dis ça :
quand les données seront posté par la methode post on va recevoir just les derniers inputs
il va modifier just la dernier ligne
Comment ça ?
Si tu submit, ça va envoyer tous les inputs, pas juste le (ou les quelques) dernier(s).
Qu'est-ce que tu veux dire ?
En tous cas,
avec la 1ère méthode d'incrémentation que tu as proposé,
les "couples" id/nom_livre qui seront dans les variables $_POST, ne seront PAS les même que ceux dans ta base de données.
La méthode n'est pas bonne.
La méthode que propose Carouge10 apporte déjà beaucoup de sens.
Bon alors du coup je me pose toujours la question,
tu veux modifier tout d'un coup ? Ou juste la dernière ligne ?
Si c'est juste la dernière ligne,
pourquoi est-ce qu'il y a un foreach dans le form ?
Si c'est tout d'un coup,
ça va être compliqué de "boucler" mais j'ai une idée.
merci pr la reponse
oui je veux modifier tout d'un coup :D
tu as une bonne solution ??
Alors ça me parait pas simple hein !
Déjà j'utiliserai le formulaire de Carouge10 (j'ai juste mis des nom anglais pour les variables)
<?php foreach ($result as $value):?>
<input type="text" value="<?= $value->book_name; ?>" name="book_name_<?= $value->id; ?>">
</br>
<input type="text" value="<?= $value->quantity; ?>" name="quantity_<?= $value->id; ?>">
<?php endforeach; ?>
Bon sang ça me retourne la tête ce problème ^^
Mais je pense avoir trouvé.
Le truc c'est que,
instinctivement, on aimerait bien faire un UPDATE à chaque itération d'une boucle, et hop on en parle plus.
Le problème c'est qu'à chaque itération on a comme information, QUE
OU
On a BESOIN de 2 itérations pour avoir nos 3 informations, du coup on bloque...
C'est pour ça que je pense qu'il faut faire tout ça en 2 étapes :
Le premier soucis à résoudre, c'est qu'au submit, on va recevoir
Alors d'abord, on va créer 3 fonctions qui vont permettre d'isoler ces 3 variables :
Tu vas te servir des expressions régulières pour faire ça.
Maintenant qu'on a ces 3 fonctions,
on va créer un tableau vide :
$datas = array();
on boucle sur $_POST pour remplir ce tableau
Ce tableau, on va en faire un tableau de tableaux, qui ressemblera à ça :
$datas[0] = array("book_name" => "Moby Dick", "quantity" => 12)
$datas[1] = array("book_name" => ...
...
// la clé de $datas, correspondant à l'id du bouquin
La boucle n'est pas évidente :
foreach($_POST as $key => $value)
{
// on isole nos 3 variables
$id = getId($key);
// SI $key commence par 'nomLivre'
$book_name = getBookName($key);
// SINON (c'est que ça commence par 'quantity', j'imagine qu'on aura que ces 2 cas possible)
$quantity = getQuantity($key)
/* ici, on aura jamais nos 3 variables en même temps
on a QUE "le nom ET l'id" OU "la quantité ET l'id"
alors ça va pas être simple... */
// SI $quantity vaut null (on est dans le cas "nom ET id")
// SI $datas n'as pas de clé correspondant à $id
$datas[$id] = array("book_name" => $book_name);
// SINON (la clé existe)
// SI la clé $datas[$id]['book_name] n'existe pas
$datas[$id]['book_name'] = $book_name
// SINON (on est dans le cas "quantité ET id")
// on répète la même structure de IF/ELSE que dans le cas ("nom ET id"), en adaptant
}
J'ai écris ça assez vite alors ne prends pas tout au pied de la lettre parce-que l'algorithme n'est peut-être pas bon.
Fais des tests.
À partir d'ici, le plus difficile est derrière nous.
Maintenant il suffit simplement de boucler sur notre tableau $datas pour faire un UPDATE à chaque itération.
Par contre maintenant que j'ai écris mon "idée", je me dis que c'est quand même HYPER lourd.
Si tu as beaucoup de livres différents, ça va faire tellement de requêtes... Alors que parfois, peut-être qu'on aimerait faire un UPDATE sur seulement UN SEUL livre...
Soit on abandonne l'idée de permettre un UPDATE multiple.
Soit on pourrait peut-être créer ce tableau de tableaux $datas, AVANT de submit le formulaire,
et APRÈS avoir submit le formulaire, on construit un 2ème tableau $datas2, suivant exactement la même structure que $datas.
Comme ça dans une boucle, on compare les 2 tableaux, et on fait un UPDATE SEULEMENT s'il y a une différence.
Même si le tableau prend 10 000 livres, en construire un 2ème et faire des comparaisons, prendra moins de temps que faire 10 000 UPDATE en base de données, alors qu'on ne voulait faire que 10 UPDATE.
Merci pour ta reponse ... j'ai trouvé une autre solution qui fonctionne bien malgré sa difficulte