{PHP} variable PHP dans un attribut d'une balise HTML

Fermé
Fraa_w Messages postés 26 Date d'inscription mercredi 22 décembre 2021 Statut Membre Dernière intervention 5 novembre 2022 - 28 déc. 2021 à 12:00
jordane45 Messages postés 38300 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 novembre 2024 - 28 déc. 2021 à 16:37
Bonjour
Je m'arrache les cheveux pour comprendre pourquoi ça me retourne une page vide.
aidez moi s'il vous plait : )

traitement du formulaire (Page 2)

Merci beaucoup

<?php

//connexion à la bdd
$database = new PDO ('mysql:host=localhost;dbname=visualisation', 'root','');


$t = $database->query('SELECT nom FROM f_teams WHERE id = 1');
$t = $t->fetch();
$x = $t[0] ;

if( isset($_POST["$x"]) )
{
  // r d 
  try{

    $dX = $database->query('SELECT* FROM domaine WHERE equipe = 1');
    $dX = $dX->fetchALL();
    
  }catch(Exception $e)
  {
     echo "Erreur " . $e->getMessage();
  }
  $dx = !empty($domaineX['nom']) ? $dX['nom']:"";
}
?>



HTML (Page 2)

<?php 

if(!empty($dX))
{
?>
<form action="./chaine.php" method="post" >
<?php
foreach($dX as $d)
{



?>  

<button  class="custom-btn btn-9" id="domaine" name="<?php echo htmlspecialchars($d[0]); ?>"> <?=$d["nom"] ?> </button> 

<?php
}
?>
</form>

<?php

}
?>







PHP (Page 3)

<?php
  $database = new PDO ('mysql:host=localhost;dbname=visualisation', 'root','');



$d1 = $database->query('SELECT nom FROM domaine WHERE id = 1');
$d1 = $d1->fetch();
$z = $d1[0] ;


if( isset($_POST["$z"]) )
{
  // r d 
  try
  {
    $cX = $database->query('SELECT* FROM chaine WHERE domaine = 1');
    $cX = $ceX->fetchALL(); 
    
  }catch(Exception $e)
  {
     echo "Erreur " . $e->getMessage();
  }
  $cx = !empty($cX['nom']) ? $cX['nom']:"";

}
// 

?>




formulaire (page 3)


<?php 



if(!empty($cX))
{
?>
<form action="./traitement.php" method="post" >
<?php
foreach($cX as $c)
{



?>  

<button  class="custom-btn btn-9" id="chaine" name="<?php echo htmlspecialchars($c[0]); ?>"> <?=$c["nom"] ?> </button> 

<?php
}
?>
</form>

<?php

}
?>
A voir également:

2 réponses

jordane45 Messages postés 38300 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 novembre 2024 4 704
28 déc. 2021 à 14:29
Bonjour,

Déjà.. commence par placer le code de connexion à la bdd dans un fichier à part que tu n'auras qu'à inclure dans tes différents scripts au lieu de recopier/coller le même code...
En plus, actives-y l'affichage des éventuelles erreurs PDO... ainsi que l'affichage des erreurs PHP.


Donc .. crée le fichier cnxBdd.php
<?php
//Fichier cnxBdd.php
//------------------------------------//
//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//connexion à la bdd

try{
  $database = new PDO ('mysql:host=localhost;dbname=visualisation', 'root','');// Activation des erreurs PDO
  $database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
  $database->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}
?>


Ensuite, dans ton fichier, modifie le code comme ceci :
<?php
// Page 2.php
//--------------------------//
//connexion à la bdd
require_once "cnxBdd.php";


try{
  $t = $database->query('SELECT nom FROM f_teams WHERE id = 1');
  $t = $t->fetch();
  $x = $t[0] ;
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
}

if( !empty($x)){
  // r d 
  try{
    $dX = $database->query('SELECT * FROM domaine WHERE equipe = 1');
    $dX = $dX->fetchAll();
  }catch(Exception $e) {
     echo "Erreur " . $e->getMessage();
  }
}

if(!empty($dX)){
?>
  <form action="./chaine.php" method="post" >
    <?php
    foreach($dx as $d){
    ?>  
      <button type="submit"  class="custom-btn btn-9"  id="domaine_<?php echo $d['id'];?>" name="domaine[]" value="<?php echo $d['id']; ?>"> <?php echo $d["nom"] ?> </button> 
    <?php
    }
    ?>
  </form>
<?php
}
?>


Puis dans la page chaine.php
<?php
// chaine.php
//--------------------------//
//connexion à la bdd
require_once "cnxBdd.php";

//on récupère les données transmises en POST
$domaine = !empty($_POST['domaine']) ? $_POST['domaine'] : NULL;

if($domaine){
 //préparation de la requête et des variables
 $sql = "SELECT nom FROM domaine WHERE id = ?";
 $datas = array($domaine);

//Execution de la requete
try{
  $requete = $database -> prepare($sql) ;
  $requete->execute($datas) ;
  $d1 = $requete->fetch();
  $nom_domaine = $d1['nom'] ;
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " Les datas : " ;
  print_r($datas);
}

if(!empty($nom_domaine)) {
 //préparation de la requête et des variables
 $sql = "SELECT * FROM chaine WHERE domaine = ?"; // ici, dans ta table.. domaine c'est l'id du domaine ou son nom ?? => ça devrait être son id...
 $datas = array($domaine);

  //Execution de la requete
  try{
    $requete = $database -> prepare($sql) ;
    $requete->execute($datas) ;
    $chaines = $requete->fetchAll();
    
  }catch(Exception $e){
    // en cas d'erreur :
     echo " Erreur ! ".$e->getMessage();
     echo " Les datas : " ;
    print_r($datas);
  } 
  
}
  
}else{
  echo "Aucun domaine envoyé...";
  var_dump($_POST); //juste le temps des tests...
}
?>

<?php
if(!empty($chaines)){
?>
  <form action="./traitement.php" method="post" >
    <?php
    foreach($cX as $c) {
    ?>  
      <button  type="submit" class="custom-btn btn-9" id="chaine_<?php echo $c['id'];?>" name="chaine[]" value="<?php echo $c['id'];?>"> <?php echo $c["nom"];?> </button> 
    <?php
    }
    ?>
  </form>

<?php    
}
?>


Et enfin, dans le fichier traitement.php
<?php
// Fichier traitement.php

var_dump($_POST);






NB: J'ai écrit le code de tête et sans connaitre la structure exacte de tes tables.
J'ai supposé que chaque table contenait un champ "id" ...
En fonction de ça, il te faudra peut-être adapter un peu le code et corriger d'éventuelles erreurs de syntaxe si il y en a..
0
Fraa_w Messages postés 26 Date d'inscription mercredi 22 décembre 2021 Statut Membre Dernière intervention 5 novembre 2022
28 déc. 2021 à 16:21
Merci énormément Jordan45 pour ta réponse

ça marche bien pour la première la page domaine ( page 2 ) mais pas pour la page chaine ( page 3) j'ai eu quelques erreurs que je n'arrive pas du tout à comprendre ...


( j'ai mis en gras mon problème si tu ne peux pas lire tout ça hahaha : ) )



- Un formulaire dans une boucle foreach qui retourne des boutons comme ceci

je partage juste le nécessaire cette fois-ci

////////ici je suis dans la page domaine///////

<form action="./chaine.php" method="post" >
<?php
foreach($domaineX as $domaine)
{


?>  

<button  type="submit" class="custom-btn btn-9" id="<?php echo htmlspecialchars($domaine[0]); ?>" name="<?php echo htmlspecialchars($domaine["nom"]); ?>"> <?=$domaine["nom"] ?> </button> 

<!-- ca donne la meme chose  -->
<!-- <?php echo htmlspecialchars($domaine["nom"]); ?> -->

<?php
}
?>
</form>



l'idée c'est de comparer l'attribut
name " "
de ce bouton avec le résultat d'une requête dans une autre page (page chaine).

si c'est ce bouton là avec cet attribut là qui est cliqué dans la page d'avant (page domaine) - > on affiche ça
si c'est un bouton là avec un autre attribut name dans la page d'avant (page domaine ) - > on affiche ça


PS : j'ai plusieurs bouton donc je ne peux pas mettre n'importe quel string (c'est la boucle qui doit générer cet attribut )

le problème est dans la ligne 9 dans le code d'en bas


cette ligne là :
if( isset($_POST["$z"]) )


////////ici je suis dans la page chaine///////

<?php


$domaine1 = $database->query('SELECT nom FROM domaine WHERE id = 1');
$domaine1 = $domaine1->fetch();
$z = $domaine1[0] ;


if( isset($_POST["$z"]) )
{
  // le,probléme est ici 
  try
  {
    $chaineX = $database->query('SELECT* FROM chaine WHERE domaine = 1');
    $chaineX = $chaineX->fetchAll(); 
    
  }catch(Exception $e)
  {
     echo "Erreur " . $e->getMessage();
  }
  $chainex = !empty($chaineX['nom']) ? $chaineX['nom']:"";

}



si c'est le même j'affiche ces chaines la dans la page chaine

mais ça marche pas

<?php 


if(!empty($chaineX))
{
?>
<form action="./traitement.php" method="post" >
<?php
foreach($chaineX as $chaine)
{

  // $domaineX = $domaineX->fetch();

?>  

<button  class="custom-btn btn-9" id="chaine" name="<?php echo htmlspecialchars($chaine[0]); ?>"> <?=$chaine["nom"] ?> </button> 

<?php
}
?>
</form>

<?php

}
?>
0
jordane45 Messages postés 38300 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 novembre 2024 4 704
28 déc. 2021 à 16:37
le problème c'est que tu es reparti sur ton code ... code foireux .. au lieu d'essayer de comprendre et d'utiliser celui que je t'ai donné...
Pour que tes boutons retournent quelque chose.. mets leur l'attribut VALUE (comme je l'ai fait )

Ensuite.. sur tes pages, fais un var_dump de la variable $_POST pour voir ce qu'elle contient lorsque tu cliques sur un bouton.
NB: Tu remarqueras également que j'ai mis le même "name" à chaque bouton.... car tu ne peux pas deviner à l'avance quelle sera le nom de la variable post avec ta méthode...
0