8791 sujets

Développement web côté serveur, CMS

Bonjour,

Je dispose du formulaire suivant qui appelle une page "actutest.php".


<form name="formulaire" method="post" action="actutest.php">
    <p>
    <label for="dateActu">Date à laquelle se déroule l'actualité</label> 
    <input type="date" name="date" size="30"/>
    </p>
    <p>
    <label for="lieuActu">Lieu où se déroule l'actualité</label> 
    <input type="text" name="lieu"  size="30"/><br/>     
    </p>
    <p>
    <label for="intActu">Nom de l'intervenant</label> 
    <input type="text" name="intervenant" size="30"/><br/>
    </p>
    <p>
    <label for="sujetActu">Sujet de l'actualité</label> 
    <input type="text" name="sujet" size="30"/><br/>
    </p>
    <p>
    <input type="submit" value="Soumettre">   
    </p>
    </form>


Sur cette page actutest.php, je souhaite faire apparaitre chaque champ du formulaire dans une cellule de tableau différente (exemple : Date à gauche, Lieu à sa droite, Nom à sa droite et Sujet à sa droite).

J'ai essayé d'effectuer un foreach avec le code suivant :

<td><?php foreach($_POST as $dateActu=>$date){
        echo '- '.$date.'<br/>';
        }?></td>


Seulement au lieu d'afficher seulement ma date dans une cellule, le foreach me retourne toutes les informations contenues dans mon formulaire.

Je ne comprend pas très bien et j'ai encore beaucoup de mal avec cette histoire de _POST en array et la fonction foreach.

Si quelqu'un pourrait me donner un petit coup de main, ça serait génial.

Merci d'avance.

PS : Je suis conscient que je devrais générer automatiquement mes <td> dans le php et non pas simplement inclure le code dans des <td>.

PS2 : Je suis dans l'optique de ne pas utiliser de BDD pour l'instant mais d'utiliser les sessions étant donné que seul l'admin aurait accès à ce formulaire.
Modifié par georgelarace (22 Apr 2013 - 20:50)
Edit : Je viens de trouver comment afficher chaque Variable avec <td><?php echo $_POST['donnees'] ?></td> et je n'ai donc, à priori, plus besoin du foreach.

Cependant je souhaite créer plusieurs actualités, donc que mon formulaire génère plusieurs actus (c'est-à-dire archive les données du formulaire rempli) au lieu de remplacer la même à chaque fois.

Comment dois-je faire ça, dois-je créer plusieurs formulaires ?

Une autre question : comment puis-je générer l'ajout de <td> au lieu d'imbriquer le php dans les <td>.

Merci.
Modifié par georgelarace (18 Apr 2013 - 11:44)
georgelarace a écrit :

Cependant je souhaite créer plusieurs actualités, donc que mon formulaire génère plusieurs actus (c'est-à-dire archive les données du formulaire rempli) au lieu de remplacer la même à chaque fois.

Comment dois-je faire ça, dois-je créer plusieurs formulaires ?


Surtout pas plusieurs formulaires. Tu as un formulaire et tu peux lui ajouter un champs "action" qui va prendre les valeurs "edit" ou "insert". Quand "action" vaut "insert" tu sauves une nouvelle entrée (dans un fichier ou dans ta base de données) et quand "action" vaut "edit" tu charges les données existantes pour les modifier (il te faudra aussi un champs contenant l'identifiant de ton enregistrement).

georgelarace a écrit :

Une autre question : comment puis-je générer l'ajout de &lt;td&gt; au lieu d'imbriquer le php dans les &lt;td&gt;.


Imbriquer ton code PHP dans le HTML est la bonne façon de faire pour garder une bonne séparation entre les deux langages.

Tu peux faire quelque chose comme ça :


<table>

  <?php foreach ($_POST as $element) : ?>

  <tr>
    <td><?php echo $element; ?></td>
  </tr>

  <?php endforeach; ?>

</table>


Pour ajouter des labels il suffit de créer un tableau contenant tes labels et qui aura comme clés les nom de tes champs.



<?php
$labels = array(
  'date' => 'La date',
  'machin' => 'Le machin',
  'bidule' => 'Le bidule',
);
?>

<table>

  <?php foreach ($_POST as $key => $value) : ?>

  <tr>
    <td><?php echo $labels[$key]; ?></td>
    <td><?php echo $value; ?></td>
  </tr>

  <?php endforeach; ?>

</table>

Modifié par jb_gfx (18 Apr 2013 - 13:34)
Merci pour ta réponse jb_gfx !

J'ai réussi ce que je voulais faire avec trois fichiers :

- FORM.php où j'ai mon formulaire dont l'action pointe vers INSERT.php

- INSERT.php qui se connecte à la base de données et qui "insert" les champs du formulaire dans la table

- ACTU.php où les infos de la table s'affichent

Le soucis qui me coince un peu réside dans le dernier fichier.

Je vous joins un screenshot pour que vous visualisiez ceci.

upload/49139-screenalsa.jpg

Le soucis est donc le suivant : toutes les actus (ici au nombre de 3) s'affichent dans la même cellule du tableau, or, je souhaite que chaque actu s'affiche sur une ligne à chacune d'entre elle.

J'utilise pour l'instant la fonction
mysqli_fetch_array($result)
et j'ajoute chaque ligne dans un <td>.

J'aimerais également afficher un nombre limité d'actus par rapport à ce qu'il y'a dans la base de données, ex : les dernières 30 actualités maxi (je vois à peu près comment faire avec l'auto increment mais je ne vois pas comment rédiger ça).

La solution est surement très simple mais j'ai encore un peu de mal à résoudre mes problèmes seul avec PHP Smiley biggrin .

Merci !
Modifié par georgelarace (18 Apr 2013 - 15:57)
<?php
        $con=mysqli_connect();
        // Check connection
        if (mysqli_connect_errno())
          {
          echo "Failed to connect to MySQL: " . mysqli_connect_error();
          }
        ?>

        <table class="table table-hover table-bordered table-striped sortable">
        <tbody>
        <tr>
        <th>Date</th>
        <th>Lieu</th>
        <th>Intervenant</th>
        <th>Sujet</th>
        </tr>
        <tr>

        <td>
        <?php $result = mysqli_query($con,"SELECT * FROM actu");

        while($row = mysqli_fetch_array($result))
          {
          echo $row['date'];
          } ?>
        </td>

        <td>
        <?php $result = mysqli_query($con,"SELECT * FROM actu");

        while($row = mysqli_fetch_array($result))
          {
          echo $row['lieu'];
          } ?>
        </td>

        <td>
        <?php $result = mysqli_query($con,"SELECT * FROM actu");

        while($row = mysqli_fetch_array($result))
          {
          echo $row['intervenant'];
          } ?>
        </td>

        <td>
        <?php $result = mysqli_query($con,"SELECT * FROM actu");

        while($row = mysqli_fetch_array($result))
          {
          echo $row['sujet'];
          } ?>
        </td>
        </tr>
        </tbody>
        </table>

        <?php mysqli_close($con); ?>

Modifié par georgelarace (18 Apr 2013 - 20:20)
En fait pour être plus concis, ce que je veux faire c'est retourner une ligne du tableau pour chaque entrée dans la table de données.
J'ai réussi à faire ce que je voulais grâce au code suivant, si ça peut intéresser quelqu'un :

        <?php
        mysql_connect("", "", "");
        mysql_select_db("");
          
        $reponse = mysql_query("SELECT * FROM actu") or die(mysql_error());
         
        mysql_close(); ?>
 
        <table class="table table-hover table-bordered table-striped sortable">
 
        <thead>
        <tr>
            <th><h3>Les actualités</h3></th>
        </tr>
        <tr>
                <th>Date</th>
                <th>Lieu</th>
                <th>Intervenant</th>
                <th>Sujet</th>
        </tr>
        </thead>
        
        <tbody>
        <?php
        while($donnees = mysql_fetch_array($reponse)) {
        ?>
 
        <tr>
        <td><?php echo $donnees['date']?></td>
        <td><?php echo $donnees['lieu'];?></td>
        <td><?php echo $donnees['intervenant']?></td>
        <td><?php echo $donnees['sujet']?></td>
        </tr>
        <?php
        }?>
 
        </tbody></table>

        </div>

Modifié par georgelarace (22 Apr 2013 - 17:48)
Pas de soucis, c'est déjà cool de m'avoir répondu.

Juste pour info, je souhaite qu'un admin qui pourra se logguer puisse supprimer des champs contenus dans le tableau précédemment créé, comment est-ce que je pourrais procéder ?