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

MVC PHP Discussion :

Récupérer et envoyer la valeur d'un input dans un lien [ZF 1.9]


Sujet :

MVC PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 488
    Par défaut Récupérer et envoyer la valeur d'un input dans un lien
    Bonjour,

    J'essaie de faire une recherche, récupérer le mot rechercher et l'envoyer à travers un lien mais j'ai l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Exception information :
     
    Message: SQLSTATE[HY093]: Invalid parameter number: no parameters were bound
    Voilà comment je procède:

    Ma vue:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    echo' <div class="title_bloc">Recherche par agence :</div>
        <input type="text"  name="expression" value="" />';
        $search=$_GET['expression'];
        echo ' &nbsp;&nbsp;<a  href="'. $this->baseUrl() .'/referencement/rsannonceurs/search/' .$search . '">Envoyer</a>';
    Mon action:

    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
      function rsannonceursAction()
    	{
    		$this->view->layout()->setLayout('1column');
                    $this->view->headLink()->appendStylesheet(DEFAULT_SKIN_PATH . 'styles/recherches.css');
     
    		$tAgences = new Agences();
    		$field = "agence_rs";
     
                    $globalsearch = $this->_request->getParam('expression');
                    echo $globalsearch;
     
                    // J'envoie les parametres à la methode de la table
                    $this->view->search = $this->_request->getParam('search');
     
                    $this->view->data = $this->AlphabeticArrayMaker($tAgences->GetDataAgenceByRS($this->view->search),$field);
    	}
     
    	function AlphabeticArrayMaker($datas,$field)
    	{
    		//variable permettant de stocker la premiere lettre de la colonne "nomColonne"
     
    		$alphabet = array ("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
     
    		foreach($datas as $row)
    		{
    			$lettre_tester = strtoupper(substr($row[$field], 0, 1));
     
    			$array[$lettre_tester][] = $row;
    		}
     
    		return $array;
    	}
    et enfin mon modèle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     /*** Récupère l'agence suivi sa raison social ***/
            public function GetDataAgenceByRS($rs) {
    		$select = $this->getAdapter()->select();
    		$select->from($this->_name,'*');
    		$select->where('agence_rs = ?',$rs);
    		return $this->getAdapter()->fetchRow($select);
    	}
    C'est mon $_GET qui déconne ça va pas du tout! Mais comment récupérer sa valeur et l'envoyé sans passer par un formulaire?
    En gros pour un tout petit champs de recherche est ce que je suis obligée de passer par une Zend_Form?

    Merci d'avance pour votre aide.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 488
    Par défaut
    Merci pour le lien...
    J'ai compris le mécanisme...maintenant n'y a-t-il pas d'autre moyen d'en arrivé a mon résultat sans passé par un formulaire?
    Si non, est ce que la method post permet de renvoyer les infos sur la même page?
    En gros est ce que je peux avoir:
    un fichier agence.phtml avec une <form action="agence.phtml method" method="post"> ?

    Dois-je passé par Zend_Form?

  3. #3
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut
    Oui tu peux utiliser Zend_Form mais bon pour le moment vaut mieux essayer avec le plus simple...

    Dans ton cas j'utiliserais GET plutot que POST et essaie de garder le même nom de variable c'est plus 'lisible' ex:

    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
     
    // Dans ta vue
    <form method="get" action="<?php echo $this->baseUrl() .'/referencement/rsannonceurs' ?>">
     
    <label for="search">Recherche</label><input type="text" name="search" id="search" value="<?php echo $this->search ?>" />
     
    <input type="submit" value="ok" />
    </form>
     
    // Dans ton controlleur
    $this->view->search = $this->_request->getParam('search');
    $this->view->data = $this->AlphabeticArrayMaker($tAgences->GetDataAgenceByRS($this->view->search),$field);
     
    // Dans ton modele
            public function GetDataAgenceByRS($search = null) {
     
                    // Un terme a été saisi
                    if ($search) {
                $search = array('agence_rs LIKE ?' => $search);
                    }
            // On renvoi les résultats si terme ou tout si rien de saisi                        
            return $this->fetchAll($search);
        }

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 488
    Par défaut
    Pareil que mon dernier poste ça me renvoit la page d'accueil!

    J'arrive bien a récupérer la valeur saisie par contre pour la fonction getDataAgenceByRS($search) j'execute pas ma requête?? Je comprends pas bien ton array là...tu le rajoutes a quoi?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public function getDataAgenceByRS($search) {
    		$select = $this->getAdapter()->select();
    		$select->from($this->_name,'*');
    		$select->where('agence_rs = ?',$search);
    		return $this->getAdapter()->fetchRow($select);
     
                     // Un terme a été saisi
                   /* if ($search) {
                        $search = array('agence_rs LIKE ?' => $search);
                    }
                    echo $search;
                    // On renvoi les résultats si terme ou tout si rien de saisi
                    return $this->fetchAll($search);*/
    	}

  5. #5
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut
    La methode fetchAll() de ta classe de table reviens à faire SELECT * FROM taTable.
    Cette methode prend en premier parametre des arguments de recherche, donc

    $search = array('agence_rs LIKE ?' => $search) ajoute une clause where à ta requete
    ce qui te donne SELECT * FROM taTable WHERE agence_rs LIKE 'tonExpression';

    Regarde comment fonctionne les classes de table dans le bouquin de Julien Pauli, je crois que c'est celui-là que tu as....

    La methode te renvoi un objet en resultat, cet objet est un rowSet mais si tu veux obtenir les resultat sous forme de tableau tu n'a juste qu'à faire:
    return $this->fetchAll($search)->toArray();

    De plus je ne sais pas ce que tu veux obtenir, un seul résultat ou plusieur?
    Car tu dois savoir ceci:
    la methode fetchRow() te retourne qu'une seule ligne de resultat alors que la methode fetchAll() te renvoi TOUT les resultats.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 488
    Par défaut
    Merci pour l'info. Je veux qu'il me retourne tous les résultats qui commencent par le mot saisi.


    Je reprends, j'ai l'impression de m'embrouiller en plus j'arrive pas à voir ou ça passe pas.

    Ma vue:

    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
    <div style="background: #fff; width: 100%; padding: 0 1em 1em; margin: -1em;"><br>
        <div class="title_bloc" width="50%">Recherche par ordre alpab&eacute;tique :</div><br>
    <?php
    $alphabet = array ("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
    echo '<div style="width:25%; text-align:center;"><table><tr><td class="table-ligne1-centre" valign="top">';
    foreach ($alphabet as $letter) {
     
        if ($letter == $this->letter) {
        echo $letter;
     
        } else {
     
            echo '&nbsp;<a href="'. $this->baseUrl() .'/referencement/annonceurs/lettre/' .$letter . '">' . $letter . '</a>&nbsp;';
        }
     
    }
    echo '</td></tr></table></div><br>';
     
     
    ?>
    <form method="get" action="<?php echo $this->baseUrl() .'/referencement/rsannonceurs' ?>">
     
    <label for="search">Recherche : </label><input type="text" name="search" id="search" value="<?php echo $this->search ?>" />
     
    <input type="submit" value="ok" />
    </form>
     
    <?php
     
    if ($this->data===null){
       echo '<h1 style="margin: 1em -12px 10px">Aucun r&eacute;sultat n\'a &eacute;t&eacute; retourn&eacute;</h1>';
     
    }
    else{
    foreach($this->data as $letter =>  $rows){
    	echo '<h1 style="margin: 1em -12px 10px">' . $letter . '</h1>';
            print '<div style="width:100%; text-align:center;">
            <table width="100%"  cellspacing="2" cellpadding="2">';
     
            $i=0;
    	foreach($rows as $row){
     
                      if(!($i%2)){
                          print '</tr>';
                          print '<td><a href="' . $this->baseUrl() . '/index/recherche?cr=poste&ag=' . $row['agence_id'] . '/'.$row['agence_rs'].'">' . $row['agence_rs'] . '</a></td> ';
     
                           $i++;
                    }else {
                             print '<td><a href="' . $this->baseUrl() . '/index/recherche?cr=poste&ag=' . $row['agence_id'] . '/'.$row['agence_rs'].'">' . $row['agence_rs'] . '</a></td></tr> ';
                            $i++;
     
                      }
             }         
    }
    print '</tr></table></div>';
    }
    ?>
    </div>
    Mon contrôleur:

    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
    function rsannonceursAction()
    	{
    		$this->view->layout()->setLayout('1column');
                    $this->view->headLink()->appendStylesheet(DEFAULT_SKIN_PATH . 'styles/recherches.css');
     
    		$field = "agence_rs";
                    // J'envoie les parametres à la methode de la table
                    $this->view->search = $this->_request->getParam('search');
                    $this->view->data = $this->AlphabeticArrayMaker($tAgences->getDataAgenceByRS($this->view->search),$field);
     
    }
     
    function AlphabeticArrayMaker($datas,$field)
    	{
    		//variable permettant de stocker la premiere lettre de la colonne "nomColonne"
     
    		$alphabet = array ("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
     
    		foreach($datas as $row)
    		{
    			$lettre_tester = strtoupper(substr($row[$field], 0, 1));
     
    			$array[$lettre_tester][] = $row;
    		}
                    //print_r($array);
    		return $array;
    	}
    et enfin mon modèle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     public function getDataAgenceByRS($search = NULL) {
     
                     // Un terme a été saisi
                    if ($search) {
                        $search = array('agence_rs LIKE ?' => $search);
                    }
                     print_r($search);
                    // On renvoi les résultats si terme ou tout si rien de saisi
                    return $this->fetchAll($search);
                    //return $this->fetchAll($search)->toArray();
    	}
    J'obtiens une page blanche qui table sur "rsannonceurs?search=activrh" .
    Mon "print_r($search);" ne m'affiche rien.

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

Discussions similaires

  1. Récupérer la valeur d'un input dans une jsp
    Par clavben dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 07/02/2012, 12h59
  2. Réponses: 11
    Dernier message: 23/04/2009, 14h43
  3. Récupérer valeur chekbox et input dans un DIV
    Par axanta dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 12/11/2008, 15h51
  4. Réponses: 9
    Dernier message: 29/08/2008, 14h35
  5. Utiliser la valeur d'un input dans une variable php
    Par megane dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/08/2005, 16h02

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