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

Eléphant du PHP | 243 Messages

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 !
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Mammouth du PHP | 2278 Messages

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é.)
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 111 Messages

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 :(

Eléphant du PHP | 243 Messages

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.
"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

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?

Eléphant du PHP | 243 Messages

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 !
"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

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 } ?>

Eléphant du PHP | 243 Messages

15 déc. 2015, 20:44

Parfait !
Te reste plus qu'à passer le sujet en Résolu ;)
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Mammouth du PHP | 2278 Messages

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";
}

?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD