Page 1 sur 2

Twig + Php

Posté : 21 mai 2019, 13:22
par Shake021
Bonjour , je vous explique mon soucis

J'essaie de faire un formulaire pour désactiver et activer une page d'un panel admin donc voilà le formulaire dans la vue panel :

<form method="POST" action="index.php?page=tousleslivres">
<p>Selectionné l'état du catalogue :</p>
<select class="form-control" id="Etat" name="Etat">
<option value="True">Activer</option>
<option value="False">Desactiver</option>

</select>
<div>
<button id="BtEtat" type="sumbit">Envoyer</button>
</div>
</form>

Ensuite mon contrôleur

function actionTousLivres($twig,$db){
$form = array();
$Catalogue = new Catalogue($db);

if (isset($_POST[' btEtat '])){
$Etat = $_POST['Etat'];
$form['Etat'] = $Etat;

}
echo $twig->render('tousleslivres.html.twig', array('form'=>$form, 'listecatalogue'=>$listecatalogue));
}

Et enfin la condition de mon base.html

{%if form.Etat == True %}
<li>
<a href="index.php?page=catalogue">Catalogue</a>

</li>
{%endif%}

Mais malheureusement la page ne ce désactive pas et je ne sais pas d'ou le problème viens donc voila ,
Merci de votre aide :D

Re: Twig + Php

Posté : 21 mai 2019, 13:34
par Saian
Salut, mon avis que c'est ton test if (isset($_POST[' btEtat '])){ qui ne passe pas. btEtat c'est l'id du bouton, pas son nom, et donc $_POST[' btEtat '] n'existe probablement pas. Fais un print_r ou vardump de $_POST pour voir ce qu'il y a dedans. En règle générale je regarde plutôt si la method est post auquel cas je sais que le formulaire a été soumis, les autres requêtes étant en get.

Re: Twig + Php

Posté : 21 mai 2019, 13:43
par Shake021
Salut , merci de ta réponse j'ai essayé le var_dump et il est considérer comme nul j'ai donc ajouté un name dans le bouton qui s'appelle btEtat mais toujours rien :/

Re: Twig + Php

Posté : 21 mai 2019, 13:50
par Saian
Si tu veux un peu plus d'aide, montre nous ce que tu obtiens et avec quel code.

Re: Twig + Php

Posté : 21 mai 2019, 14:03
par Shake021
avec var_dump($_POST) j'ai obtenue la ligne NULL en erreur
Notice: Undefined index: btEtat in /data/si62019/hattencourt/src/controleur/controleur_catalogue.php on line 61

Re: Twig + Php

Posté : 21 mai 2019, 14:10
par Saian
C'est pas possible, un var_dump de $_POST va forcément afficher plus de chose que juste NULL. Au pire tu devrais avoir quelque chose du genre array(0) { }
Et puis ça veut dire quoi j'ai obtenu la ligne en erreur ? quelle erreur ?

EDIT : tu as ajouté l'erreur. Elle est clair, l'index btEtat n'existe pas à la ligne 61 du fichier controleur_catalogue.php.
Le var_dump est justement sensé te permettre de voir ce que contient le tableau afin de déterminé si le button est présent dedans et sous quel forme, quel index.

Re: Twig + Php

Posté : 21 mai 2019, 14:13
par Shake021
Je suis désolé je commence le php je suis pas super fort mais je ne comprend pas ce qu'est l'index btEtat ?

Re: Twig + Php

Posté : 21 mai 2019, 14:15
par Saian
L'index c'est en rapport aux tableaux. Tu essaies d'accéder à l'index btEtat du tableau $_POST or justement cet index n'existe pas. Le var_dump devrait t'aider à voir ce qu'il y a dans le tableau. Encore faut-il le placer au bon endroit par exemple au dessus du if (isset($_POST[' btEtat '])){

EDIT : comme c'est la liste déroulante Etat qui t'intéresse, à ta place je testerais plutôt if (isset($_POST['Etat'])
D'ailleurs c'est étrange car tu fais un if (isset($_POST[' btEtat ']) ce qui ne devrait pas générer d'erreur. As tu modifié le code entre temps ? comment est la ligne 61 en erreur ?
A noter que les index des champs dans le tableau $_POST seront toujours les name des input, pas les id. Et je ne suis pas sur que les button soient transmis.

Re: Twig + Php

Posté : 21 mai 2019, 14:23
par Shake021
Non j'ai juste ajouté les var_dump entre temps la j'ai essayé ce que tu m'as dis il m'affiche
string(5) "False"
Notice : Undefined variable: Etat in /data/si62019/hattencourt/src/controleur/controleur_catalogue.php on line 65
NULL

Edit: Le string montre bien alors qu'il envoie false a la variable non?

Re: Twig + Php

Posté : 21 mai 2019, 14:27
par Saian
Ca colle pas du tout au comportement normal de php. Tu as bien ce code ? Si c'est pas le cas montre ton code et entoure le de la balise PHP (bouton PHP dans la barre d'outils) histoire que ce soit lisible.
function actionTousLivres($twig,$db) {
  $form = array();
  $Catalogue = new Catalogue($db);
  
  var_dump($_POST);
  if (isset($_POST['Etat'])) {
    $Etat = $_POST['Etat'];
    $form['Etat'] = $Etat;
  }
  echo $twig->render('tousleslivres.html.twig', array('form'=>$form, 'listecatalogue'=>$listecatalogue));
}
EDIT : si tu as fait un var_dump($_POST['Etat']) et que tu avais sélectionné Désactiver alors le retour du var_dump est normal. Le problème c'est que tu ne montres pas le code avec lequel tu obtiens les différents retour.

Re: Twig + Php

Posté : 21 mai 2019, 14:34
par Shake021
La j'ai comme toi et ça me renvoie ça maintenant :Notice: Undefined offset: 1 in/data/si62019/hattencourt/src/config/routing.phpon line 40
array(0) { }

Re: Twig + Php

Posté : 21 mai 2019, 14:36
par Shake021
Comment je peux faire pour envoyer mon code sous forme propre comme toi en sublime text ?
Je vais tout te mettre au propre

Re: Twig + Php

Posté : 21 mai 2019, 14:39
par Saian
Et bien maintenant tu as un problème dans le fichier routing.php à la ligne 40. ^^
Le array(0) { } je suppose que c'est le var_dump de $_POST et que la tu n'as pas soumis le formulaire ? et l'erreur semble arriver en amont du var_dump étant donnée qu'elle est affichée au dessus.
Après faut savoir qu'une notice n'est pas une erreur bloquante mais ça peut montrer qu'il y a un problème dans le code.

EDIT : tu utilises le bouton PHP de la barre d'outils au dessus du champ ou tu écris le message.

Re: Twig + Php

Posté : 21 mai 2019, 14:41
par Shake021
L'erreur routing est toujours présente j'ai l'impression que ces le serveur qui fais ça ^^ ,
Mais je ne comprend pas pourtant la logique de mon code devrais fonctionner je n'arrive pas à comprendre d'ou viens mon erreur

Re: Twig + Php

Posté : 21 mai 2019, 14:44
par Shake021

function actionTousLivres($twig,$db){
  $form = array();
  $Catalogue = new Catalogue($db);


  var_dump($_POST);
    if (isset($_POST['Etat'])) {
      $Etat = $_POST['Etat'];
      $form['Etat'] = $Etat;

}



if (isset($_POST['btAjouter'])){
 $titre = $_POST['titre'];
 $resume= $_POST['resume'];
 $auteur = $_POST['auteur'];
 $gerne = $_POST['gerne'];
 $prix =$_POST['prix'];
 $quantite=$_POST['quantite'];

 //#Debut upload photo
 $photo=null;

 if(isset($_FILES['photo'])){ //Cette ligne teste si la variable fichier qui se nomme « photo » existe en mémoire.
 if(!empty($_FILES['photo']['name'])){ //Est-ce qu'une photo a été envoyée ?
 $extensions_ok = array('png', 'gif', 'jpg', 'jpeg', 'jfif'); //Cette ligne indique les extensions des fichiers que nous autoriserons. Nous les mettons dans un tableau .

 $taille_max = 500000;
 $dest_dossier = '/data/si62019/hattencourt/web/images/couverture/'; //Chemin du répertoire où seront stockées les images. Il faudra donner des droits au répertoire qui accueillera vos images.
 if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) ){ //La ligne regarde si dans le nom de la photo, nous avons bien une extension autorisée.
 echo 'Veuillez sélectionner un fichier de type png, gif ou jpg !';
 }
 else{
 if( file_exists($_FILES['photo']['tmp_name'])&& (filesize($_FILES['photo']
['tmp_name'])) > $taille_max){
 echo 'Votre fichier doit faire moins de 500Ko !';
 }
 else{
     $photo = basename($_FILES['photo']['name']); //Cette ligne récupère uniquement le nom du fichier
 // enlever les accents

$photo=strtr($photo,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAA
AAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
 // remplacer les caractères autres que lettres, chiffres et point par _
 $photo = preg_replace('/([^.a-z0-9]+)/i', '_', $photo);
 // copie du fichier
 move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier.$photo);
     }
     }
                                   }
 }

 $Catalogue = new Catalogue($db);
 $exec = $Catalogue->insert($titre,$resume,$auteur,$prix, $quantite, $gerne, $photo);
 $form['titre'] = $titre;
}//Fin

//Debut pagination
 $limite=10;
 if(!isset($_GET['nopage'])){
 $inf=0;
 $nopage=0;
 }
 else{
 $nopage=$_GET['nopage'];
 $inf=$nopage * $limite;
 }

 $r = $Catalogue->selectCount();
 $nb = $r['nb'];


 $listecatalogue = $Catalogue->selectLimit($inf,$limite);
 $form['nbpages'] = ceil($nb/$limite);
 //Fin

 //Supprimer un livre [version choix multiple]
 if(isset($_POST['btSupprimer'])){
 $cocher = $_POST['cocher'];
 $form['valide'] = true;
 foreach ( $cocher as $idlivre){
 $exec=$Catalogue->delete($idlivre);
 if (!$exec){
 $form['valide'] = false;
 $form['message'] = 'Problème de suppression dans la table produit';
 }
 }
 }
 //Fin

echo $twig->render('tousleslivres.html.twig', array('form'=>$form, 'listecatalogue'=>$listecatalogue));
}
Voila mon controleur complet

<form method="POST" action="index.php?page=tousleslivres">
  <p>Selectionné l'état du catalogue :</p>
<select class="form-control" id="Etat" name="Etat">
 <option value="True">Activer</option>
 <option value="False">Desactiver</option>
 </select>
  <div>
    <button id="BtEtat" name="BtEtat" type="sumbit">Envoyer</button>
  </div>
</form>
mon formulaire
       {%if form.Etat == True %}
                    <li>
                        <a href="index.php?page=catalogue">Catalogue</a>

                    </li>
                    {%endif%}