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 :

valeur affichée au démarrage par le select


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 431
    Points : 5 785
    Points
    5 785
    Billets dans le blog
    1
    Par défaut valeur affichée au démarrage par le select
    Bonjour,

    je voudrais que le select de mon formulaire affiche au démarrage un veuillez saisir etc. Pour obtenir ça, j'ai crée une ligne echo '<option'.$selected.'>Veuillez saisir etc</option>'; et j'ai fait en sorte qu'au démarrage, selected soit activé : $selected = (empty($selected)) ? ' selected="selected"' : '';. Selon moi, au début selected est vide mais ensuite, l'utilisateur ayant sélectionné une valeur, non.
    Le code complet est :
    Code php : 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
    <form method="post" action=""> 
    <?php
    $id = (isset($_POST['id']))? ($_POST['id']) : 0;
    ?>
     
    <select id="id" name="id" onchange="submit();" style="width:200px;">
    <?php
    $var=$pdo->select('SELECT t.id FROM `tickets` t',[]);
    foreach( $var as $row )
    	{   
    		$selected = ($id == $row['id'])? ' selected="selected"' : '';
    		echo '	<option value="'.$row['id'].'"'.$selected.'>'.$row['id'].'</option>'."\n";
        }
        $selected = (empty($selected))  ? ' selected="selected"' : '';
        echo '<option'.$selected.'>Veuillez saisir etc</option>';
    ?>
    </select>
    </form>
    Mais je n'obtiens pas l'effet désiré sachant qu'au démarrage, le select affiche la dernière valeur retournée par le fetchAll (ligne 8). Comment j'aurais du faire ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Membre confirmé
    Homme Profil pro
    Déveleoppeur Web/Mobile
    Inscrit en
    Avril 2013
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Déveleoppeur Web/Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 330
    Points : 545
    Points
    545
    Par défaut
    Bonjour,

    Inspecte l'élément de ton select dans le navigateur pour vérifier qu'il a bien positionné l'attribut selected sur une seule option.
    Si le selected est bien positionné, c'est qu'il a du valider ta condition vérifiant la donnée POST

  3. #3
    Invité
    Invité(e)
    Par défaut
    Laurent........

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <select id="id" name="id" onchange="submit();" style="width:200px;">
    	<option value="0">veuillez saisir etc</option>
    <?php
    .....
    Dernière modification par Invité ; 05/11/2019 à 17h58.

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 431
    Points : 5 785
    Points
    5 785
    Billets dans le blog
    1
    Par défaut
    J'ai regardé le html généré (j'aurais du le faire avant de poster) et...le selected est positionné à toutes les lignes, sauf sur celle où il faudrait. Pourquoi ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  5. #5
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		$selected = ($id == $row['id'])? ' selected="selected"' : '';
    Comme je te l'ai déjà dit, $id NE PEUT PAS être égal à TOUS les $row['id'] (alors qu'ils sont tous différents) !
    C'est, logiquement parlant, IMPOSSIBLE !

    -> Je pense que tu dois avoir un autre bout de code (JS ?) quelque part qui ajoute dynamiquement ces selected...

    MONTRE LA TOTALITÉ DU CODE !
    Dernière modification par Invité ; 05/11/2019 à 17h58.

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 431
    Points : 5 785
    Points
    5 785
    Billets dans le blog
    1
    Par défaut
    T'as raison ; c'est impossible mais mon ordi ne le savait pas, donc il l'a fait !

    Le code complet :
    Code php : 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
    <html>
    <head>
    <!--<script>
    function twFermer() {
      window.close();
    }
    </script>-->
    </head>
    <body>
    <?php
    use classes\MYPDO\MYPDO;
    include(dirname(__DIR__).DIRECTORY_SEPARATOR."config".DIRECTORY_SEPARATOR."config.php");
    include(DIR_ROOT."classes".DIRECTORY_SEPARATOR."MYPDO.php");
    $pdo=new MYPDO();
    ?>
    <body>
    <h2>Get ticket Priority (2 SQL tables and a foreign key)</h2>
     
    <form method="post" action=""> 
    <?php
    $id = (isset($_POST['id']))? ($_POST['id']) : 0;
    ?>
     
    <select id="id" name="id" onchange="submit();" style="width:200px;">
    <?php
    $var=$pdo->select('SELECT t.id FROM `tickets` t',[]);
    foreach( $var as $row )
    	{   
    		$selected = ($id == $row['id'])? ' selected="selected"' : '';
    		echo '	<option value="'.$row['id'].'"'.$selected.'>'.$row['id'].'</option>'."\n";
        }
        //$selected = (empty($selected))  ? ' selected="selected"' : '';
        echo '<option value="0">Veuillez saisir etc</option>';
    ?>
    </select>
    </form>
     
    <?php
    if( isset ($_POST['id']) )
    {
    	$pdo->select('USE `tickets`',[]);
    	$req='SELECT p.name FROM `prioritytype` p INNER JOIN `tickets` t ON t.Prioritytype=p.id where t.id="'.$_POST['id'].'"';
    	$var=$pdo->select($req,[]);
    	echo "Priority of ticket ".$_POST['id'].": ".$var[0]['name']."<br/><br/>";
    }
    ?>
     
    <form>
    <input type="button" onclick="twFermer()" value="to close the window">
    </form>
     
    </body>
    </html>
    J'ai commenté la fonction js (qui n'a pas l'air méchante) et ça change rien.

    config.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    if (!defined('DIR_ROOT')) define('DIR_ROOT', dirname(__DIR__).DIRECTORY_SEPARATOR);
    if (!defined('PROJECT_NAME')) define('PROJECT_NAME', 'ticket');
    if (!defined('URL_LOCALPC')) define('URL_LOCALPC', str_replace('/',DIRECTORY_SEPARATOR,$_SERVER['DOCUMENT_ROOT']));
    if (!defined('URL_LOCALHOST')) define('URL_LOCALHOST', 'http://localhost');
    define('DB_SCHEME','mysql');
    define('DB_HOST','localhost');
    define('DB_NAME','tickets');
    define('DB_PORT','3306');
    define('DB_USER','root');
    define('DB_PWD','');
    ?>


    MyPDO.php (100% rawsrc) :
    Code php : 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
    76
    77
    78
    <?php
     
    declare(strict_types=1);
     
    namespace classes\MYPDO;
     
    /**
     * TUTORIAL DVP SUR LE CONCEPT MVC : MODÈLE-VUE-CONTRÔLEUR
     * @link https://www.developpez.net/forums/blogs/32058-rawsrc/b7786/developpement-selon-l-approche-mvc-modele-vue-controleur-retour-theorie/
     * @link https://www.developpez.net/forums/blogs/32058-rawsrc/b7804/developpement-selon-lapproche-mvc-modele-vue-controleur-cas-pratique/
     */
    class MYPDO
    extends \PDO
    {
        /**
         * @var \PDO
         */
        private static $pdo = null;
     
        public function __construct()
        {
            if (self::$pdo === null) {
                self::connect();
            }
            return self::$pdo;
        }
     
        /**
         * @param  string scheme     Ex: mysql pgsql...
         * @param  string $host      Adresse IP du serveur
         * @param  string $database  Nom de la base de données
         * @param  string $user      Nom de l'utilisateur
         * @param  string $pwd       Mot de passe de la connexion
         * @param  string $port      Numéro du port pour la connexion
         */
        private static function connect(string $scheme = DB_SCHEME, string $host = DB_HOST, string $database = DB_NAME,
                                        string $user = DB_USER, string $pwd = DB_PWD, string $port = DB_PORT)
        {
     
            $dsn = "{$scheme}:host={$host};dbname={$database};";
     
            if ((int)($port)) {
                $dsn .= "port={$port};";
            }
     
            try {
                self::$pdo = new \PDO($dsn, $user, $pwd, [
                    \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
                    \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
                    \PDO::ATTR_EMULATE_PREPARES   => false
                ]);
            } catch (\PDOException $e) {
                throw $e;
            }
        }
     
        /**
         * @param  mixed $sql
         * @param  mixed $values    [:tag => value] si pas de values, mettre [] en argument
         * @param  mixed $types     [:tag => PDO::PARAM_XXX] si tag absent alors PDO::PARAM_STR
         * @return array            null si erreur
         */
        public function select($sql, array $values, array $type = []): ?array
        {
            try {
                $stmt = self::$pdo->prepare($sql);
                foreach ($values as $tag => $v) {
                    $stmt->bindValue($tag, $v, $type[$tag] ?? \PDO::PARAM_STR);
                }
                $exec = $stmt->execute(); //echo "req OK<br/>";
                return $stmt->fetchAll(\PDO::FETCH_ASSOC);
            } catch (\PDOException $e) {
                error_log('PDO::select - '.$e->getMessage());//echo "echec req<br/>";
                return null;
            }
        }
     
    }
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bon.
    Soit ton ordi. est hanté, soit c'est toi qui as fait un pacte avec le Diable...

    Dans tous les cas, fais appel à un exorciste.


    [EDIT] par contre, je vois que tu n'as pas compris comment on fait une requête préparée...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	$req='SELECT p.name FROM `prioritytype` p INNER JOIN `tickets` t ON t.Prioritytype=p.id where t.id="'.$_POST['id'].'"';
    	$var=$pdo->select($req,[]);
    Demande à rawsrc.
    Dernière modification par Invité ; 05/11/2019 à 19h37.

  8. #8
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 431
    Points : 5 785
    Points
    5 785
    Billets dans le blog
    1
    Par défaut
    Pourquoi demander ça à rawsrc ? (peut être car c'est lui qui a développé la routine pour exécuter une requête)...

    Une requête préparée, je sais faire mais la vocation de ce code n'est pas d'aller sur le web, mais de rester en local (outil développé en PHP et exécuté avec Wamp), donc je ne pense que ça soit nécessaire, si ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  9. #9
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 431
    Points : 5 785
    Points
    5 785
    Billets dans le blog
    1
    Par défaut
    En tous cas, j'ai fini par trouver une solution (mais pas l'explication...) : avec l'opérateur de comparaison ===. J'ai essayé par hasard, et ça marche !

    Code php : 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
    <form method="post" action=""> 
    <?php
    $id = (isset($_POST['id']))? ($_POST['id']) : 0;
    ?>
     
    <select id="id" name="id" onchange="submit();" style="width:200px;">
    <?php
    echo '<option value="0">Veuillez saisir etc</option>'."\n";
    $var=$pdo->select('SELECT t.id FROM `tickets` t',[]);
    foreach( $var as $row )
    	{   
    		$selected = ($id === $row['id'])? ' selected="selected"' : '';
    		echo '	<option value="'.$row['id'].'"'.$selected.'>'.$row['id'].'</option>'."\n";
        }
    ?>
    </select>
    </form>
    Ma ligne à afficher au démarrage, je l'ai mise en premier et comme au démarrage, y a aucun selected, c'est elle qui est affichée.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 431
    Points : 5 785
    Points
    5 785
    Billets dans le blog
    1
    Par défaut
    J'ai finalement préparé les requêtes :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req='SELECT p.name FROM `prioritytype` p INNER JOIN `tickets` t ON t.Prioritytype=p.id where (t.id=:id)';
    $var=$pdo->select($req,[':id'=>$_POST['id']]);
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher fichier sélectionné par un select
    Par laurentSc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 27/09/2016, 19h01
  2. Recuperer la valeur affiche dans un select
    Par Leduc08 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/07/2008, 08h49
  3. Recuperer une valeur affichée par <bean:write>
    Par zaineb.z dans le forum Struts 1
    Réponses: 6
    Dernier message: 03/10/2007, 12h50
  4. afficher la valeur d un champ par rapport a un dblook?
    Par neuneu1 dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/04/2007, 13h12
  5. Réponses: 4
    Dernier message: 24/01/2006, 13h18

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