Partage
  • Partager sur Facebook
  • Partager sur Twitter

Création d'un Back-Office

PHP et Requêtes SQL

Sujet résolu
    22 janvier 2017 à 18:48:10

    Bonjour tout le monde,

    Je suis étudiante en informatique (première année), et je bloque sur un TP concernant la création d'une application web, du style "mini back-office" (qui permet de gérer une base de données via cette interface).

    Voilà, j'ai des contraintes :

    -> utiliser des boucles "for"; des tableaux ; "if", "else", "switch" ; des formulaires avec la méthode POST et les variables de SESSION ; isset et header; enfin, créer un fichier regroupant mes fonctions.

    Cette application doit avoir 4 fonctionnalités:

    Lorsque l'on s'est connecté, que la base est affichée (SELECT *), on doit pouvoir : 

    - trouver une zone de texte dans laquelle on écrit une requête, requête qui doit être envoyée à une fonction exécutant cette requête et affichant le résultat de cette requête.

    - supprimer un tuple sélectionné dans le tableau

    - saisir un tuple à insérer dans le tableau via un formulaire.

    - Mettre à jour une donnée de la base.

    A vrai dire, je ne me suis pas encore penchée sur la mise à jour. J'ai réussi l'insertion d'un tuple et aussi sa suppression.

    Mais je bloque sur la requête dans la zone de texte.

    J'ai créé ma zone de texte, une variable récupère la saisie et l'envoie dans une fonction. Cela fonctionne car lorsque je fais un "echo" de ma variable dans laquelle est stockée ma requête, la bonne requête s'affiche.

    Mais j'ai un problème avec l'affichage.

    Je sais que je dois compter le nombre de résultats retournés par la requête, pour créer ensuite un tableau dans lequel je stocke mes résultats. Mais je ne sais pas comment m'y prendre car je n'ai pas appris cela. J'ai essayé de chercher sur internet, mais je trouve des codes qui ne fonctionnent pas avec mon cas.

    Voici mon code :

    Dans ma page "index.php" :

    <p><h2>Saisir une requête :</h2></p>

          <form action="index.php" method="post">

                  <textarea name="requete" required placeholder="Entrez votre requête SQL ici"></textarea>

                  <input type="submit" value="Exécuter !" name="executer" class="acces"/>

         </form>

            <?php

                  if(isset($_POST['requete']))

                 {

                         execute($bdd,($_POST['requete']));

                 }

    Et voici ma fonction dans ma page "fonctionnalites.php" :

    <?php

              function execute($bdd,$requete)

              {

                        $i ;

                        $afficher = $bdd->query("$requete");

                        $compteurcol=$afficher->columnCount();

                                  if ($compteurcol==0)

                                  {

                                            echo "Cette requête a retourné un résultat vide.";

                                  }

                                  else

                                  {

    ?>

                                            <table border=1 align=center>

                                                      <tr align=center class="lignesprinc">

                                                                 <td>Film</td>

                                                                  <td>Salle</td>

                                                                  <td>Heure</td>

                                                                  <td>Sélection</td>

                                                      </tr>

    <?php

               if($compteurcol==1)

               {

                  for ($i=0; $i<$compteurcol; $i++)

                  {

                         switch ($donnees['i']) 

                         {

                                case 'Film':

                                echo $donnees['Film'];

                                break;

                                case 'Salle':

                                echo $donnees['Salle'];

                                break;

                                case 'Heure':

                                echo $donnees['Heure'];

                                break;

                                case 'id':

                                echo '<input type="checkbox" name="'.$donnees['id'].'" value="'.$donnees['Heure'].'"/>';

                                break;

                           }

                    }

            }

    }

    ?>

                                             </table>

    <?php

    }

    ?>

    Est-ce que quelqu'un pourrait m'aider, en m'indiquant comment compter les résultats, comment se servir de columnCount, et comment afficher les résultats, sachant que n'importe quelle requête SQL existante peut être saisie (SELECT, DELETE, UPDATE,...), s'il-vous-plaît ?

    Merci d'avance pour votre aide !

    -
    Edité par LucieTheret2 24 janvier 2017 à 15:01:12

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      22 janvier 2017 à 18:52:02

      Salut,

      Avant tout, édite ton message pour insérer ton code avec le bouton "</>" plutôt qu'en vrac, illisible.

      Ensuite, sers-toi plutôt des fonctions PDO::Prepare(...) et PDOStatement::Execute(...):

      https://secure.php.net/manual/en/pdo.prepare.php

      https://secure.php.net/manual/en/pdostatement.execute.php

      au lieu de seulement utiliser PDO::Query en injectant la requête dedans sans vérification.

      Ensuite, regarde du côté de la doc de PDO:

      https://secure.php.net/manual/fr/book.pdo.php

      Qui te fournit plein de fonctions utiles pour faire un peu tout ce que tu es en train d'essayer de faire.

      -
      Edité par Anonyme 22 janvier 2017 à 18:54:40

      • Partager sur Facebook
      • Partager sur Twitter
        22 janvier 2017 à 18:59:24

        D'accord merci, désolée c'est la première fois que je poste quelque chose ici, je ne connaissais pas ^^

        D'accord je vais regarder tout ça, merci beaucoup !!

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          22 janvier 2017 à 19:01:54

          (Edite ton message pour remettre proprement le code)

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            22 janvier 2017 à 20:44:04

            Non, utilise le bouton "</>"

            (Regarde les règles du forum sinon, si tu ne vois pas)

            • Partager sur Facebook
            • Partager sur Twitter
              22 janvier 2017 à 20:47:43

              Le bouton est le deuxième en partant de la droite dans la barre au dessus de là où tu rédiges ton message.

              Une fenêtre s'ouvre, t'invitant à choisir le langage, et à coller ton code dedans. Une fois fait, tu valides et ton code est mis en forme selon le langage choisi :)

              En éditant ton premier message, tu sélectionnes les lignes de codes que tu viens coller dans cette fameuse fenêtre.

              • Partager sur Facebook
              • Partager sur Twitter
              Kwo:re / topic OC | Aidez les autres, indiquez un sujet résolu ! | Vous êtes bloqué ? Suivez le guide ! | N'aide pas par MP
                24 janvier 2017 à 15:10:12

                Bonjour,

                J'ai avancé un peu dans mon code, et merci pour le lien j'ai maintenant trouvé le bouton ! ☺

                Il ne me manque plus que la mise à jour de ma base de données, en fait j'ai réussi à mettre à jour une ligne de mon tableau mais une fois la ligne mise à jour(avec l'id de la ligne que je voulais modifier), il insère la même ligne (avec un autre id). Je me retrouve donc avec ma ligne en double : celle que j'ai modifiée et une qui s'est insérée toute seule !

                Pour la requête, je laisse de côté pour l'instant car mon prof n'est pas sûr de nous la faire faire finalement !

                Voici mon code pour mon UPDATE:

                if(isset($_SESSION['pseudo'])) 
                {//Si cette variable existe, alors on est connecté
                 //[...] ICI il y a du code mais inutile pour la suite
                 //MISE A JOUR
                 if(isset($_POST['maj']))
                 {
                    foreach($_POST['ID'] as $value)
                    {
                       mettreajour($bdd, $value); 
                    }
                 }
                 if(isset($_POST['miseajour']))                                   
                 {
                   actualiserligne($bdd,$_POST['film'],$_POST['salle'],$_POST['heure'],$_POST['id']);           
                 }  
                }

                Sachant que les codes suivants sont dans des fonctions et concernent cela:

                <input type="submit" value="Mettre à jour !" name="maj" class="acces"/>

                et :

                <?php
                function mettreajour($bdd,$id)
                	{
                		$reponse=$bdd->query("SELECT * FROM `cinema` WHERE `id`='".$id."'");
                		while($donnees=$reponse->fetch())
                        {
                ?>
                			Modifier :
                			<form action=Back-Office.php method=post>
                				<p>
                               		<input type="text" name="film" value="<?php echo $donnees['Film'] ?>" required/>
                                	<input type="number" name="salle" value="<?php echo $donnees['Salle'] ?>" required/>
                                	<input type="time" name="heure" value="<?php echo $donnees['Heure'] ?>" required/>
                                	<input type="hidden" name="id" value="<?php echo $donnees['id'] ?>"/>
                                	<input type="submit" value="Mettre à jour !" class="acces" name="miseajour"/>
                           		</p>
                			</form>
                <?php
                		}
                	}
                
                	function actualiserligne($bdd,$film,$salle,$heure,$id)
                	{
                		$bdd->query("UPDATE `cinema` SET `Film`='".$film."',`Salle`='".$salle."',`Heure`='".$heure."' WHERE `id`='".$id."'");
                	}
                ?>



                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  24 janvier 2017 à 15:18:42

                  Artemix a écrit:

                  Ensuite, sers-toi plutôt des fonctions PDO::Prepare(...) et PDOStatement::Execute(...):

                  https://secure.php.net/manual/en/pdo.prepare.php

                  https://secure.php.net/manual/en/pdostatement.execute.php

                  au lieu de seulement utiliser PDO::Query en injectant la requête dedans sans vérification.

                  Sinon, rencontres-tu d'autres problèmes ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 janvier 2017 à 16:35:11

                    D'après un camarade, il s'agit de créer un tableau dans un tableau par rapport au nombre de colonnes que la requête nécessite. Je pense qu'il va pouvoir m'aider ☺

                    Je vous remercie quand même pour votre aide, bonne continuation à vous ! ☺

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Création d'un Back-Office

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown