Twig + Php

Eléphanteau du PHP | 19 Messages

21 mai 2019, 13:22

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

Avatar du membre
Mammouth du PHP | 1609 Messages

21 mai 2019, 13:34

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.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 19 Messages

21 mai 2019, 13:43

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 :/

Avatar du membre
Mammouth du PHP | 1609 Messages

21 mai 2019, 13:50

Si tu veux un peu plus d'aide, montre nous ce que tu obtiens et avec quel code.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 19 Messages

21 mai 2019, 14:03

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

Avatar du membre
Mammouth du PHP | 1609 Messages

21 mai 2019, 14:10

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.
Modifié en dernier par Saian le 21 mai 2019, 14:13, modifié 1 fois.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 19 Messages

21 mai 2019, 14:13

Je suis désolé je commence le php je suis pas super fort mais je ne comprend pas ce qu'est l'index btEtat ?

Avatar du membre
Mammouth du PHP | 1609 Messages

21 mai 2019, 14:15

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.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 19 Messages

21 mai 2019, 14:23

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?

Avatar du membre
Mammouth du PHP | 1609 Messages

21 mai 2019, 14:27

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.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 19 Messages

21 mai 2019, 14:34

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) { }

Eléphanteau du PHP | 19 Messages

21 mai 2019, 14:36

Comment je peux faire pour envoyer mon code sous forme propre comme toi en sublime text ?
Je vais tout te mettre au propre

Avatar du membre
Mammouth du PHP | 1609 Messages

21 mai 2019, 14:39

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.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 19 Messages

21 mai 2019, 14:41

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

Eléphanteau du PHP | 19 Messages

21 mai 2019, 14:44


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%}