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

Langage PHP Discussion :

Ajouter une ligne dans un formulaire et incrémenter les valeurs


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    monétique
    Inscrit en
    Février 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : monétique

    Informations forums :
    Inscription : Février 2020
    Messages : 11
    Points : 2
    Points
    2
    Par défaut Ajouter une ligne dans un formulaire et incrémenter les valeurs
    Bonjour,
    Je préviens je suis assez néophyte en la matière

    Je cherche à réaliser un script pour faciliter l'ajout de tableaux dans un Mediawiki.
    L'idée est via un formulaire HTML de remplir les champs pour ensuite générer un code Mediawiki qu'il n'y aura plus qu'à copier coller dans l'édition de la page Mediawiki.
    Jusque là ça va et ça fonctionne. Voici le code :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?php
    if (isset($_REQUEST['save'])) {
    	$inputs = filter_input_array(INPUT_POST, array(
    		'page_name' => FILTER_SANITIZE_ENCODED,
    		'leftcol' => FILTER_SANITIZE_ENCODED,
    		'rightcol' => FILTER_SANITIZE_ENCODED,
    		'image_format' => FILTER_SANITIZE_ENCODED,
    		'line_content' => FILTER_UNSAFE_RAW,
    	));	
     
    	$page_name = $inputs['page_name']; 
    	$leftcol = $inputs['leftcol']; 
    	$rightcol = $inputs['rightcol']; 
    	$image_format = $inputs['image_format']; 
    	$line_content = $inputs['line_content']; 
     
    	echo '<pre>
    	{| align="center" width="90%" " border="1" cellspacing="0" cellpadding="5"
    	!&lt;center&gt;';echo "$leftcol";echo'&lt;/center&gt
    	!width="95%"|&lt;center&gt';echo"$rightcol";echo'&lt;/center&gt
    	|------------------------------------------------------------
    	|[[image:';
    	echo"$page_name";echo '_01.';echo "$image_format";echo']]
    	|';echo"$line_content";echo'
    	|------------------------------------------------------------
    	|}
    	</pre>';
    }
     
    ?>
     
    <form method="post">
    <fieldset>
    	<p><label for="page_name">Nom de la page : </label><input type="text" name="page_name" id="page_name" /></p>
    	<p><label for="leftcol">Colonne de gauche : </label><input type="text" name="leftcol" id="leftcol" /></p>
    	<p><label for="rightcol">Colonne de droite : </label><input type="text" name="rightcol" id="rightcol" /></p>
    	<p>
    		   Indiquer le format des images :<br />
    		   <input type="radio" name="image_format" value="jpg" id="jpg" /> <label for="jpg">.jpg</label><br />
    		   <input type="radio" name="image_format" value="png" id="png" /> <label for="png">.png</label><br />
    		</p>
    	<label for="line_content">Contenu de la ligne</label><textarea name="line_content" id="line_content"></textarea>
    </fieldset>
    <fieldset>
    	<input type="submit" name="save" value="G&eacute;n&eacute;rer" />
    	<input type="reset" value="Reinitialiser" />
    </fieldset>
    </form>
    Là où ça se complique c'est que je voudrais faire en sorte de mettre un bouton qui permet de rajouter une ligne au tableau (donc rajouter un champ textarea) et rajouter +1 au nom du fichier image
    Ce qui ferait ajouter au texte affiché lors de la validation du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    |[[image:';
    	echo"$page_name";echo '_02.';echo "$image_format";echo']]
    	|';echo"$line_content2";echo'
    	|------------------------------------------------------------
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    |[[image:';
    	echo"$page_name";echo '_03.';echo "$image_format";echo']]
    	|';echo"$line_content3";echo'
    	|------------------------------------------------------------
    Et là j'avoue que je galère donc si quelqu'un peut m'éclairer ça serait top
    En espérant avoir été clair dans les explications

    Bien cordialement.

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    Salut,

    Est-ce que la page doit être rechargée au moment du clic sur le bouton qui ajoute des lignes au tableau ou non ?

  3. #3
    Candidat au Club
    Homme Profil pro
    monétique
    Inscrit en
    Février 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : monétique

    Informations forums :
    Inscription : Février 2020
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Honnêtement peu importe. C'est juste un script qui sera utilisé en local. Donc ça sera en fonction de ce qui est le plus simple à réaliser.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    ça ne sert à rien de mettre des echo partout : ça devient illisible.
    Autant :
    • construire l'output avec la syntaxe Heredoc (en mettant les varaibles PHP entre accolades {$var})
    • afficher à la fin

    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
    21
    // -----------
    // Construction output
    	$output = <<<HTML
    	{| align="center" width="90%" border="1" cellspacing="0" cellpadding="5"
    	!&lt;center&gt;{$leftcol}&lt;/center&gt
    	!width="95%"|&lt;center&gt{$rightcol}&lt;/center&gt
    	|------------------------------------------------------------
    HTML;
    // syntaxe Heredoc : https://www.php.net/manual/fr/language.types.string.php#language.types.string.syntax.heredoc
    // important : la ligne contenant l'identifiant de fin (ici : HTML) ne doit contenir aucun autre caractère, mis à part un point-virgule (;).
     
    	$output .= <<<HTML
    	|[[image:
    	{$page_name}_01.{$image_format}]]
    	|{$line_content}
    	|------------------------------------------------------------
    	|}
    HTML;
    // -----------
    // Affichage
    	echo '<pre>'.$output.'</pre>';
    Si on veut rajouter un morceau de code, il suffit de l'écrire entre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	$output .= <<<HTML
     
    HTML;
    important : la ligne contenant l'identifiant de fin (ici : HTML) ne doit contenir aucun autre caractère, mis à part un point-virgule (.
    HTML; : Bien vérifier qu'il n'y a RIEN AVANT, mais aussi RIEN APRÈS ! (pas d'espace ni tabulation)
    Dernière modification par Invité ; 04/02/2020 à 11h03.

  5. #5
    Candidat au Club
    Homme Profil pro
    monétique
    Inscrit en
    Février 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : monétique

    Informations forums :
    Inscription : Février 2020
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,

    ça ne sert à rien de mettre des echo partout : ça devient illisible.
    J'avoue que ça ne me plaisait pas non plus. Merci beaucoup pour ce tuyaux je vais regarder de plus prêt cette syntaxe.
    Cependant ça ne résout pas le problème d'ajout de ligne

  6. #6
    Invité
    Invité(e)
    Par défaut
    Au cas où la syntaxe Heredoc ne "te plaise" pas , de simples concaténation fonctionnent :

    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
    // Construction output
    	$output = '
    	{| align="center" width="90%" border="1" cellspacing="0" cellpadding="5"
    	!&lt;center&gt;' . $leftcol . '&lt;/center&gt
    	!width="95%"|&lt;center&gt' . $rightcol . '&lt;/center&gt
    	|------------------------------------------------------------
    '; 
     
    	$output .= '
    	|[[image:
    	' . $page_name . '_01.' . $image_format . ']]
    	|' . $line_content . '
    	|------------------------------------------------------------
    	|}
    '; 
    // -----------
    // Affichage
    	echo '<pre>'.$output.'</pre>';

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par JonCrc Voir le message
    Cependant ça ne résout pas le problème d'ajout de ligne
    Ben si.

    Tel qu'est construit $output, on peut lui rajouter "des bouts de code" avant affichage.
    Dernière modification par Invité ; 04/02/2020 à 11h07.

  8. #8
    Candidat au Club
    Homme Profil pro
    monétique
    Inscrit en
    Février 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : monétique

    Informations forums :
    Inscription : Février 2020
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Au cas où la syntaxe Heredoc ne "te plaise" pas , de simples concaténation fonctionnent :
    Effectivement il y a comme un soucis avec cette syntaxe sur Notepad++
    ça me parait pas plus mal comme ça. Merci !

  9. #9
    Invité
    Invité(e)
    Par défaut
    En fait NON, il n'y a pas de souci avec Notepad++.
    C'est juste que j'avais mis un espace APRÈS le point-virgule :
    Ce qu'il ne faut pas faire... (j'ai corrigé mon précédent message)

    C'est une des raisons pour lesquels j'ai dit que cette syntaxe pouvait "ne pas plaire"... (une erreur bête... et invisible * !!)

    * Cela dit, on s'en rend compte à la mauvaise coloration syntaxique...

  10. #10
    Candidat au Club
    Homme Profil pro
    monétique
    Inscrit en
    Février 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : monétique

    Informations forums :
    Inscription : Février 2020
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    En fait NON, il n'y a pas de souci avec Notepad++.
    C'est juste que j'avais mis un espace APRÈS le point-virgule
    Holly Sh...
    Ok ça marche mais je crois que je vais rester sur la 2ème option
    Maintenant faut que je vois comment faire le bouton qui va ajouter un textarea et faire rajouter le contenu dans l'output

  11. #11
    Candidat au Club
    Homme Profil pro
    monétique
    Inscrit en
    Février 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : monétique

    Informations forums :
    Inscription : Février 2020
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    J'ai avancé un petit peu.
    J'ai utilisé javascript pour faire ajouter un champ de texte via un bouton.
    Reste que je n'arrive pas à trouver comment faire le lien avec le PHP pour aller chercher les valeurs de chacun des champs pour incrémenter les lignes
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    <script type="text/JavaScript">
    <!--
    function addLine(line_id) {
       try {
          var conteneur = document.getElementById(line_id);
     
          var paragraphe = document.createElement('p');
     
        var ligne = document.createElement('textarea');
            ligne.setAttribute('name','line_content[]');
    		ligne.setAttribute('id','line_content[]');
     
        paragraphe.appendChild(ligne);
        conteneur.appendChild(paragraphe);
       }
       catch(e) {
           alert(e);
        }
    }
    -->
    </script>
     
    <?php
    if (isset($_REQUEST['save'])) {
    	$inputs = filter_input_array(INPUT_POST, array(
    		'page_name' => FILTER_SANITIZE_ENCODED,
    		'leftcol' => FILTER_SANITIZE_ENCODED,
    		'rightcol' => FILTER_SANITIZE_ENCODED,
    		'image_format' => FILTER_SANITIZE_ENCODED,
    		'line_content' => FILTER_UNSAFE_RAW,
    	));	
     
    	$page_name = $inputs['page_name']; 
    	$leftcol = $inputs['leftcol']; 
    	$rightcol = $inputs['rightcol']; 
    	$image_format = $inputs['image_format']; 
    	$line_content = $inputs['line_content']; 
     
    	$output = '
    	{| align="center" width="90%" border="1" cellspacing="0" cellpadding="5"
    	!&lt;center&gt;' . $leftcol . '&lt;/center&gt
    	!width="95%"|&lt;center&gt' . $rightcol . '&lt;/center&gt
    	|------------------------------------------------------------
    '; 
    	$image_number=1;
    	$output .= '	|[[image:' . $page_name . '_' . $image_number++ .'.' . $image_format . ']]
    	|' . $line_content . '
    	|------------------------------------------------------------
    '; 
    	echo '<pre>'.$output.'	|}</pre>';
     
    }
    ?>
     
    <form method="post">
    <fieldset>
    	<p><label for="page_name">Nom de la page : </label><input type="text" name="page_name" id="page_name" /></p>
    	<p><label for="leftcol">Colonne de gauche : </label><input type="text" name="leftcol" id="leftcol" /></p>
    	<p><label for="rightcol">Colonne de droite : </label><input type="text" name="rightcol" id="rightcol" /></p>
    	<p>
    		   Indiquer le format des images :<br />
    		   <input type="radio" name="image_format" value="jpg" id="jpg" /> <label for="jpg">.jpg</label><br />
    		   <input type="radio" name="image_format" value="png" id="png" /> <label for="png">.png</label><br />
    		</p>
    	<div><p><label for="line_content[]">Contenu de la ligne : </label><textarea name="line_content[]" id="line_content[]"></textarea></div>
     
      <div id = "ligne_sup"></div>	
     
      <p onclick="addLine('ligne_sup')" style="text-decoration:underline; cursor:pointer">Ajouter une ligne</p>
    </fieldset>
    <fieldset>
    	<input type="submit" name="save" value="G&eacute;n&eacute;rer" />
    	<input type="reset" value="Reinitialiser" />
    </fieldset>
    </form>

  12. #12
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    Ok, ta fonction est bien là mais impossible de faire la liaison entre javascript et php sans passer par l'objet XMLHttpRequest en javascript pur, ou bien les fonctions $.ajax, $.post, $.get de jQuery.

    Puis avec cette ligne là :ligne.setAttribute('id','line_content[]');, à chaque fois tu ajoutes une ligne avec le même id line_content[] hors qu'un id doit être unique dans une page html.

    Je pense que tu n'as pas besoin d'attribuer des id, seulement le name et une classe suffiront.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    @Toufik83
    De ce que je comprends, on n'a pas besoin d'Ajax ici.
    Il s'agit juste d'ajouter dynamiquement des champs de saisie (<input> ou <textarea>) au formulaire HTML *.

    Le traitement PHP se fera après soumission du formulaire.

    Citation Envoyé par JonCrc Voir le message
    ...je voudrais faire en sorte de mettre un bouton qui permet de rajouter une ligne au tableau (donc rajouter un champ textarea) et rajouter +1 au nom du fichier image
    * Le principe est le même qu'ici : https://codepen.io/jreaux62/pen/wvwMZwL

  14. #14
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    jreaux62 oui, une variable $_SESSION fera l'affaire..., mais je veux qu'il apprenne à utiliser un XMLhttpRequest...

  15. #15
    Invité
    Invité(e)
    Par défaut
    Non plus.
    Pas besoin de $_SESSION non plus.
    Pour quoi faire ?

    A moins que je n'ai pas compris la problématique... ?

  16. #16
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    Bon je vais essayer d'expliquer ce que j'ai compris :
    D'après son dernier code, il a utilisé une variable $image_number=1; et cette variable est sensée être incrémenter à chaque appelle de script pour l'utiliser ensuite dans les images, la question est comment doit-il sauvegarder la dernière valeur de $image_number sans passer par une variable $_SESSION ou un input hidden ?

  17. #17
    Invité
    Invité(e)
    Par défaut
    Un attribut data-* suffit.

    Cela dit, on n'a pas besoin de "numéroter", à partir du moment où on met des name avec des crochet : name="champ1[]".
    L'incrémentation est alors automatique.
    Au moment du traitement PHP, on récupère des array.

  18. #18
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    Lol, mais l'attribut data-x n'est pas récupéré par php , a moins que tu veux qu'il n'utilise plus son fichier php.

  19. #19
    Invité
    Invité(e)
    Par défaut
    C'est toi qui n'a pas compris...
    Notamment la chronologie des évènements.

    Si JonCrc veut bien ré-expliquer...

    N.B. J'ai essayé d'aller sur MediaWiki, et cliquer sur Learn how to edit a page, mais la page semble en "maintenance"...

    Du coup, je ne comprends pas le rapport entre l'ajout d'un <textarea> et la numérotation d'une "image" ?
    Dernière modification par Invité ; 05/02/2020 à 13h13.

  20. #20
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Du coup, je ne comprends pas le rapport entre l'ajout d'un <textarea> et la numérotation d'une "image" ?
    , c'est ce qui m'interpelle aussi .
    Peut être que j'ai raté quelque chose..., et je voudrais bien avoir tort...

Discussions similaires

  1. ajouter une ligne dans un tableau et afficher la valeur d'une variable
    Par dede94 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 03/05/2010, 17h24
  2. Réponses: 9
    Dernier message: 15/06/2008, 11h13
  3. Ajouter une ligne dans un Stringgrid
    Par jouze dans le forum Composants VCL
    Réponses: 6
    Dernier message: 20/02/2006, 21h40
  4. Ajouter une ligne dans un DBGrid
    Par jbaers dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/11/2005, 09h18
  5. Ajouter une ligne dans une liste via un POPUP
    Par seblo_scoqi dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/01/2005, 16h20

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