IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Ajouter un champ (JS) en respectant la lecture des données issues de la base SQL via le PHP


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut Ajouter un champ (JS) en respectant la lecture des données issues de la base SQL via le PHP
    Bonjour a tous et surtout BONNNNNNNNE ANNNNNNNNEEEEEEE !!!


    Pour cette NOUVELLE année, je souhaiterai s'il vous plait vous exposer un NOUVEAU problème :-D

    J'ai actuellement un formulaire en PHP, dont les données sont sauvegardées via l'appelle d'une fonction envoi(), jusque la tout est OK :
    ';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $rescred = mysql_query("SELECT * FROM `toto` where idC='$idc' order by idCR asc");
        while($clcred = mysql_fetch_array($rescred, MYSQL_ASSOC))
        {
    	 for ($i = 1; $i <= 15; $i++) 
             {
    		$j=$i; if ($j<10){ $j='0'.$j;}
                               if ($clcred['nom_'.$i] =="1"){$nclcred="Pierre";}
                               if ($clcred['nom_'.$i] =="2"){$nclcred="Jean";}
                               if ($clcred['sex_'.$i] =="1"){$ncltyp="Homme";}
                               if ($clcred['sex_'.$i] =="3"){$ncltyp="Femme";}
    				echo '  	
    					<div class="form-group normal">
    						<div class="col-sm-2"><select name="nom_'.$i.'" id="nom_'.$i.'" class="form-control tooltips" onchange="envoi(\'nom_'.$i.'\','.$i.');" data-original-title="Nom Personne" data-placement="bottom"><option disabled>Nom</option>';if ($clcred['nom_'.$i]<>''){echo '<option value="'.$clcred['nom_'.$i].'" selected="selected">'.$nclcred.'</option>';} echo '<option value=""></option><option value="1">Pierre</option><option value="2">Jean</option></select></div>
    						<div class="col-sm-2"><select name="sex_'.$i.'" id="sex_'.$i.'" class="form-control tooltips" onchange="envoi(\'ncltyp_'.$i.'\','.$i.');" data-original-title="Sexe Personne" data-placement="bottom"><option disabled>Nom</option>';if ($clcred['sex_'.$i]<>''){echo '<option value="'.$clcred['sex_'.$i].'" selected="selected">'.$ncltyp.'</option>';} echo '<option value=""></option><option value="1">Homme</option><option value="2">Ierre</option></select></div>
    						<div class="col-sm-1"><input type="text" class="form-control tooltips" id="age_'.$i.'" name="age_'.$i.'" value="'.$clcred['age_'.$i].'" placeholder="Age" onblur="envoi(\'age_'.$i.'\','.$i.')" data-original-title="Age" data-placement="bottom"></div>
                                           </div>	
    		}
          }
    Mon problème vient du fait que le nombre de ligne est statique $i<=15, or j'aimerai bien modifier ce script en supprimant l'affichage des 15 lignes d'un coup et plutot proposer de rajouter des lignes de 2 jusqu'a 15 par exemple. La nous parlons de javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>formulaire multichamp</title>
    <script type="text/javascript">
    function create_champ(i) {
    var i2 = i + 1;
    document.getElementById('leschamps_'+i).innerHTML = '<input type="text" name="image_'+i2+'"></span>';
    document.getElementById('leschamps_'+i).innerHTML += (i <= 30) ? '<br /><span id="leschamps_'+i2+'"><a href="javascript:create_champ('+i2+')">Ajouter un champs</a></span>' : '';
    }
    </script>
    </head>
     
    <body>
    <input type="text" name="image_1" /><br />
    <span id="leschamps_1"><a href="javascript:create_champ(1)">Ajouter un champs</a></span>
    <!-- <input name="valide" type="submit" value="envoyer"/> -->
    </body>
    </html>
    Mon problème pour rester dans le PHP est que je ne parviens pas a rendre compatible le $i du javascript avec le $i du php.

    En clair je voudrai si l'on rappelle le fichier qu'il lise dans la base de données SQL les infos sauvegardées et qu'il affiche autant de lignes et d'infos qui ont été sauvegardées.

    Si vous avez une piste de réflexion, je suis preneur.

    Merci a tous pour votre aide et bonne journée

    Olivier

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Utilise une notation en tableau :
    Ainsi tu récupères tout dans $_POST['image'] sans avoir besoin de savoir combien il y en a.

    Tu peux faire la même chose pour tous les champs.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Je ne comprends pas ... pourquoi utiliser $_POST['image']

    Je réitère car je pense ne pas avoir été trés trés clair dans mes explications.

    Actuellement j'ai 15 series d'input et de select dont les noms prennent des $i en fonction de la boucle FOR .. Tout est OK

    <select name="nom_1" id="nom_1" class="form-control tooltips" onchange="envoi(\'nom_1\',1);" data-original-title="Nom Personne" data-placement="bottom"><option disabled>Nom</option>';if ($clcred['nom_1']<>''){echo '<option value="'.$clcred['nom_1'].'" selected="selected">'.$nclcred.'</option>';} echo '<option value=""></option><option value="1">Pierre</option><option value="2">Jean</option></select>
    <select name="sex_1" id="sex_1" class="form-control tooltips" onchange="envoi(\'ncltyp_1'\',1);" data-original-title="Sexe Personne" data-placement="bottom"><option disabled>Nom</option>';if ($clcred['sex_1']<>''){echo '<option value="'.$clcred['sex_1'].'" selected="selected">'.$ncltyp.'</option>';} echo '<option value=""></option><option value="1">Homme</option><option value="2">Ierre</option></select>
    <input type="text" class="form-control tooltips" id="age_1" name="age_1" value="'.$clcred['age_1'].'" placeholder="Age" onblur="envoi(\'age_1\',1)" data-original-title="Age" data-placement="bottom">

    <select name="nom_2" id="nom_2" class="form-control tooltips" onchange="envoi(\'nom_2\',2);" data-original-title="Nom Personne" data-placement="bottom"><option disabled>Nom</option>';if ($clcred['nom_2']<>''){echo '<option value="'.$clcred['nom_2'].'" selected="selected">'.$nclcred.'</option>';} echo '<option value=""></option><option value="1">Pierre</option><option value="2">Jean</option></select>
    <select name="sex_2" id="sex_2" class="form-control tooltips" onchange="envoi(\'ncltyp_2'\',2);" data-original-title="Sexe Personne" data-placement="bottom"><option disabled>Nom</option>';if ($clcred['sex_2']<>''){echo '<option value="'.$clcred['sex_2'].'" selected="selected">'.$ncltyp.'</option>';} echo '<option value=""></option><option value="1">Homme</option><option value="2">Ierre</option></select>
    <input type="text" class="form-control tooltips" id="age_2" name="age_2" value="'.$clcred['age_2'].'" placeholder="Age" onblur="envoi(\'age_2\',2)" data-original-title="Age" data-placement="bottom">

    etc.... grace a la boucle for .. donc jusqu' 15

    ce que je voudrais c'est supprimer mon script de boucle for, n'avoir que la premiere ligne et qu'en cliquant sur un bouton je rajoute des lignes, cela fonctionne sauf que je ne parviens pas quand je rappelle un fichier d'une personne a afficher le nombre de ligne deja precedemmement remplies et donc lire les données precedemment enregistrées ..

    Mon formulaire ne sauvegarde pas les données avec le POST mais plutot en appelant la fonction envoi()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function envoi (idA,nb) {
    idC= 'S'+idA;
    var idC = document.getElementById(idA).value;
    var xhr_object = null;
    if(window.XMLHttpRequest) xhr_object = new XMLHttpRequest();
    else if(window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
    else {alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");return;}
    xhr_object.open("POST", "sauve.php?personne=<?php echo $personne;?>&nb="+nb+"&champ="+idA+"&"+idA+"="+idC, true);
    xhr_object.onreadystatechange = function() {if(xhr_object.readyState == 4) {}}
    xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    var data = "personne=<?php echo $personne;?>&nb="+nb+"&champ="+idA+"&"+idA+"="+idC;
    xhr_object.send(data);
    var idC = document.getElementById(idA); idC.style.border="2px solid #00FF00";
    }
    ->P.S : Je sais j'utilise ici autant le POST que le GET, mais l'un sans l'autre rien ne fonctionne chez moi



    En fait ce que je voudrai c'est un script qui permet de rajouter des lignes de champs mais quand je rappelle cette page il me donne autant de ligne de champ que j'ai sauvegardé d'infos...


    MErci milles fois

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ton problème a plus l'air d'être sur Javascript que sur la partie PHP.

    Pour l'aspect HTML, n'utilise pas des notation "champ_xxx" mais "champ[xxx]", ça te permet de travailler sur des tableaux PHP et donc de ne pas avoir besoin de savoir combien tu as des valeurs.

    Si tu es sûr que ton problème est sur l'écriture du code PHP, alors explique nous ce que doit faire le code au final, ça sera plus clair pour voir le problème.
    Ce que je ne vois pas bien, c'est pourquoi tu as besoin de connaître le numéro de la ligne puisque visiblement tu fais les insertions une par une en ajax.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Imaginons une table dans laquelle, j'ai 20 membres d'une équipe telle que :

    nbmatch / nom_1 / sex_1 / age_1 / nom_2 / sex_2 / age_2 / ..................................nom_20 / sex_20 / age_20

    J'ai donc besoin d'envoyer via Ajax, la valeur de l'input ou du select par exemple nom_5 dans ma table SQL la ou le champ 'nom_5' existe...

    Voila pourquoi j'ai besoin d'identifier le nom de l'imput par 'nom_X', tout simplement

    du coté de SQL j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    		$champ = @$_GET["champ"];	
    		$valeur = @$_GET[$champ];
    		$v_var="`$champ` = '$valeur'";
    		$modif=mysql_query("UPDATE `toto` SET $v_var WHERE `idC`='$idC'");

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as une table avec les colonnes nom_1, sex_1, age_2 etc. jusqu'à 15 ? C'est bien ça ?
    Si c'est ça où va aller ton 16ème membre ? c'est ça ton problème peut etre d'ailleurs non ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Oui c'est ça ..
    Actuellement ma table s'arrete au 15eme membre, mais je vais rajouter les champs dans ma table pour arrêter au 20.

    Non mon probleme est comment recuperer les données dans ma table et les lire sur des champs qui sont normalement affichés que si on clique sur un bouton

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Bon déjà cette structure horizontale des données est une mauvaise structure : si tu veux 21 membres tu ne peux pas sans modifier la base et le code PHP, si tu ne renseignes que 16 membres, tu as des colonnes qui ne servent pas.

    Concernant l'envoi, comme je te l'ai dis, le mieux est d'utiliser un envoi en tableau sex[xxx], nom[xxx] plutôt que sex_xxx et nom_xxx de façon a récupérer à l'arrivée des tableaux PHP indexés par le numéro du membre.

    Concernant la requête que tu nous montres où le nom de la colonne est fourni directement par $_GET, c'est une horreur de sécurité.
    Mais si tu en arrives là c'est aussi à cause du premier point : la structure horizontale est un écueil.

    Concernant l'interface, si tu veux faire un envoi de tous les membres d'un coup, est-ce qu'il y a vraiment un interêt à utiliser une requête Ajax ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Merci pour tes réponses, mais je suis complétement largué par celles-ci.

    En fait je ne comprends pas ce que tu me dis, j'ai du mal expliquer ce que je recherche.

    Oublions les 15 ou 16 personnes.

    1 - Pour chaque match, j'ai un tableau de joueurs avec des détails sur ceux ci
    2 - Au lieu d'afficher de suite les 20 lignes des 20 joueurs max possibles, je souhaiterai afficher une premiere ligne pour le premier joueur, puis donner la possibilité d'ajouter d'autres joueurs, 1 aprés l'autre et donc ses infos en details qui vont avec.

    3 - En remplissant chaque champ de chaque ligne, j'envoi sa valeur par ajax en sauvegarde dans la BDD

    4 - Plus tard quand je veux rappeler la fiche de ce match, je veux pouvoir afficher toutes les lignes de tous les joueurs que j'avais deja enregistrés, et pouvoir modifier eventuellement le contenu des champs de détails des differents joueurs.

    J'ai besoin de garder la methode de sauvegarde par Ajax.

    Par contre si j'ai des failles de securité , je suis preneur de toute modification :-D

    J'espère avoir été un peu plus précis dans mes explications

    Merci d'avance pour ton acharnement a vouloir m'aider

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    D'accord, garde quand même en mémoire que ta structure de base de données et mauvaise.
    Donc ton blocage est sur laquelle des 4 étapes ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Si elle est mauvaise, je reprendrai avec plaisir une feuille blanche pour améliorer tout ça.

    Mon probleme est a l'étape 4 ...

    Comment faire en sorte que je puisse rappeler les valeurs des champs précédemment sauvegardés en affichant les lignes sans devoir cliquer sur un bouton .

    merci pour ta patience.

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ta structure actuelle ne permet pas d'avoir une vraie lecture dynamique des résultats.
    Actuellement tu fais une boucle à 15 mais c'est une valeur que tu as définie manuellement.
    Quand tu vas passer à 20, ça sera aussi une limite que tu fixes manuellement dans la base de données, donc ton code devra passer à 20 manuellement/

    Artificiellement tu peux faire ta boucle en lisant de 1 à l'infini tant que la colonne nom_xxx vaut quelque chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $rescred = mysql_query("SELECT * FROM `toto` where idC='$idc' order by idCR asc");
    $i = 1;
    while($clcred = mysql_fetch_array($rescred, MYSQL_ASSOC) && !empty($clcred['nom_'.$i]))
        {
         echo '<div class="form-group normal">';
          ....
          ....
         ++$i;
     }
    Mais ça reste une gros bricolage.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Donc dans l'absolu il faudrait que je reparte a partir d'ou pour faire un code qui ne devienne pas du bricolage ?

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut revoir la structure de la base de données.
    Par exemple si ce sont des équipes, il faut une table "joueur" qui contient les infos sur chaque joueur, une table "equipe" qui contient des données sur chaque équipe et une table "joueur_equipe" qui indique uniquement quel joueur va dans quel equipe.

    Avec cette structure, ta base est relationnelle et il n'y a plus de limite au nombre de joueurs ni en maximum ni en minimum, c'est ton application qui gère.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Xml datasource Probleme de lecture des données
    Par gazzall dans le forum Jasper
    Réponses: 1
    Dernier message: 29/03/2007, 11h18
  2. Réponses: 1
    Dernier message: 21/03/2007, 16h43
  3. Réponses: 1
    Dernier message: 29/11/2006, 12h00
  4. pb de lecture des données fichier .ini
    Par peppena dans le forum C
    Réponses: 5
    Dernier message: 12/06/2006, 17h45
  5. [JList] Lecture des données sauvegardées dans un fichier
    Par Myogtha dans le forum Composants
    Réponses: 7
    Dernier message: 10/06/2004, 21h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo