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

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