[RESOLU] Comment ajoutez plusieurs lignes (nombre de ligne indéfinis) dans une table?

Eléphant du PHP | 111 Messages

11 déc. 2015, 21:47

Bonsoir à tous,

Déjà, bon week end à tous ! :)

Je viens à vous se soir car je suis en train de faire mon site internet.

Je fais un formulaire avec 3 étapes.

La première : la personne donne un nombre pour une question.

La deuxième : Le nombre de la première étape fait repeter un input. Par exemple si la personne donne 10, à cette étape il y a 10 inputs qui sont afficher.

La troisième : Ajout des inputs dans la base de donnée. Un input = 1 ligne.

C'est à la troisième étape que je suis bloqué. En fait j'ai fait beaucoup de recherche aujourd'hui mais aucune ne fonctionne.

Page de la 2eme étape :

Code : Tout sélectionner

<?php include('include/mysql.php'); ?>   <?php $nbr = $_POST["nbr"] ; $titre = $_GET['titre'];   ?> <center><div style="width:800px; border:1px solid grey"> <h1>Ajout d'une série</h1><br/>   Etape 3/4 : Création des épisodes<br/><br/>   <br/><br/> <form method="post" action="etape4.php?nbr=<?php echo $nbr; ?>?titre2=<?php echo $titre; ?>"> <?php   echo implode (     "<br/>\n",     array_map(         function ($v) {         $titre = $_GET['titre'];             return sprintf("<input type='texte' style='width:500px;font-size:23px;font-family:Comic Sans MS;border:2px solid grey;border-radius:3px;margin-top:5px;' name='titre'  Value='".$titre." SxxExx'>",$v);                   },         range(1, $nbr)       )     );   ?>        <br/><br/> <input type="submit" style="border-radius:5px;border:1px solid #FA8258;padding-left:50px;padding-right:50px;color:white;padding-top:15px;padding-bottom:15px;text-decoration:none;background:#FA8258;font-size:21px;font-family:Comic Sans MS;margin-top:15px;" Value="Validé"><br/>         </div>
Page de la dernière étape :

Code : Tout sélectionner

<?php include('include/mysql.php');   $nbr = $_GET['nbr'];  ?>    <?php       ?>
Donc en conclusion, mon problème c'est que je n'arrive pas avec une method post d'envoyer les informations dans l'autre page car on ne sait pas le nombre d'input qu'on va avoir et après je ne sais pas comment ajouter dans la base de donnée plusieurs lignes.

Merci beaucoup et bonne soirée :)

Avatar du membre
Mammouth du PHP | 1564 Messages

11 déc. 2015, 21:59

Salut,

pour connaitre le nombre que le visiteur à tapé, il te suffit de faire:

Code : Tout sélectionner

$ValeurDeLinput=$_POST['ton_input'];//je te suggère grandement de sécuriser ton $_POST...
ensuite, si c'est un nombre (vérif à faire de ta part), pour entrer x fois dans la bse, tu fait avec un for():

Code : Tout sélectionner

for($i=1;$i<=$ValeurDeLinput;$i++){ mysqli_query($mysqli,"INSERT INTO ta_table SET champ='valeur ".$i."'"); }
EDIT: ta une erreur à ton <form>:

Code : Tout sélectionner

<form method="post" action="etape4.php?nbr=<?php echo $nbr; ?>?titre2=<?php echo $titre; ?>">
quand on met plusieurs variable dans l'url, on met une esperluette, plus un point d'interrogation: ?var1=var1&var2=var2&var3=var3...

bon we à toi aussi :D

Eléphant du PHP | 111 Messages

11 déc. 2015, 22:11

Salut,

pour connaitre le nombre que le visiteur à tapé, il te suffit de faire:

Code : Tout sélectionner

$ValeurDeLinput=$_POST['ton_input'];//je te suggère grandement de sécuriser ton $_POST...
ensuite, si c'est un nombre (vérif à faire de ta part), pour entrer x fois dans la bse, tu fait avec un for():

Code : Tout sélectionner

for($i=1;$i<=$ValeurDeLinput;$i++){ mysqli_query($mysqli,"INSERT INTO ta_table SET champ='valeur ".$i."'"); }
EDIT: ta une erreur à ton <form>:

Code : Tout sélectionner

<form method="post" action="etape4.php?nbr=<?php echo $nbr; ?>?titre2=<?php echo $titre; ?>">
quand on met plusieurs variable dans l'url, on met une esperluette, plus un point d'interrogation: ?var1=var1&var2=var2&var3=var3...

bon we à toi aussi :D
Merci beaucoup pour ta réponse rapide.
J'ai essayé comme cela :

Code : Tout sélectionner

<?php include('include/mysql.php'); $nbr = $_GET['nbr']; $titre2 = $_GET['titre2']; $titre = $_POST['titre']; ?> <?php // lancemen requête (on impose aucune condition puisque l'on désire obtenir la liste complète des propriétaires $sql2 = 'SELECT * FROM serie WHERE titre = "'.$titre2.'"'; // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die) $req = mysql_query($sql2) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error()); // on va scanner tous les tuples un par un while ($data = mysql_fetch_array($req)) { // on affiche les résultats $id_serie = $data['id']; } mysql_free_result ($req); ?> <?php for($i=0;$i<=$nbr;$i++){ mysqli_query($mysqli,"INSERT INTO episode (id_serie, titre) VALUES ('$id_serie', '$titre')"); } ?>
Mais aucun envoie de la base de donnée...

Avatar du membre
Mammouth du PHP | 1564 Messages

11 déc. 2015, 22:19

passe à mysqli ;) tu utilise mysqli (ma requête et mysql, tes requêtes...) mysql_ va bientôt être complètement obsolète avec le 7

tu devrai mettre la requete d'insertion dans ton while mais pas mettre un for du coup vu que tu traite avec un while (ce que je comprend pas très bien d'ailleurs)

Code : Tout sélectionner

while ($data = mysql_fetch_array($req)) { $id_serie = $data['id']; mysql_query("INSERT INTO episode (id_serie, titre) VALUES ('$id_serie', '$titre')"); }

Eléphant du PHP | 111 Messages

11 déc. 2015, 22:41

passe à mysqli ;) tu utilise mysqli (ma requête et mysql, tes requêtes...) mysql_ va bientôt être complètement obsolète avec le 7

tu devrai mettre la requete d'insertion dans ton while mais pas mettre un for du coup vu que tu traite avec un while (ce que je comprend pas très bien d'ailleurs)

Code : Tout sélectionner

while ($data = mysql_fetch_array($req)) { $id_serie = $data['id']; mysql_query("INSERT INTO episode (id_serie, titre) VALUES ('$id_serie', '$titre')"); }
Si j'ajoute l'insert dans le white, il y a qu'une ligne d'ajoutée. Toutes les lignes ne seront pas ajoutées...

Eléphant du PHP | 243 Messages

11 déc. 2015, 22:53

Salut,
Si j'ajoute l'insert dans le white, il y a qu'une ligne d'ajoutée. Toutes les lignes ne seront pas ajoutées...
Ah ce moment là, tu mets le for dans la boucle while !
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Avatar du membre
Mammouth du PHP | 1564 Messages

11 déc. 2015, 22:58

Salut ascla, oui, pense aussi à mettre & au lieu de ? dans action="" de ta balise <form>

Eléphant du PHP | 111 Messages

11 déc. 2015, 23:02

Salut,
Si j'ajoute l'insert dans le white, il y a qu'une ligne d'ajoutée. Toutes les lignes ne seront pas ajoutées...
Ah ce moment là, tu mets le for dans la boucle while !
Merciiiiii Résolu ! :)

Code : Tout sélectionner

<?php include('include/mysql.php'); $nbr = $_GET['nbr']; $titre2 = $_GET['titre2']; $titre = $_POST['titre']; ?> <?php $sql2 = 'SELECT * FROM serie WHERE titre = "'.$titre2.'"'; $req = mysql_query($sql2) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error()); while ($data = mysql_fetch_array($req)) { $id = $data['id']; for($i=0;$i<$nbr;$i++){ mysql_query("INSERT INTO episode (id_serie, titre) VALUES (".$id.", '".$titre."')"); } } mysql_free_result ($req); ?>

Eléphant du PHP | 111 Messages

11 déc. 2015, 23:02

Salut ascla, oui, pense aussi à mettre & au lieu de ? dans action="" de ta balise <form>
Merci pour l'info :)

Eléphant du PHP | 111 Messages

11 déc. 2015, 23:12

Salut,
Si j'ajoute l'insert dans le white, il y a qu'une ligne d'ajoutée. Toutes les lignes ne seront pas ajoutées...
Ah ce moment là, tu mets le for dans la boucle while !
En fait non se n'est pas résolu, dans la base de donnée, sa mets toujours la meme valeur...

Eléphant du PHP | 243 Messages

11 déc. 2015, 23:17

Oui c'est la conséquence logique de ce code :D
Mais quelle est la valeur qui doit varier entre plusieurs ajouts ?
Je m'explique, tu demandes le nombre de données qui doivent être ajoutées ($nbr), mais pour chaque ligne, quelle sera la valeur qui va différencier ces lignes ?
J'arrive de moins en moins à me faire comprendre moi :?
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Eléphant du PHP | 111 Messages

11 déc. 2015, 23:21

Oui c'est la conséquence logique de ce code :D
Mais quelle est la valeur qui doit varier entre plusieurs ajouts ?
Je m'explique, tu demandes le nombre de données qui doivent être ajoutées ($nbr), mais pour chaque ligne, quelle sera la valeur qui va différencier ces lignes ?
J'arrive de moins en moins à me faire comprendre moi :?
En fait dans se code :

Code : Tout sélectionner

<?php include('include/mysql.php'); ?> <?php $nbr = $_POST["nbr"] ; $titre = $_GET['titre']; ?> <center><div style="width:800px; border:1px solid grey"> <h1>Ajout d'une série</h1><br/> Etape 3/4 : Création des épisodes<br/><br/> <br/><br/> <form method="post" action="etape4.php?nbr=<?php echo $nbr; ?>?titre2=<?php echo $titre; ?>"> <?php echo implode ( "<br/>\n", array_map( function ($v) { $titre = $_GET['titre']; return sprintf("<input type='texte' style='width:500px;font-size:23px;font-family:Comic Sans MS;border:2px solid grey;border-radius:3px;margin-top:5px;' name='titre' Value='".$titre." SxxExx'>",$v); }, range(1, $nbr) ) ); ?> <br/><br/> <input type="submit" style="border-radius:5px;border:1px solid #FA8258;padding-left:50px;padding-right:50px;color:white;padding-top:15px;padding-bottom:15px;text-decoration:none;background:#FA8258;font-size:21px;font-family:Comic Sans MS;margin-top:15px;" Value="Validé"><br/> </div>
Il y a cette ligne :

Code : Tout sélectionner

<input type='texte' style='width:500px;font-size:23px;font-family:Comic Sans MS;border:2px solid grey;border-radius:3px;margin-top:5px;' name='titre' Value='".$titre." SxxExx'>
Et la value est modifiable, les gens changent les xx par des nombres.

Et tous les inputs seront différents :)

Voilà j'espere que je suis clair...

Avatar du membre
Mammouth du PHP | 1564 Messages

11 déc. 2015, 23:22

J'arrive de moins en moins à me faire comprendre moi :?
Non non, j'aurais pas fait mieux :D

Eléphant du PHP | 243 Messages

11 déc. 2015, 23:37

Ah je crois que je comprends de plus en plus !
Je récapitule :
  • L'utilisateur arrive sur une page et renseigne un nombre (par exemple 6)
    Il valide et des inputs de type text apparaissent (6 dans mon exemple)
    Il remplit les inputs et il y a ensuite création de lignes (6) dans ma bdd avec seulement le titre qui varie
Espérons que ce soit ça !

Sachant que tu passes par un $_POST pour la dernière étape, il va falloir changer l'identité (le name="") pour chaque input, histoire de le différencier.
Pour ceci, tu as qu'a faire un truc du genre name=' titre_".$nbr." '. Dans ce sens, chaque input aura une identité différente.
Enfin, une fois les champs complétés, il faudra les récupérer. Pour ceci, rien de mieux que la boucle for.

Essaye déjà de faire ce que j'ai dis juste au dessus, puis la fin sera beaucoup plus simple 8-)
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Avatar du membre
Mammouth du PHP | 1564 Messages

11 déc. 2015, 23:56

Ton idée est bonne mais il devrait mettre name="un_nom_pour_array[<?php echo $i; ?>]" je pense, il pourra ensuite récupérer les valeur facilement avec un foreach