Bonjour,

Bon petite question bateau, et je sais plus trop où chercher -_-

Situation > Site de vente de box, avec tutos en ligne. Le tuto est soumis à un code présent dans la box. Le code est vérifié par le biais d'une fonction verify() (Orignal hein?).
Je pars de la page global tutos, qui fait apparaître TOUS les liens des tutos. Puis lorsqu'on clique dessus, j'envoi vers cette url :

<a href="../users/verify/<?php echo $box'Listeboxs']'id'];?>">

Donc mon url ressemble à ça : http://127.0.0.1/whats/users/verify/1

Par la suite, je demande une vérification du code en fonction de l'ID de la box. Seulement bah, ça déconne...Je n'arrive pas à récupérer l'ID de la box qui est passé dans l'url pour pouvoir faire mes test, et voir si le mot de passe est bon etc etc.

De plus, j'avais vu un truc dans l'un des tutos de Graf, mais je ne me souviens plus où. En gros, quand le lien n'est pas bon Cakephp te dit "Vas chier". Enfin pour un blog quand l'article n'est pas bon, il te dit vas chier, parce que là, moi je lui mets des ID de box qui n'existe pas, et il me dit "Pump it up, tout va bien". -_-

// Fonction vérification avant lecture vidéo tuto
        function verify($id){
            if(!$this->Auth->user('id')){
                $this->redirect('/users/login');
                $this->Session->setFlash("Merci de vous connecter pour accèder aux tutos","notif",array('type'=>'error'));
            }
            if($this->request->is('post')){
                //Récupération de ce qui a été posté.
                $d = $this->request->data;
                // Récupération du code posté.
                $codeSaisi = $d'Tutos_boxs']'code'];
                // Chargement du modèle Tutos_Boxs où se trouve le lien du tuto + code + numéro de la box
                $this->loadModel('Tutos_boxs');
                // Recherche du code voulu en fonction du code saisi (Et donc du tuto voulu)
                $tutosBox = $this->Tutos_boxs->findByCode($codeSaisi);
                $codeBox = $tutosBox'Tutos_boxs']'code'];

                debug($d);
                die();
                $id = $d'Tutos_boxs']'id_box'];
                if($codeSaisi == $codeBox){
                    $this->redirect(redirection à faire);
                }else{
                    $this->Session->setFlash("Pas de bol","ko_verify",array('type'=>'error'));
                }
            }
        }

Je ne sais pas si je suis super clair, mais bon... Si quelqu'un pouvait m'aider... Merki !

18 réponses


antho07
Réponse acceptée

non,

tu l'as déjà en paramètre en entrée de la fonction

$id tu l'as

essaye :

function verify($id){
echo $id;
die();
 }

Bonjour

if($this->request->is('post')){

T'envoi rien en post là si ???

Tu cliques sur un lien, tu fais pas de requête post..

Le post, il résulte de la vue précédente

<div class="row-fluid">
    <div class="header-tutos"></div>
    <div class="header-body-tutos">
        <?php foreach ($listeboxs as $box): ?>
            <a href="../users/verify/<?php echo $box'Listeboxs']'id'];?>">
                <div class="fond-tutos">
                    <img class="tuto" src="<?php echo $box'Listeboxs']'url_img'];?>"/>
                    <h2><?php echo $box'Listeboxs']'title'];?></h2>
                    <p><?php echo $box'Listeboxs']'descr'];?></p>
                </div>
            </a>
        <?php endforeach ?>
    </div>
</div>

?? aucune requete post dans cette vue...

Hum, je ne fais pas de requête, je place une ID, celle de ma box, dans l'url, et c'est cette url que je veux récupérer

<a href="../users/verify/<?php echo $box'Listeboxs']'id'];?>">

oui d'où la question :

Pourquoi ce test:

if($this->request->is('post')){

??

Par ailleurs, si tu utilises cakePhp, utilise le helper link pour générer tes liens, ça permettra de les dynamiser par rapport à un eventuel routing

Alors en gros tu arrives sur la route /users/tutos, là tu as liste de tous les tutos.
Ensuite tu cliques sur un tuto, (lien que j'ai mis juste avant), et là tu arrives sur la page /users/verify

Et là tu as un champ

<div class="verify-form">
        <?php echo $this->Form->create('Tutos_boxs'); ?>
            <?php echo $this->Form->input('code',array('label'=>"",'placeholder'=>"lecode",'class'=>"uname")); ?>
        <?php echo $this->Form->end('Vérifier');?> 
    </div>

Ce champ là, c'est pour le code qui est associé à la box avec l'id en url.

Oui j'avoue, j'y ai pensé après, et j'ai du mal à gérer le helper avec les liens sur des div

Tu peux utiliser un système de préfixage pour les méthodes accéssible uniquement aux connectés, ça évitera ça:

if(!$this->Auth->user('id')){
$this->redirect('/users/login'); => plutot $this->redirect(Router::url(array('controller'=>'user','action' => 'login')); mais encore une fois tu peux utiliser un préfixage ou autre pour automatiser ce traitement
$this->Session->setFlash("Merci de vous connecter pour accèder aux tutos","notif",array('type'=>'error'));
}

D'accord pour les routes, je vais me remettre dessus, et concernant les id en url etc ?

function verify($id){
     if(!$this->Auth->user('id')){
         $this->redirect('/users/login');
         $this->Session->setFlash("Merci de vous connecter pour accèder aux tutos","notif",array('type'=>'error'));
     }
     if($this->request->is('post')){
         //Récupération de ce qui a été posté.
         $d = $this->request->data;
         // Récupération du code posté.
         $codeSaisi = $d'Tutos_boxs']'code'];
         // Chargement du modèle Tutos_Boxs où se trouve le lien du tuto + code + numéro de la box
         $this->loadModel('Tutos_boxs');
         // Recherche du code voulu en fonction du code saisi (Et donc du tuto voulu)
         $tutosBox = $this->Tutos_boxs->findByCode($codeSaisi);
         $codeBox = $tutosBox'Tutos_boxs']'code'];

         debug($d);
         die();
         $id = $d'Tutos_boxs']'id_box'];
         if($codeSaisi == $codeBox){
             $this->redirect(redirection à faire);
         }else{
             $this->Session->setFlash("Pas de bol","ko_verify",array('type'=>'error'));
         }
     }
 }

A quoi sert la variable $id passée en entrée dans ton code ici ?

tu l'utilises où ?

Pour récupérer des variables passées en GET (par l'url):

sans routing définie, les urls de cakePhp sont de cette forme:

siteblablala/controller/action/param1/param2/param3

on récupere:

Controller

function action($a,$b,$c) {
$a aura la valeur param1
$b la valeur param2
$c la valeur param3
...

}

D'accord pour le "sans routing", et du coup dans le controller admettons, la valeur de la variable $a, il faut que j'aille la rechercher à nouveau ?

En gros :

function verify($id){
 $listeBox = $this->loadModel('Tutos_boxs');
 $id = $listeBox'Tutos_boxs']'id'];
 }

A ce sujet, je ne sais pas si ça passe ça:

<a href="../users/verify/<?php echo $box'Listeboxs']'id'];?>">

tu le verras avec la fonction test que j'ai mise plus haut de toute manière

Ah oui effectivement, je récupère bien le numéro de l'ID.
Et donc en partant de là, je dois pouvoir récupérer le code de la box, et il changera avec tous les id différents.

Il ne me reste plus qu'à revoir le truc du routing, pour qu'il me balance une erreur à chaque id qui n'est pas dans la table et zou :)

Un petit merci à toi Anto, enfin un grand, car c'est bon j'ai réussi :) Merki !