Articles - PHP

Site Web avec PHP et MySQL

  |   18028  |  PHP
Sommaire :

Transmettre des donn?es de page en page




    Envoyer des donn?es dans l'URL



    Envoie des donn?es


    Soit deux pages index.php et bonjour.php. La page index.php envoie les variables nom et pr?nom ? la page bonjour.php. Cette derni?re les r?cup?re et affiche bonjour ? la personne.

    Il suffit de cr?er un lien avec des param?tres qui m?ne vers la page bonjour de la forme suivante :
    page.php?param1=valeur1?m2=valeur2?m3=valeur3?m4=valeur4?


    Il n'est pas conseill? de d?passer les 256 caract?res

    Ouvrez index.php et ins?rez-y par exemple le code suivant :

    Code HTML :
    <a href="bonjour.php?nom=Dupont&prenom=Jean">Dis-moi bonjour !</a>


    R?cup?ration des donn?es



    La commande $_GET permet de r?cup?rer les donn?es. On va d'abord tester l?existence des param?tres avant de les r?cup?rer au cas o? le visiteur aurait trafiquer l'URL

    Code PHP :
     
    <?php
    //La commande isset teste l'existence des param?tres
    if (isset($_GET['prenom']) AND isset($_GET['nom'])) // On a le nom et le pr?nom
    {
        echo 'Bonjour ' . $_GET['prenom'] . ' ' . $_GET['nom'] . ' !';
    }
    else // Il manque des param?tres, on avertit le visiteur
    {
        echo 'Il faut renseigner un nom et un pr?nom !';
    }
    ?>
     


    Envoyer des donn?es via un formulaire



    Base du formulaire



    Code HTML :
     
    <form method="post" action="page_cible.php">
    <p>
        On ins?rera ici les ?l?ments de notre formulaire.
    </p>
    </form>
     


    Les donn?es seront r?cup?r?es gr?ce ? la fonction $_POST.

    Les ?l?ments du formulaire



    Code HTML :
     
    <!--//**********************************************************************************************
    //champ de texte
    //name(obligatoire)  : La valeur du champ r?cup?r?e via $_POST['pseudo']
    //value(facultatif) : valeur par d?faut du champ
    //**********************************************************************************************-->
    <input type="text" name="pseudo"  value="pearson"/>
    <!--//**********************************************************************************************
    //Les grandes zones de texte
    //R?cup?ration du contenu via $_POST['message']
    //**********************************************************************************************-->
    <textarea name="message" rows="8" cols="45">
    Votre message ici.
    </textarea>
    <!--//**********************************************************************************************
    //La liste d?roulante
    //Une variable $_POST['choix'] contenant le choix de l'utilisateur est cr??. 
    //S'il a choisi ? Choix 3 ?, la variable $_POST['choix'] sera ?gale au value correspondant, c'est-?-dire choix3.
    //**********************************************************************************************-->
    <select name="choix">
        <option value="choix1">Choix 1</option>
        <option value="choix2" selected="selected">Choix 2</option>//choix par d?faut gr?ce ? l'option selected
        <option value="choix3">Choix 3</option>
    </select>
    <!--//**********************************************************************************************
    //Case ? cocher
    //la variable $_POST['case'] est cr??e dans la page cible. Si elle est coch?e, sa valeur est ?gale "on"; sinon elle n'existe pas
    //Pour cocher une case par d?faut : mettre l'attribut checked="checked"
    // Faire un test avec isset($_POST['case']) pour v?rifier si la case a ?t? coch?e ou non.
    **********************************************************************************************-->
    <input type="checkbox" name="case" id="case" /> <label for="case">case</label> 
    <!--**********************************************************************************************
    //Bouton d?options
    //Pour pr?-cocher une case par d?faut : mettre l'attribut checked="checked"
    //Variable cr??e $_POST['frites']. Elle aura la valeur du bouton d'option choisi par le visiteur, issue de l'attribut value. 
    //Si on aime les frites, alors on aura $_POST['frites'] = 'oui'.
    //**********************************************************************************************-->
    Aimez-vous les frites ?
    <input type="radio" name="frites" value="oui" id="oui" checked="checked" /> <label for="oui">Oui</label>
    <input type="radio" name="frites" value="non" id="non" /> <label for="non">Non</label>
    <!--**********************************************************************************************
    //Les champs cach?s
    //Le champ n'est pas affich? aux visiteurs mais il est envoy? ? la page cible lors de la validation du formulaire
    //**********************************************************************************************-->
    <input type="hidden" name="pseudo" value="pearson" />
    <!--**********************************************************************************************
    //Bouton d?envois du formulaire
    //**********************************************************************************************-->
    <input type="submit" value="Valider" />
     


    champ de texte

    Les grandes zones de texte

    La liste d?roulante

    Case ? cocher




    Bouton d'options Aimez-vous les frites ?

    Bouton valider



    R?cup?ration des donn?es



    Code PHP :
     
    <?php 
    //?chappement des balises html
    echo htmlspecialchars($_POST['prenom']); 
    //suppression des balises html
    echo strip_tags($_POST['prenom']);
    ?>
     



    Notez l'utilisation de la fonction htmlspecialchars. Elle permet d'?chapper les balises HTML ins?r?es par le visiteurs prot?geant ainsi votre site d'?ventuelles attaques. Les balises HTML seront affich?es mais non ex?cut?es.



    Si vous pr?f?rez retirer les balises HTML que le visiteur a tent? d'envoyer plut?t que de les afficher, utilisez la fonction strip_tags.


    Envoyer un fichier



    Formulaire d'envois



    Si le formulaire propose aux visiteurs d'envoyer un fichier, il faut ajouter l'attribut enctype="multipart/form-data" ? la balise <form>.

    Code HTML :
     
    <form action="page_cible.php" method="post" enctype="multipart/form-data">
            <p>
                    Formulaire d'envoi de fichier :<br />
                    <input type="file" name="monfichier" /><br />
                    <input type="submit" value="Envoyer le fichier" />
            </p>
    </form>
     


    Traitement de l'envoi



    Code PHP :
     
    <?php
    // Testons si le fichier a bien ?t? envoy? et s'il n'y a pas d'erreur
    if (isset($_FILES['monfichier']) AND $_FILES['monfichier']['error'] == 0)
    {
            // Testons si le fichier n'est pas trop gros
            if ($_FILES['monfichier']['size'] <= 1000000) // en octet; 1 MO = 1000 000 octets
            {
                    // Testons si l'extension est autoris?e
                    $infosfichier = pathinfo($_FILES['monfichier']['name']);
                    $extension_upload = $infosfichier['extension'];
                    $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
                    if (in_array($extension_upload, $extensions_autorisees))
                    {
                            // On peut valider le fichier et le stocker d?finitivement
                            move_uploaded_file($_FILES['monfichier']['tmp_name'], 'uploads/' . basename($_FILES['monfichier']['name']));
                            echo "L'envoi a bien ?t? effectu? !";
                    }
            }
    }
    ?>
     



    Le fichier est plac? dans le dossier uploads. V?rifiez que le dossier upload existe sur le serveur et qu'il a les droits d'?criture (CHMOD 733)



    Ce script est encore ? am?liorer. Par exemple, si le nom du fichier contient des espaces ou des accents, ?a posera un probl?me une fois envoy? sur le Web. D'autre part, si quelqu'un envoie un fichier qui a le m?me nom que celui d'une autre personne, l'ancien sera ?cras? !
    La solution consiste en g?n?ral ? ? choisir ? nous-m?mes le nom du fichier stock? sur le serveur plut?t que de se servir du nom d'origine. Vous pouvez faire un compteur qui s'incr?mente : 1.png, 2.png, 3.jpg, etc.


    Les variables superglobales, sessions et cookie



    Les variables superglobales sont accessibles sur toutes les pages de votre site.

    Les sessions



    Pour chaque visiteur, un num?ro de session unique est cr?? automatiquement par PHP. PHP transmet cet ID de page en page en utilisant g?n?ralement un cookie.

    • session_start() : d?marre le syst?me de sessions.
    • session_destroy() : ferme la session du visiteur. Cette fonction est automatiquement appel?e lorsque le visiteur ne charge plus de page de votre site pendant plusieurs minutes (c'est le timeout), mais elle peut ?tre utilis?e pour la d?connexion manuelle du visiteur.



    Il faut appeler session_start() sur chacune de vos pages AVANT d'?crire le moindre code HTML (avant m?me la balise <!DOCTYPE> ). Si vous oubliez de lancer session_start(), vous ne pourrez pas acc?der aux variables superglobales $_SESSION


    Exemple
    Code HTML :
     
    <?php
    // On d?marre la session AVANT d'?crire du code HTML
    session_start();
     
    // On s'amuse ? cr?er quelques variables de session dans $_SESSION
    $_SESSION['prenom'] = 'Jean';
    $_SESSION['nom'] = 'Dupont';
    $_SESSION['age'] = 24;
    ?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
       <head>
           <title>Titre de ma page</title>
        </head>
        <body>
        <p>
            Salut <?php echo $_SESSION['prenom']; ?> !<br />
            Tu es ? l'accueil de mon site (index.php). Tu veux aller sur une autre page ?
        </p>
        </body>
    </html>
     


    Les cookies



    Un cookie, c'est un petit fichier que l'on enregistre sur l'ordinateur du visiteur. Ce fichier contient du texte permettant de ? retenir ? des informations sur le visiteur.

    Ecrire un cookie

    On utilise la fonction PHP setcookie en lui donnant, en g?n?ral trois param?tres, dans l'ordre suivant :

    le nom du cookie (ex. : pseudo) ;
    la valeur du cookie (ex. : M@teo21) ;
    la date d'expiration du cookie, sous forme de timestamp (ex. : 1090521508).

    Si vous voulez supprimer le cookie dans un an, il vous faudra donc ?crire : time() + 365*24*3600. Cela veut dire : timestamp actuel $+$ nombre de secondes dans une ann?e.

    La commande est la suivante pour cr?er un cookie:

    Code PHP :
     
    <?php setcookie('pseudo', 'M@teo21', time() + 365*24*3600); 
    //S?curiser son cookie avec le mode httpOnly; le dernier true active le httpOnly
    setcookie('pseudo', 'M@teo21', time() + 365*24*3600, null, null, false, true);
    ?>
     



    Comme pour session_start, setcookie ne marche QUE si vous l'appelez avant tout code HTML (donc avant la balise <!DOCTYPE>;).


    Code PHP :
     
    <?php
    setcookie('pseudo', 'M@teo21', time() + 365*24*3600, null, null, false, true); // On ?crit un cookie
    setcookie('pays', 'France', time() + 365*24*3600, null, null, false, true); // On ?crit un autre cookie...
     
    // Et SEULEMENT MAINTENANT, on peut commencer ? ?crire du code html
    ?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
       <head>
           <title>Ma super page PHP</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        </head>
        <body>
     
      etc.
     


    Afficher un cookie


    Il faut faire un isset pour v?rifier si le cookie existe ou non.


    Code PHP :
     
    <p>
        H? ! Je me souviens de toi !<br />
        Tu t'appelles <?php echo $_COOKIE['pseudo']; ?> et tu viens de <?php echo $_COOKIE['pays']; ?> c'est bien ?a ?
    </p>
     



    Les cookies viennent du visiteur. Il peut les avoir modifi?s, donc soyez prudents et n'ayez pas une confiance aveugle en leur contenu !


    Modifier un cookie existant
    Code PHP :
     
    setcookie('pays', 'Chine', time() + 365*24*3600, null, null, false, true);
     





    Licence - Pas d?Utilisation Commerciale - Partage dans les M?mes Conditions
    Licence Creative Commons