[RESOLU] un seul record sur 5 insérer dans la bd

Petit nouveau ! | 7 Messages

13 déc. 2012, 20:18

Bonjour,

j’arrive a envoyer des informations a partir d'un fichier .csv
mais mon script n’envoie que le dernier record sur 5 pourquoi ?

merci a l'avance !

page un : test.php

<?php
$con = mysql_connect("...","...","...");

if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("club", $con);

//ouvre le fichier csv
$f = fopen ("tournois.csv", "r");

$ln= 0;

while ($line= fgets ($f)) {

++$ln;
// printf ("%2d: ", $ln);
if ($line===FALSE) print ("FALSE\n");
//print $line;

//explode separe la variable entre les ;
$part=explode(";",$line);
//echo $part[0];
//$part=mysql_fetch_assoc($part1);

//$part=mysql_query($part1);

echo ('<form action="test2.php" name="Formu" method="POST">');
echo ('<table border="1">');
echo ('<tr>');
echo ('<td>Date : <input name="dates" readonly="readonly" type="text" value="' . $part[0] . '" style="width:6em" /></td>');

echo ('<td>Section : <input name="section" readonly="readonly" type="text" value=' . $part[1] . ' style="width:4em" /></td>');
echo ('<td>Nombre jrs : <input name="nbrjoueurs" readonly="readonly" type="text" value=' . $part[2] . ' style="width:6em" /></td>');
echo ('<td>Participants : <input name="participants" readonly="readonly" type="text" value=' . $part[3] . ' style="width:7em" /></td>');
echo ('<td>Cotes Avant : <input name="cotesAv" readonly="readonly" type="text" value=' . $part[4] . ' style="width:15em" /></td>');
echo ('<td>Cotes Perfo. : <input name="cotesPerf" readonly="readonly" type="text" value=' . $part[5] . ' style="width:15em" /></td>');
echo ('<td>Cotes Après : <input name="cotesAp" readonly="readonly" type="text" value=' . $part[6] . ' style="width:15em" /></td>');
echo ('<td>perms : <input name="perms" readonly="readonly" type="text" value=' . $part[7] . ' style="width:15em" /></td>');
echo ('<td>Resultats : <input name="resultats" readonly="readonly" type="text" value=' . $part[8] . ' style="width:15em" /></td>');

echo ('</tr>');

echo ('</table>');
}
echo ('<input type="submit" value="Ajouter">');

echo ('</form>');

fclose ($f);

?>

et la page test2.php

<?php
$con = mysql_connect("...","...","...");

if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("club", $con);

$sql = mysql_query("INSERT INTO tournois (dates, section, nbrjoueurs, participants, cotesAv, cotesPerf, cotesAp, perms,resultats) VALUES ('".$_POST[dates]."','".$_POST[section]."','".$_POST[nbrjoueurs]."','".$_POST[participants]."','".$_POST[cotesAv]."','".$_POST[cotesPerf]."','".$_POST[cotesAp]."','".$_POST[perms]."','".$_POST[resultats]."')");

echo ('<div align="center">');
echo ('<table width="300" border="1" align="center">');
echo ('<tr>');
echo ('<td width="263" class=tdx><div align="center">Le nouveau tournoi est ajouter.</div></td>');
echo ('</tr>');

echo ('<table border="1">');

echo ('<tr>');
echo ('<td>Date</td>');
echo ('<td width="155" name="dates">' . $_POST[dates] .'</td><p>');
echo ('</tr>');
echo ('<tr>');
echo ('<td>Section</td>');
echo ('<td width="155" name="section">' . $_POST[section] . '</td>');
echo ('</tr>');
echo ('<tr>');
echo ('<td>Nom. Joueurs</td>');
echo ('<td width="155" name="nbrjoueurs">' . $_POST[nbrjoueurs] . '</td>');
echo ('</tr>');
echo ('<tr>');
echo ('<td>Participants</td>');
echo ('<td width="155" name="participants">' . $_POST[participants] . '</td>');
echo ('</tr>');
echo ('<tr>');
echo ('<td>Cote Avant</td>');
echo ('<td width="155" name="cotesAv">' . $_POST[cotesAv] . '</td>');
echo ('</tr>');
echo ('<tr>');
echo ('<td>Cote Perfo.</td>');
echo ('<td width="155" name="cotesPerf">' . $_POST[cotesPerf] . '</td>');
echo ('</tr>');
echo ('<tr>');
echo ('<td>Cote Apres</td>');
echo ('<td width="155" name="cotesAp">' . $_POST[cotesAp] . '</td><br>');
echo ('</tr>');
echo ('<tr>');
echo ('<td>Performance</td>');
echo ('<td width="155" name="perms">' . $_POST[perms] . '</td>');
echo ('</tr>');
echo ('<tr>');
echo ('<td>Resultats</td>');
echo ('<td width="155" name="resultats">' . $_POST[resultats] . '</td>');
echo ('</tr>');

echo ('</table>');

echo ('</table>');

echo ('</div>');

mysql_close()

?>

donc en plus simple mon script affiche seulement le dernier record sur 5 et fait de même dans ce qu'il envois dans la BD !?

merci je crois pas que ce ne sois un gros problème une connerie comme d'habitude !!!

ViPHP
xTG
ViPHP | 7331 Messages

13 déc. 2012, 20:36

Parce que tu affiches 5 fois le même formulaire. :)

Si tu étais facteur et que tu arrivais dans une rue où tu avais une lettre à livrer à monsieur Y.
Et qu'à l'adresse X il y a en fait 5 maisons.
Et que chaque maison était un monsieur Y.
Tu laisses la lettre dans quelle boite aux lettres ?

En HTML c'est la même chose, un champ name doit être unique.
Ou bien être un tableau :
<input type="text" name="nom[0]" />
<input type="text" name="nom[1]" />

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

13 déc. 2012, 20:52

salut,

J'ajouterais que :
- Tu ne peux pas, comme tu le souhaite, insérer plusieurs lignes en un insert !
- Il faut toujours vérifier des infos que tu souhaite prendre dans $_POST ou $_GET ou $_COOKIE etc. Ces infos peuvent ne pas exister tu n'as aucun moyen d'être certain que le fomulaire ne sera pas modifié.
- Il ne faut pas insérer comme ça, sans aucun contrôle, des valeurs fournis pas l'utilisateur.

tu ne devrais pas utiliser l'extension mysql mais plutôt mysqli.


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 7 Messages

13 déc. 2012, 20:56

ok je regarde cela et reviens !!!

merci de répondre si rapidement !!!

Petit nouveau ! | 7 Messages

14 déc. 2012, 15:36

Bonjour xTG et moogli,

j'ai regardé cela hier et je vois mal comment je vais pouvoir faire pour dans un exemple de 4 recors a envoyer
dans la base de donner !?

j'ai fais des formulaires des updates mais la je crois que j’accroche...

vous serait-il possible sans le faire pour moi mais me donner une piste plus précise !

j'ai essayer avec une raquette SQL mais sur mon serveur web ca ne fonctionne pas !!!

merci !

Mammouth du PHP | 702 Messages

14 déc. 2012, 16:27

a priori de ce que j'essai de comprendre tu essai de poster un formulaire plusieurs fois...

Cela fonctionne un peu comme un tableau par exemple si tu as une facture, tu facture plusieurs produits.
tu auras donc

Code : Tout sélectionner

Libelle Quantité Prix Hors Taxes Taux de TVA Raquette 3 159 19.6 Ski 2 354 19.6
En html et php il faut savoir une chose c'est que si deux champs possèdent le même attribut name alors seul le dernier sera enregistré.

C'est la cas par exemple lorsque tu as une case à cochée avec une question "S'abonnez à la newsletter"... Si tu clic pas alors que va être envoyé au server?
A priori je pense que tu sais qu'une variable non déclarée renvoi un message d'erreur de type undefined var...
Image
Ceci est l'un des rares cas avec les boutons radio ou tu peux avoir de éléments qui ont le même attribut name

Donc pour ce genre de chose on précise un autre champs qui a le même attribut name volontairement mais de type hidden. Ainsi si la case n'est pas cochée par défaut
le hidden sera envoyé avec la valeur contraire.

Pour ton formulaire multiple c'est pareil, il prend le dernier champ rempli.

Pour ce que tu souhaites faire il faut que tu spécifie à PHP que tu lui envoi un tableau qui contient plusieurs lignes. de type array.

Ainsi chacun de tes champs devra prendre pour attribut name quelque chose sous la forme data[x][nom_du_champ] avec data correspond au nom de ton tableau de type array
et les premiers crochets doivent être vite, ils correspondent à la clé de ton array c'est de la sorte que tu pourra accéder aux infos et les enregistrer avec un foreach.
et nom du champ le nom de ton champs. le x correspond à la clé soit tu laisse vide soit tu utilise une variable numérique non décimale.

Ainsi pour l'exemple plus haut le formulaire sera de type
<form action="traitement.php" method="post" name="facture">
    <label> Produit</label>
    <input type="text" name="data[1][produit]" value="raquette">
    <input type="text" name="data[2][produit]" value="ski">
    <br>
    <label> Quantité</label>
    <input type="text" name="data[1][quantite]" value="3">
    <input type="text" name="data[2][quantite]" value="2">
    <br>
    <label> Prix Hors Taxes</label>
    <input type="text" name="data[1][prix_ht]" value="159">
    <input type="text" name="data[2][prix_ht]" value="359">
    <br>
    <label> Taux de TVA</label>
    <input type="text" name="data[1][taux]" value="19.6">
    <input type="text" name="data[2][taux]" value="19.6">
    <br><input type="submit" value="enregistrer" name="enreg">
</form>
ensuite dans la page qui va effectuer le traitement tu devra utiliser une boucle foreach.

ça se présentera sous cette forme
<?php
if (isset($_POST['enreg'])) {

    foreach ($value as $key => $array) {

        $sql = 'INSERT INTO `ma_table` SET
	`produit`   = "' . mysql_real_escape_string($array['produit']) . '",
        `quantite`  = "' . mysql_real_escape_string($array['quantite']) . '",
        `prix_ht`   = "' . mysql_real_escape_string($array['prix_ht']) . '",
        `taux_tva`  = "' . mysql_real_escape_string($array['taux_tva']) . '"
	';
        mysql_query($sql);
    }
}
?>
Normalement avec ceci tu devrais comprendre le principe des tableaux et des boucles foreach.
Ceci est en procédural si tu as déjà tu mal avec cela je pense qu'il serait difficile de te l'expliquer en POO, mais le principe reste le même.