Start_session() 2 variables

Résolu/Fermé
Danielos - 1 août 2022 à 05:53
 Danielos - 1 août 2022 à 15:42

Bonjour,

J'ai cela qui me sert à récupérer une variable d'un formulaire précédemment envoyé et qui fonctionne très bien.

session_start(); // pour garder la variable $NumMembre après envoi d'un fichier

    $NumMembre = !empty($_GET['NumMembre']) ? $_GET['NumMembre'] : NULL;

 echo $NumMembre;   //affichage pdt développement
    if($NumMembre){
    $_SESSION['NumMembre'] = $NumMembre;
    }
    
    //On vérifie que $NumMembre est bien là
    $NumMembre = !empty($_SESSION['NumMembre']) ? $_SESSION['NumMembre'] : NULL; 

Je souhaitais récupérer une seconde variable ($Nom)...

J'ai essayé tout simplement de dupliquer mais sans succès. Seule la première variable est récupérée.

session_start(); // pour garder la variable $NumMembre après envoi d'un fichier

    $NumMembre = !empty($_GET['NumMembre']) ? $_GET['NumMembre'] : NULL;

 echo $NumMembre;   //affichage pdt développement
    if($NumMembre){
    $_SESSION['NumMembre'] = $NumMembre;
    }
    
    //On vérifie que $NumMembre est bien là
    $NumMembre = !empty($_SESSION['NumMembre']) ? $_SESSION['NumMembre'] : NULL; 

// Idem pour le Nom
    
 echo $Nom;   //affichage pdt développement
    if($Nom){
    $_SESSION['Nom'] = $Nom;
    }
    
    //On vérifie que $Nom est bien là
    $Nom = !empty($_SESSION['Nom']) ? $_SESSION['Nom'] : NULL; 

J'ai tenté ensuite cela sans plus de succès

session_start(); // pour garder la variable $NumMembre et $Nom après envoi d'un fichier

    $NumMembre = !empty($_GET['NumMembre'].['Nom']) ? $_GET['NumMembre'].['Nom'] : NULL;

 echo $NumMembre;   //affichage pdt développement
    if($NumMembre){
    $_SESSION['NumMembre'] = $NumMembre;
    }

Bon là, il m'affiche pas les variables mais Array

et plein d'autres tentatives mais toujours soldées par un échec.

Quelle est la bonne "orthographe" ? s'il vous plait.

Merci
Windows / Firefox 103.0

A voir également:

4 réponses

yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 Ambassadeur 1 550
1 août 2022 à 07:42

bonjour,

Je pense que ta première tentative est correcte.
Cependant, où assignes-tu une valeur à la variable $Nom?

1

Bonjour yg_be,

La valeur de la variable $Nom vient comme $NumMembre d'un formulaire précédent sur une page formulaire.php envoyé dans la bdd par une page envoi.php sur laquelle, les personnes peuvent alors en cliquant sur une icône uploader des fichiers c'est dans ce dernier code de la page envoiPJ.php que je renomme le fichier et l'upload.

Est-ce que cela répond à la question ? Sinon, je ne sui spas sûr de l'avoir comprise, désolé.

0
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 550
1 août 2022 à 13:31

Difficile de faire une suggestion sans voir l'ensemble du code.

0

Voici le code du fichier envoi.php

<?php
/*
ini_set('display_errors', '1');
error_reporting(E_ALL);
Echo "TEST";
*/

		//activation de l'affichage des erreurs PHP
		error_reporting(E_ALL);
		ini_set('display_errors', TRUE);
		ini_set('display_startup_errors', TRUE);

		//déclaration des variables
		$Nom = $_POST['Nom'];
		$Prenom = $_POST['Prenom'];
		$NumMembre = $_POST['NumMembre'];
		$Adresse =$_POST['Adresse'];
		$CP =$_POST['CP'];
		$Ville =$_POST['Ville'];
		$Tph = $_POST['Tph'];
		$Mail = $_POST['Mail'];
		$NumBrevetULM = $_POST['NumBrevetULM'];
		$Classe1 = $_POST['Classe1'];
		$Classe2 = $_POST['Classe2'];
		$Classe3 = $_POST['Classe3'];
		$Classe4 = $_POST['Classe4'];
		$Classe5 = $_POST['Classe5'];
		$Classe6 = $_POST['Classe6'];
		$FCL055 = $_POST['FCL055'];
		$Machine = $_POST['Machine'];
		$Immat = $_POST['Immat'];
		$Vitesse = $_POST['Vitesse'];
		$Autonomie = $_POST['Autonomie'];
		$Radio = $_POST['Radio'];
		$Transp = $_POST['Transp'];
		$Taille = $_POST['Taille'];
		$Commentaires = $_POST['Commentaires'];

	
		//test d'affichage des variables
	    /*
    	echo $Nom.'<br>';
        echo $Prenom.'<br>';
        echo $NumMembre.'<br>';
        echo $Adresse.'<br>';
		echo $CP.'<br>';
		echo $Ville.'<br>';
        echo $Tph.'<br>';
        echo $Mail.'<br>';
        echo $NumBrevetULM.'<br>';
		echo $Classe1.'<br>';
        echo $Classe2.'<br>';
        echo $Classe3.'<br>';
        echo $Classe4.'<br>';
        echo $Classe5.'<br>';
        echo $Classe6.'<br>';
        echo $FCL055.'<br>';
        echo $Machine.'<br>';
        echo $Immat.'<br>';
        echo $Vitesse.'<br>';
        echo $Autonomie.'<br>';
        echo $Radio.'<br>';
        echo $Transp.'<br>';
        echo $Taille.'<br>';
        echo $Commentaires.'<br>';
		*/
		//Test OK => passage en commentaire

		//on inclut le fichier de connexion à la bdd
		require_once "../secure/cnxBddADT.php";
	 
		//$sth appartient à la classe PDOStatement
		$sth = $bdd->prepare("INSERT INTO Inscriptions_rallye (Nom, Prenom, NumMembre, Adresse, CP, Ville, Tph, Mail, NumBrevetULM, Classe1, Classe2, Classe3, Classe4, Classe5, Classe6, FCL055, Machine, Immat, Vitesse, Autonomie, Radio, Transp, Taille, Commentaires) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
		$sth->execute(array($Nom, $Prenom, $NumMembre, $Adresse, $CP, $Ville, $Tph, $Mail, $NumBrevetULM, $Classe1, $Classe2, $Classe3, $Classe4, $Classe5, $Classe6, $FCL055, $Machine, $Immat, $Vitesse, $Autonomie, $Radio, $Transp, $Taille, $Commentaires));
           
		 echo '<br><br>	Votre inscription a bien &eacute;t&eacute; transmise.  Merci 
		 <br><br><br>         Vous pouvez adresser vos justificatifs : Carte Nationale d\'Identité, Passeport, Carte jaune, brevet ULM, ... (en version pdf) en suivant ce lien : <a href="EnvoiPJ.php?NumMembre='.urlencode($NumMembre).'"><img src="" border="0" align="absmiddle" /></a>
		 <br><br>
		 <br><br>
		 
		 <p align="right"> Vous pouvez quitter votre navigateur avec la croix en haut à droite ;-) &emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;</p>'; 

?>

et là celui de envoiPJ.php qui s'ouvre à partir du précédent.

<?php
// Page pour ajout des PJ lors de l'inscription.
//

session_start(); // pour garder la variable $NumMembre après envoi d'un fichier

    $NumMembre = !empty($_GET['NumMembre']) ? $_GET['NumMembre'] : NULL;

 echo $NumMembre;   //affichage pdt développement
    if($NumMembre){
    $_SESSION['NumMembre'] = $NumMembre;
    }
    
    //On vérifie que $NumMembre est bien là
    $NumMembre = !empty($_SESSION['NumMembre']) ? $_SESSION['NumMembre'] : NULL; 

/*
// Idem pour le Nom
    
 echo $Nom;   //affichage pdt développement
    if($Nom){
    $_SESSION['Nom'] = $Nom;
    }
    
    //On vérifie que $Nom est bien là
    $Nom = !empty($_SESSION['Nom']) ? $_SESSION['Nom'] : NULL; 

   

    //Affichage pdt développement
/*  if($NumMembre){
         echo "affichage 1  N° Membre : ".$NumMembre."<br> ";
    }
    else {
        echo "1 On a perdu la variable Num";
    }

  if($Nom){
         echo "affichage 1  Nom : ".$Nom."<br> ";
    }
    else {
        echo "1 On a perdu la variable Nom";
    }

*/

// suite du code après la partie HTML pour avoir les résultats affichés sous le HTML
?>

<!DOCTYPE html>
<html lang="fr">
<head>
     <meta charset="UTF-8">
    <title>Formulaire d'upload de fichiers</title>
</head>
<body>
    <form action="EnvoiPJ.php" method="post" enctype="multipart/form-data">
        <h2>Upload de vos fichiers</h2>
        <div>
            <label for="fileUpload">Fichier:</label>
            <input type="file" name="fichier" id="fileUpload">
            <input type="submit" name="submit" value="Envoyer">
            <p><strong>Note:</strong> Seuls les formats .pdf sont autorisés avec une taille maximale de 1,0 Mo.</p>
        </div>
    </form>
</body>
</html>

<?php
// Suite du code

    // Récup du NumMembre (ne fonctionne pas s'il est dans la 1ère partie : à cause de la coupure avec le HTML)
    $NumMembre = !empty($_SESSION['NumMembre']) ? $_SESSION['NumMembre'] : NULL; 
/*    
    //Affichage pdt développement
    if($NumMembre){
         echo "affichage 2  N° Membre : ".$NumMembre."<br> ";
    }
    else {
        echo "2 On a perdu la variable Num";
    }
*/
    // Vérifier si le formulaire a été soumis
    if($_SERVER["REQUEST_METHOD"] == "POST"){
    
    // Vérifie si le fichier a été uploadé sans erreur.
    if(isset($_FILES["fichier"]) && $_FILES["fichier"]["error"] == 0){
        $allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "pdf" => "application/pdf");
        $filename = $_FILES["fichier"]["name"];
        $filetype = $_FILES["fichier"]["type"];
        $filesize = $_FILES["fichier"]["size"];

    //On vérifie que $NumMembre et $Nom sont bien là (pdt le développement)
//    echo "affichage 3  N° Membre, Nom et fichier : ".$NumMembre.", ".$Nom." et ".$filename."<br> ";

        // Vérifie la taille du fichier - 1,5Mo maximum
        $maxsize = 1572864;     // 1,5*1024*1024
        if($filesize > $maxsize) die("<font color=red>Error: La taille du fichier est supérieure à la limite autorisée.</font>");

        // Formate le nom du fichier en remplaçant les caractères accentués.
  $table = array(
        'Š'=>'S', 'š'=>'s', 'Đ'=>'Dj', 'đ'=>'dj', 'Ž'=>'Z', 'ž'=>'z', 'Č'=>'C', 'č'=>'c', 'Ć'=>'C', 'ć'=>'c',
        'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
        'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
        'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss',
        'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e',
        'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o',
        'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
        'ÿ'=>'y', 'Ŕ'=>'R', 'ŕ'=>'r',
        );
   
        $filename = strtr($filename, $table);
  
        // Mettre le nom du fichier en minuscule (surtout pour l'extension)
        $filename = strtolower($filename);


        // En remplaçant les caractères autres que l'alphabet et les chiffres par des tirets (évite entre autre "hack.php\0.pdf" par exemple 
        $filename = preg_replace('#([^.a-z0-9]+)#i', '-',  $filename);

        // Ajoute NumMembre et Nom devant le nom du fichier
//        $iden=$NumMembre.'-'.$Nom;
//    echo $iden.'<br>';
        if($NumMembre && $filename){      // if($iden && $filename){ 
        $filename = $NumMembre." ".$filename;     //$filename = $iden." ".$filename;
        }
//     echo $filename;
        // Vérifie l'extension du fichier
        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        if(!array_key_exists($ext, $allowed)) die("<font color=red>Erreur : Veuillez sélectionner un format de fichier valide.</font>");

        // Vérifie le type MIME du fichier
        if(in_array($filetype, $allowed)){
            // Vérifie si le fichier existe avant de le télécharger.
            if(file_exists("uploads/" . $filename)){
                echo $filename . " existe déjà.";
            } else{
                move_uploaded_file($_FILES["fichier"]["tmp_name"], "uploads/" . $filename);
                echo "<font color=green> Votre fichier a été téléchargé avec succès. </font><br>
                Fichier = $filename  -  Taille = $filesize  -  Type MINE = $filetype.<br><br>
                Lorsque vous aurez terminé d'envoyer les fichiers souhaités, il suffira de fermer la page (croix en haut à droite)";
                
 //Partie effacée d'envoi d'un mail pour information de l'upload.
//
//
            } 
        } else{
            echo "Error: Il y a eu un problème de téléchargement de votre fichier. Veuillez réessayer."; 
        }
    } else{
        echo "Error: " . $_FILES["fichier"]["error"];
    }
}



?>
0
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 550
1 août 2022 à 14:15

Il manque une partie du code, peut-être formulaire.php?

Je pense que tu n'as pas compris comment fonctionnait l'enchainement des pages.  Du coup, tu n'utilises pas correctement les variables de session.

Commence peut-être par expliquer ce que tu veux obtenir en réalité, ce que tu veux améliorer dans ton site.

0
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 550 > yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024
1 août 2022 à 14:37

Je suggère:

  • au début de envoi.php, ajoute "session_start();"
  • dans envoi.php, ajoute, vers la fin: "$_SESSION['NumMembre'] = $NumMembre;" et "$_SESSION['Nom'] = $Nom;"
  • dans envoiPJ.php, supprime tous les ""$_SESSION['...'] = ...;" et tous les "$NumMembre = ...;"
  • dans envoiPJ.php, ajoute, après le "session_start();": "$NumMembre = $_SESSION['NumMembre'] ;" et "$Nom = $_SESSION['Nom'] ;"
1

Suggestion excellente ;-) ça marche nickel.

Merci beaucoup. Je commence à saisir le fonctionnement de session_start et des superglobales.

Bonne journée.

Sujet à fermer (dès que je trouve le bouton).

0