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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Comment ajoutez plusieurs lignes (nombre de ligne indéfinis) dans une table?

Re: Comment ajoutez plusieurs lignes (nombre de ligne indéfinis) dans une table?

par sirakawa » 17 déc. 2015, 10:40

Bonjour,
Comme tu sembles patiner, voici un schéma possible, avec le principal (Il faudrait entre autres ajouter les incantations HTML au début...)
Dans index.html, il y a type="number" step="1" value="1" min="1" max="6" qui sera traité plus ou moins par le navigateur, mais ne créera pas d'erreur (cf http://www.alsacreations.com/tuto/lire/ ... umber.html)
<form method = 'post'  action = "traite.php">
<label>Nombre de champs à ajouter</label>
<input name="nombre" type="number" step="1" value="1" min="1" max="6" >
<button type= "submit">Procéder</button>
</form>
traite.php
<?PHP
$nombre_champs = (isset ($_POST['nombre'])) ?$_POST['nombre'] : 1;
$chaine = "<h1>Données à insérer</h1>

<form method = 'post' action = 'insere.php'>";
for ($i = 1; $i <= $nombre_champs; $i++)
{
	$chaine .= "<input type = 'text' name = 'donnee[]' value ='' /><br />";

}
$chaine .="
<button type = 'submit'>Procéder</button>
</form>";
print "$chaine";

?>
insere.php
<?PHP
$donnees = $_POST['donnee'];
/* éventuellement traitement pour èliminer les lignes vides*/
foreach($donnees as $ligne)
{
	print "<br :> $ligne";
}

?>

Re: Comment ajoutez plusieurs lignes (nombre de ligne indéfinis) dans une table?

par Ascla » 15 déc. 2015, 20:44

Parfait !
Te reste plus qu'à passer le sujet en Résolu ;)

Re: Comment ajoutez plusieurs lignes (nombre de ligne indéfinis) dans une table?

par ISoon » 15 déc. 2015, 19:42

Merci beaucoup à tous le monde c'est résolu. Voici le résultat :

Code : Tout sélectionner

<?php include('include/mysql.php'); ?> <?php //Si lutilisateur est connecte, on lui donne un lien pour modifier ses informations, pour voir ses messages et un pour se deconnecter if(isset($_SESSION['username'])) { ?> <?php $nbr = $_GET['nbr']; $titre2 = $_GET['titre2']; $id_membre = $_SESSION['userid']; foreach ($_POST["titre"] as $titre) { $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_serie = $data['id']; echo $titre; echo $id_serie; mysql_query("INSERT INTO episode (id_serie, id_membre, titre) VALUES ($id_serie, $id_membre,'$titre')"); } } mysql_free_result ($req); ?> <?php header('Location: finish.php'); ?> <?php } else { //Sinon, on lui donne un lien pour sinscrire et un autre pour se connecter ?> <?php header('Location: /connexion.php'); ?> <?php } ?>

Re: Comment ajoutez plusieurs lignes (nombre de ligne indéfinis) dans une table?

par Ascla » 12 déc. 2015, 15:48

D'abord si tu utilisais une feuille de styles les <i nput machintrucchoseet je tenpasset des meilleures /> seraient plus lisibles.
Ensuite la syntaxe de <input se termine par

Code : Tout sélectionner

espace />
Voilà déjà quelques problèmes à corriger avant de continuer !

Code : Tout sélectionner

<input ... name = 'chapitre[]'.../>
tu récupèrerais par

Code : Tout sélectionner

$chapitres = $_POST['chapitre'];
un tableau que tu pourrais utiliser directement.
(Tu pourrais aussi passer $nbr en input caché.)
C'est déjà très bien expliqué !
Mais je vais allonger son explication :

Code : Tout sélectionner

<input type="text" name="titre[]"> <input type="text" name="titre[]"> <input type="text" name="titre[]">
Nous avons donc ici la définition de tous nos inputs.

Code : Tout sélectionner

foreach ($_POST["titre"] as $titre) { echo $titre; }
Dans cet exemple (que j'ai testé et qui fonctionne!), le php réussira à différencier chaque input.
Essaye de comprendre ceci et de le mettre en œuvre.
Si tu n'as pas compris une étape, n'hésite pas !

Re: Comment ajoutez plusieurs lignes (nombre de ligne indéfinis) dans une table?

par ISoon » 12 déc. 2015, 14:39

Essaye de voir si tu reçois bien les valeurs $titre2 et $titre avec des 'echo' et l'endroit où ça bloque.
Normalement, cette méthode marche, mais après mure réflexion, je pense que la solution du tableau reste la plus efficace.
Quand je fais des echo, il y a que la valeur Titre 2 qui s'affiche.

Je n'ai pas très bien compris le systeme de tableau, est ce que tu aurais le temps de m'expliquer?

Re: Comment ajoutez plusieurs lignes (nombre de ligne indéfinis) dans une table?

par Ascla » 12 déc. 2015, 13:38

Essaye de voir si tu reçois bien les valeurs $titre2 et $titre avec des 'echo' et l'endroit où ça bloque.
Normalement, cette méthode marche, mais après mure réflexion, je pense que la solution du tableau reste la plus efficace.

Re: Comment ajoutez plusieurs lignes (nombre de ligne indéfinis) dans une table?

par ISoon » 12 déc. 2015, 12:37

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
Ah mais ne nous embêtons pas avec des array 8-|

Pour moi ça donnerait plus :
<?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='titre2'  Value='".$titre." SxxExx'>",$v);
         
        },
        range(1, $nbr)
 
    )
 
 
);
 
?>
Et lorsque l'on va recevoir ces données
<?php 
    $titre = $_GET['titre'];
    foreach($_POST as $clef => $valeur) /* pour chaque $_POST */
    {
        if ($clef != 'titre')
        {
            $titre2 = $_POST[$clef];
            $sql2 = 'SELECT * FROM serie WHERE titre = "'.$titre.'"';
            $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++){
                mysqli_query($mysqli,"INSERT INTO episode (id_serie, titre) VALUES (".$id.", ".$titre.")");
            }
        }  
    }
mysql_free_result ($req);
?>
J'ai pas testé le code mais je pense que c'est ce que tu cherches. Tiens nous au courant. Si tu ne comprends pas quelque chose, n'hésite pas !
Merci pour ta réponse :)

J'ai essayé ton code :

Code : Tout sélectionner

<?php include('include/mysql.php'); $titre2 = $_GET['titre2']; foreach($_POST as $clef => $valeur) /* pour chaque $_POST */ { if ($clef != 'titre') { $titre = $_POST[$clef]; $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); ?>
Malheureusement, j'ai cette erreur :
Parse error: syntax error, unexpected end of file in /Applications/XAMPP/xamppfiles/htdocs/ajout/serie/etape4.php on line 22
Ligne 22 : :/


PS: J'ai trouvé l'erreur, Il manquait une accolade :

Code : Tout sélectionner

<?php include('include/mysql.php'); $titre2 = $_GET['titre2']; foreach($_POST as $clef => $valeur) /* pour chaque $_POST */ { if ($clef != 'titre') { $titre = $_POST[$clef]; $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); ?>
Par contre aucune insertion dans la base de donnée :(

Re: Comment ajoutez plusieurs lignes (nombre de ligne indéfinis) dans une table?

par sirakawa » 12 déc. 2015, 10:13

Bonjour,
D'abord si tu utilisais une feuille de styles les <i nput machintrucchoseet je tenpasset des meilleures /> seraient plus lisibles.
Ensuite la syntaxe de <input se termine par

Code : Tout sélectionner

espace />
Enfin, et surtout si tu nommais tes input comme des tableaux:

Code : Tout sélectionner

<input ... name = 'chapitre[]'.../>
tu récupèrerais par

Code : Tout sélectionner

$chapitres = $_POST['chapitre'];
un tableau que tu pourrais utiliser directement.
(Tu pourrais aussi passer $nbr en input caché.)

Re: Comment ajoutez plusieurs lignes (nombre de ligne indéfinis) dans une table?

par Ascla » 12 déc. 2015, 00:21

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
Ah mais ne nous embêtons pas avec des array 8-|

Pour moi ça donnerait plus :
<?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='titre2'  Value='".$titre." SxxExx'>",$v);
         
        },
        range(1, $nbr)
 
    )
 
 
);
 
?>
Et lorsque l'on va recevoir ces données
<?php 
    $titre = $_GET['titre'];
    foreach($_POST as $clef => $valeur) /* pour chaque $_POST */
    {
        if ($clef != 'titre')
        {
            $titre2 = $_POST[$clef];
            $sql2 = 'SELECT * FROM serie WHERE titre = "'.$titre.'"';
            $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++){
                mysqli_query($mysqli,"INSERT INTO episode (id_serie, titre) VALUES (".$id.", ".$titre.")");
            }
        }  
    }
mysql_free_result ($req);
?>
J'ai pas testé le code mais je pense que c'est ce que tu cherches. Tiens nous au courant. Si tu ne comprends pas quelque chose, n'hésite pas !

Re: Comment ajoutez plusieurs lignes (nombre de ligne indéfinis) dans une table?

par two3d » 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

Re: Comment ajoutez plusieurs lignes (nombre de ligne indéfinis) dans une table?

par Ascla » 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-)

Re: Comment ajoutez plusieurs lignes (nombre de ligne indéfinis) dans une table?

par two3d » 11 déc. 2015, 23:22

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

Re: Comment ajoutez plusieurs lignes (nombre de ligne indéfinis) dans une table?

par ISoon » 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...

Re: Comment ajoutez plusieurs lignes (nombre de ligne indéfinis) dans une table?

par Ascla » 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 :?

Re: Comment ajoutez plusieurs lignes (nombre de ligne indéfinis) dans une table?

par ISoon » 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...