Bonjour,

Voila je rencontre un petit problème avec mon code.

Je ne suis encore qu'un débutant en php. Dans ce script j'ai pour objectif de faire rentrer à un utilisateur l'adresse de sa base de données ( pour commencer localhost) le login et le mot de passe.

Je n'ai aucun soucis lorsque je rentre moi même l'adresse et le login (le $_POST du mdp est commenté parce que je n'ai pas de mot de passe sur mon localhost, c'est pour faire des tests dans un premier temps).

J'utilise donc des variables pour récupérer les name de mon formulaire en utilisant des $_POST.

Sauf que lorsque je rentre les informations de connection dans mon formulaire que je clic sur mon boutton pour exécuter mon formulaire, j'ai n'ai rien qui s'affiche dans la page ciblée. Pas de message d'erreur ni de liste de bases de données.

Mon objectif à terme étant de mettre les bases de données avec des checkbox pour effectuer des backups de bases de données sélectionnées.

Mais du coup je bute sur ces variables dans mon PDO. Je ne trouve pas de solutions sur internet, je cherche depuis ce matin mais je ne trouve aucun script avec des PDO contenant des variables..

Voici mon code : (le PHP est au bas de mon code)

<!DOCTYPE html>

<html style="background: #e9e9e9">

    <head>

        <meta charset="utf-8" />
        <title>FTP</title>

        <link rel="stylesheet" href="..\Accueil\assets\font-awesome-4.6.3\css\font-awesome.min.css" />
        <link rel="stylesheet" href="..\bootstrap-3.3.7-dist\css\bootstrap.min.css" />
        <link rel="stylesheet" href="../Accueil/assets/css/styles.css" />

        <style>
            ul {
              list-style:none;
            }

            #center {
              text-align: center;
            }

            form li {
              margin-bottom: 2%;
            }

        </style>

    </head>

    <body  style="background: #e9e9e9;">

      <nav id="colorNav">

          <ul class="center"  style="margin-bottom: 100px">
              <li class="green"><a href="Historique.php" class="fa fa-home fa-5x"></a>
                  <ul>
                      <li><a href="..\Connexion\Connexion.php">Page Connexion</a></li>
                  </ul>
              </li>

              <li class="red"><a href="#" class="fa fa-database fa-5x"></a>
                  <ul>
                      <li><a href="historique.php">Historique</a></li>
                  </ul>
              </li>
          </ul>

      </nav>

      <div>

            <form action="test.php" method="post" style="background-color: #e9e9e9">

                <ul style="margin-left: 38%">

                    <li>
                      <div>
                        <label for="adresse">Adresse :</label>
                        <div  position="center">
                          <input class="form-control" type="text" id="adresse" placeholder="Entrez l'adresse" style="width: 400px" name="adress" required>
                        </div>
                      </div>
                    </li>

                    <li>
                        <div>
                          <label for="port">Port :</label>
                          <div>
                            <input class="form-control" type="text" id="port" placeholder="Entrez le port" style="width: 400px" name="port">
                          </div>
                        </div>
                    </li>

                    <li>
                        <div>
                            <label for="login">Login :</label>
                            <div>
                              <input class="form-control" type="text" id="login" placeholder="Entrez votre identifiant" style="width: 400px" name="login" required>
                            </div>
                          </div>
                      </li>

                    <li>
                      <div>
                        <label for="pwd">Mot de passe :</label>
                        <div>
                          <input class="form-control" type="password" id="pwd" placeholder="Entrez votre mot de passe" style="width: 400px" name="mdp" >
                        </div>
                      </div>
                    </li>

                    <li  style="margin-left: 15%">
                      <div>
                        <div>
                          <button type="submit" class="btn btn-success" name="button">Exécuter</button>
                        </div>
                      </div>
                    </li>

                </ul>

            </form>

      </div>

        <?php

                    if (!empty($button)){

                        $adress = $_POST["port"];
                        //$port = $_POST["port"];
                        $login = "root";
                        $mdp = $_POST["mdp"];
                        //$button = $_POST["button"];

                        $db = new PDO('mysql:host=' . $adress,  $login,  $mdp);
                        $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
                        $q = $db->query('SHOW DATABASES');
                        $databases = $q->fetchAll();

                        foreach($databases as $database){
                            $database_name = $database->Database;
                            echo '<form action="test.php" method="post" ><ul><li>';
                            var_dump($database_name); 
                            echo '<div style="text-align: center"><input type="checkbox" name="checkbox" id="ckb" required></div></li></ul></div>';

                        }
                    }
                ?>

          </body>

      </html>

Si vous avez une solutions ce serait vraiment top ! Je galère..

Merci d'avance :)

19 réponses


Nicolas Delage
Auteur
Réponse acceptée

YEEEES !
Mon problème est enfin résolu.. Tout ça pour quelque chose de si simple !

Il me suffisait de mettre mon code php dans la page ciblé par le action du form.. Je pense que c'est possible aussi en laissant tout le code dans la même page, mais en tout cas ça marche comme et c'est dejà super !

Merci beaucoup à tous pour votre aide et votre patience.. :)
(Je ne sais pas comment mettre le sujet comme résolu ou quelque chose du style par contre..)

Bonsoir,
Vous rentrez le "port" dans adresse. Donc il ne peut pas se connecter à la dite base

Erreur de ma part lorsque j'ai remodifié mon code afin de vous le soumettre.
J'ai enlevé l'erreur. Mais aucun changements..

if (!empty($button)){

                        $adress = $_POST["adress"];
                        //$port = $_POST["port"];
                        $login = "root";
                        $mdp = $_POST["mdp"];
                        //$button = $_POST["button"];

                        $db = new PDO('mysql:host=' . $adress,  $login,  $mdp);
                        $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
                        $q = $db->query('SHOW DATABASES');
                        $databases = $q->fetchAll();

                        foreach($databases as $database){
                            $database_name = $database->Database;
                            echo '<form action="test.php" method="post" ><ul><li>';
                            var_dump($database_name); 
                            echo '<div style="text-align: center"><input type="checkbox" name="checkbox" id="ckb" required></div></li></ul></div>';

                        }
                    }
                ?>

Il manque le nom de la base de données

Il n'y a pas besoin de nom de base de donné étant donné que je veux me connecter à mon serveur pour lister toutes les bases de données qui y sont présentes avec le SHOW DATABASE

Ah oui suis-je bête, tellement l'habitute de le renseigner.
Que donne un var_dump sur $db après la connexion à la bdd ?

Bonsoir

Si tu ajoutes ces deux lignes a ton code tu nas aucune erreur qui s'affiche ?

error_reporting(E_ALL);
ini_set('display_errors', 'On');

ton $boutonfait référence a quoi ? tu devrais faire ça dans un premier temps

if(isset($_POST['bouton'])){

}

@neecride bien vu
le code fonctionne chez moi, j'obtiens bien la liste des bases

Mon $button est là avec le empty pour que ça exécute le code lorsque l'on clique sur le boutton.
Et le $button que j'ai commenté été pour récupérer la valeur du name avec le $_POST, mais ça me semble inutile.

J'ai testé votre code en remplaçant la ligne du if, mais ça ne change rien.
Cela m'envoi toujours vers la page que j'ai renseigné dans le action présent en haut du formulaire, mais la page reste blanche..

Je viens de me rendre compte que mon !empty ne pouvait pas fonctionner étant donné que j'utilisé $button mais que je la déclarait après..

Du coup revoici mon code php modifié :

<?php

                    if(isset($_POST['button'])){

                        $address = $_POST["address"];
                        //$port = $_POST["port"];
                        $login = "root";
                        $mdp = $_POST["mdp"];

                        $db = new PDO('mysql:host=' . $address,  $login,  $mdp);
                        $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
                        $q = $db->query('SHOW DATABASES');
                        $databases = $q->fetchAll();

                        foreach($databases as $database){
                            $database_name = $database->Database;
                            echo '<form action="test.php" method="post" ><ul><li>';
                            var_dump($database_name); 
                            echo '<div style="text-align: center"><input type="checkbox" name="checkbox" id="ckb" required></div></li></ul></div>';

                        }
                    }
                ?>

Le 'button' dans le if en haut, fait référence au name de mon boutton.
J'ai enlevé le $button ensuite et le $port lui est commenté étant donné qu'on ne renseigne pas de port pour la connection en localhost.

Après pour le reste je bloque complet. Certes mon foreach est pas très beau mais bon, lorsque je renseigne directement mon adresse login et mdp dans le PDO ça fonctionne avec l'affichage de checkbox en dessous de chaque base ( pas très beau mais je m'en fiche pour le moment )
Mais dès que je passe par les variables j'ai aucun résultat..

Encore une chose dans ton setAttribute tu demande PDO::FETCH_OBJ ne devrais tu pas faire $databases = $q->fetchObject(); tu a fait un var_dump de ton $databases pour savoir si elle ne te sort pas des index.

Edite :

Pour moi ce code fonctionne laisse le fetchAll du coup.

 <?php

            if (isset($_POST['button'])){

                $adress = $_POST["port"];

                $login = "root";
                $mdp = $_POST["mdp"];

                $db = new PDO("mysql:host={$adress}",  $login,  $mdp);

                $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
                $q = $db->query('SHOW DATABASES');
                $databases = $q->fetchAll();

                var_dump($databases);
                die;

                foreach($databases as $database){
                    $database_name = $database->Database;
                    echo '<form action="test.php" method="post" ><ul><li>';
                    var_dump($database_name); 
                    echo '<div style="text-align: center"><input type="checkbox" name="checkbox" id="ckb" required></div></li></ul></div>';

                }
            }
        ?>

Je ne pense pas que le soucis viennent de là..

J'ai repris mon code :

<?php

            //if (isset($_POST['button'])){

                $address = 'localhost';

                $login = "root";
                $mdp = $_POST["mdp"];

                $db = new PDO("mysql:host={$address}",  $login,  $mdp);

                $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
                $q = $db->query('SHOW DATABASES');
                $databases = $q->fetchAll();

                foreach($databases as $database){
                    $database_name = $database->Database;
                    echo '<form action="test.php" method="post" ><ul><li>';
                    var_dump($database_name); 
                    echo '<div style="text-align: center"><input type="checkbox" name="checkbox" id="ckb" required></div></li></ul></div>';

                }
            //}
        ?>

J'ai commenté le if avec le boutton.
Du coup sur ma page, mes bases de données s'affichent comme je le souhaite avec des checkbox.

http://www.noelshack.com/2016-45-1478966680-screenshot-6.png

Mais du coup c'est lorsque je mets la condition concernant le bouton et que je veux récupérer mes données inscrites dans le formulaire pour que ça s'affiche dans l'autre page que ça ne fonctionne pas..

Désolé de répondre si tard à vos message Carouge 10 et Crisou.

-Un var dump sur $db ne change rien hormis l'affichage qui est légèrement différent.
-Et rajouter les deux lignes dans le code ne m'affiche aucune erreur, ça fait toujours la même chose..

Dans le foreach, tu ne fermes pas les formulaires
remplace /div par /form

Essaies tout simplement de remplacer :

<button type="submit" class="btn btn-success" name="button">Exécuter</button>

Par :

<input type="submit" class="btn btn-success" name="button" value="Exécuter">

Ta condition passera mieux de cette manière.

J'ai effectué les modifications sur mon script !
Mais ça ne fonctionnait toujours pas, alors j'ai continué mes recherches sur le net en ciblant les mots clés : 'exécuter un script php avec un bouton'

J'y ai trouvé une réponse qui résout partiellement mon problème.
Dans le form de mon formulaire html, j'ai mis action="test.php" (qui est la page cible). Je l'ai remplacé par :

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">

Du coup lorsque j'exécute mon script, cela me renvoi les bases de données au bas de la même page étant donnée que je n'ai plus de page cible. Est ce que je peux ajouter un deuxième paramètre avec test.php dans le action ? J'ai essayé, cela me met une erreur.. Parce que du coup, avec cette méthode, je n'arrive pas à faire afficher les bdd dans une autre page..

Que tu fasses :

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">

Ou :

<form action="" method="post">

C'est exactement la même chose, car si tu laisse la valeur de l'attribut action vide, ton formulaire sera soumis sur la page en cours, il n'y a donc aucun intérêt de rajouter du PHP dans du HTML pour en revenir à la même chose.

YEEEES !
Mon problème est enfin résolu.. Tout ça pour quelque chose de si simple !

Il me suffisait de mettre mon code php dans la page ciblé par le action du form.. Je pense que c'est possible aussi en laissant tout le code dans la même page, mais en tout cas ça marche comme et c'est dejà super !

Merci beaucoup à tous pour votre aide et votre patience.. :)
(Je ne sais pas comment mettre le sujet comme résolu ou quelque chose du style par contre..)