bonsoir j'ai un petit soucis que je vai essayer d'expliquer

j'ai une page qui en appelle une seconde qui reçoit des données via méthode post, jusque là pas de soucis.
Mais je souhaiterai que toute les x seconde elle se rafraîchisse jusque là ça va,

<META HTTP-EQUIV="Refresh" CONTENT="10">

mais le soucis c'est que je perd mes données envoyé via le méthode post d'avant, ce qui est normal vu que je les renvoie pas.

Comment puis je faire pour, sois mémoriser les infos envoyées au départ, ou pour les renvoyer à chaque tour.

Merci d'avance pour vos précieux conseils

Flo

12 réponses


s4p
Réponse acceptée

Pour pouvoir utiliser les sessions, il faut, avant tout écriture sur le document ou déclaration de header, faire un :

<?php session_start(); ?>

Si ton application possède un unique point d'entrée (fichier qui reçoit toutes les requêtes et qui s'occupe de savoir quelle fonction appeller etc..) c'est à cet endroit qu'il faut mettre cette ligne.

Ensuite ? C'est tout !

<?php
    $_SESSION'user_id'] = 12345;
?>

Ainsi, et tant que l'utilisateur reste sur ton site, $_SESSION'user_id'] vaudra 12345 pour lui et lui seul.

Avec les sessions PHP ?

session_start();
// la session n'existe pas, on l'initialise.
if (!isset($_SESSION'data'])) $_SESSION'data'] = array();
// on push dans $_SESSION les données envoyées en POST
$_SESSION'data']] = $_POST;

Pour exécuter une fonction toute les x secondes, tu peux aussi utiliser :

setInterval(function(){

}, x * 1000);

Et pour envoyer tes données dans un setInterval :

$.post('ton_url.php', {data: 'les données à envoyer'}, function(response){
    // requête exécutée avec succès. 
});

Pour utiliser $.post, il faut charger jQuery en ajoutant dans ton head :

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>

Et pour l'utiliser, il faut déplacer ton code dans une fonction pour être sûr que jQuery est bien chargé :

$(document).ready(function(){
    // ton script içi
});

Car avec une meta refresh, c'est toute ta page qui est rechargée à chaque fois

flo3376
Auteur

ça m'ennui, car si c'est l'une des approches que je voulais éviter, c'était bien les session, je les ai en horreur. Donc je passe mon chemin pour le rafraichissement.

Merci pour ta réponse.

Pourquoi donc as tu les sessions en horreur ?
A mon avis c'est le moyen le plus simple...
Après tu peux stocker en base de données
ou faire des allé retour de toutes les données précédemment envoyées en javascript, mais bon...

flo3376
Auteur

pour répondre à ta question,

la première chose que j'ai essayée en php, était le tuto de la page sécurisé de grafikart.
Cela à tellement merdé au départ que j'ai faillit laisé tombé le php et sql, mais j'ai persévéré pour l'honneur, j'ai reussi, j'ai une page qui tourne depuis 6 mois nickel avec, mais je me suis jurée 2 choses:
-jamais plus je ne remettrai de système de session
-faire manger le manuel php à celui qui à crée les sessions.

pour résumé, moi vivant aucun autre de mes site ne sera équipé de session.

Pour l'histoire de la bd ça va compliquer la tache mais je vais y réfléchir quand même.

Mais les sessions, si je ne me trompe pas, c'est juste une variable accessible tant que l'utilisateur est toujours connecté au nom de domaine, comment peux tu rejeter ça à ce point ?
Je n'ai jamais rencontré de problème avec, et c'est vraiment super pratique, pour toute sorte de choses...
Qu'est-ce qui n'allait pas dans ton code à l'époque ?
Comment comptes-tu contourner ça ?

flo3376
Auteur

et dire que ça risque d'être la clé de voûte de tout mon truc les boulles.

bon, alors pour résumé, je n'ai jamais réussi à assimiler cette "technique", c'est comme les LOG népériens ça ne passe pas,

aurais tu un exemple basique complet pour montrer car je sens que le left join en sql c'est une pure rigolage à coté des sessions.

je balance le code de la page au cas où tu voudrais bien m'expliquer comment l'intégrer.

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link rel="stylesheet" href="style.css" type="text/css" media="screen"/>
        <title>Ecran de control des révision</title>
    </head>

<body bgcolor="#333333"> 
<body>

<?php
require ("db.php");
extract($_POST);
    $link = mysql_connect ($dbhost,$dbuser,$dbpass) or die ('Erreur : '.mysql_error() );
    mysql_select_db($db) or die ('Erreur :'.mysql_error());

//recherche dans les vols effectué
$select1 = "SELECT aircraft, flighttime,distance,accepted FROM tracker_pireps WHERE aircraft='$avion'";
$result1 = mysql_query($select1,$link) or die ('Erreur : '.mysql_error() );
$total1 = mysql_num_rows($result1); 
if($total1) 
    {
        while(($row = mysql_fetch_array($result1))) 
            {
                $idavion=$row"aircraft"];
                ${'sortie'.$idavion}=${'sortie'.$idavion}+1;
                $heure_normale = floor(${'heure'.$idavion});
                $minute_apres_virgule = ((${'heure'.$idavion} - $heure_normale )*100);
                $heure_normale2 = floor($row"flighttime"]);
                $minute_apres_virgule2 = (($row"flighttime"] - $heure_normale2 )*100);
                $minute_apres_virgule=$minute_apres_virgule+$minute_apres_virgule2;
                if ($minute_apres_virgule>59)
                 {
                    $minute_apres_virgule=$minute_apres_virgule-60;
                    $heure_normale=$heure_normale+$heure_normale2+1;
                 }
                 else
                 {
                    $minute_apres_virgule=$minute_apres_virgule;
                    $heure_normale=$heure_normale+$heure_normale2;
                 }
                ${'heurenormal'.$idavion}=$heure_normale;
                ${'minutenormal'.$idavion}=sprintf("%02d",floor($minute_apres_virgule));
                ${'heure'.$idavion}=($heure_normale+($minute_apres_virgule/100));
                ${'distance'.$idavion}=${'distance'.$idavion}+$row"distance"];
            }
    }

//recherche dans les avions
$select2 = "SELECT id, icao,name,fullname , registration, imagelink, range, weight, cruise , maxpax, maxcargo, minrank,ranklevel,enabled
            FROM tracker_aircraft WHERE id='$avion'";
$result2 = mysql_query($select2,$link) or die ('Erreur : '.mysql_error() );
$total2 = mysql_num_rows($result2);
if($total2) 
    {   
        while(($row = mysql_fetch_array($result2))) 
            {
                $idavion=$row"id"];
                ${'icao'.$idavion}=$row"icao"];
                ${'name'.$idavion}=$row"name"];
                ${'fullname'.$idavion}=$row"fullname"];
                ${'registration'.$idavion}=$row"registration"];
                ${'imagelink'.$idavion}=$row"imagelink"];
                ${'range'.$idavion}=$row"range"];
                ${'weight'.$idavion}=$row"weight"];
                ${'cruise'.$idavion}=$row"cruise"];
                ${'maxpax'.$idavion}=$row"maxpax"];
                ${'maxcargo'.$idavion}=$row"maxcargo"];
                ${'minrank'.$idavion}=$row"minrank"];
                ${'ranklevel'.$idavion}=$row"ranklevel"];
                ${'enabled'.$idavion}=$row"enabled"];
                ${'range'.$idavion}=$row"range"];
            }
    }

//recherche dans les révisions
$select4 = "SELECT id, name,ddrev,drev,rev,cpt,enable,schedules FROM tracker_revision WHERE id='$avion'";
$result4 = mysql_query($select4,$link) or die ('Erreur : '.mysql_error() );
$total4 = mysql_num_rows($result4); 
if($total4) 
    {   
        while(($row = mysql_fetch_array($result1))) 
            {
                $idavion=$row"id"];
                ${'ddrev'.$idavion}=$row"ddrev"];
                ${'drev'.$idavion}=$row"drev"];
                ${'rev'.$idavion}=$row"rev"];
                ${'cpt'.$idavion}=$row"cpt"];
                ${'enable'.$idavion}=$row"enable"];
            //  echo date('d/m/Y H:i', $row"ddrev"]);
            //  echo '<br>';
            }
    }
$select5 = "SELECT rev from tracker_revision where id='$avion'";
$result5 = mysql_query($select5,$link) or die ('Erreur : '.mysql_error() );

if($result5)
    {
        while(($row = mysql_fetch_array($result5))) 
            {
                $rev=$row"rev"];
            }
    }
if (isset($_POST) && empty($_POST'pilote']))
    {
        ?>
        <form action="bonrev.php" method="post"
        onsubmit="window.open ('blank', 'Fiche de révision', config='height=450, width=750, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, directories=no, status=no');">

        <FONT color="#C49320"> 
        Numéro du trakceur sans les zéros: <input type="text" name="pilote"/><br/>
        Mail : <input type="text" name="mail"/><br/>
        </FONT>
        <input type="hidden" name="avion" value="<?php echo $idavion; ?>" />
        <input type="submit" value="me connecter"/>
        </form>

        <?php
    }
if (isset($_POST) && !empty($_POST'pilote']) && !empty($_POST'mail']))
{
    extract($_POST);

    $link = mysql_connect ($dbhost,$dbuser,$dbpass) or die ('Erreur : '.mysql_error() );
    mysql_select_db($db) or die ('Erreur :'.mysql_error());
    $select1 = "SELECT pilotid FROM tracker_pilots WHERE `email`='$mail'";
    $result1 = mysql_query($select1,$link) or die ('Erreur : '.mysql_error() );
    $total1 = mysql_num_rows($result1); 
    if ($total1)
        {   
            while(($row = mysql_fetch_array($result1))) 
                {
                    $pilot=$row"pilotid"];
                }
            if ($pilotid==$login)   
                {

            $idavion=$avion;

            ?><div class="conteneur"><div class="colone1"><div class="contenant"><?php echo'<img src="'.${'imagelink'.$idavion}.'" width="300" height="auto" />';?></div></div>
            <div class="colone2"><div class="contenant"><?php echo 'ID de l\'avion:';?></div><div class="contenu"><?php echo " $idavion";?></div><?php
                    echo '<br>';
            ?><div class="contenant"><?php echo 'Nom complet de l\' avion:'?></div><div class="contenu"><?php echo " ${'fullname'.$idavion}";?></div><?php
                    echo '<br>';
            ?><div class="contenant"><?php echo 'Immatriculation:';?></div><div class="contenu"><?php echo " ${'registration'.$idavion}";?></div><?php
                    echo '<br>';
            ?><div class="contenant"><?php echo 'Poids:';?></div><div class="contenu"><?php echo " ${'weight'.$idavion} Tonnes";?></div><?php
                    echo '<br>';
            ?><div class="contenant"><?php echo 'A réviser:';?></div><div class="contenu">
            <?php
            if (${'enabled'.$idavion}==0)
                {
                    echo " OUI";
                    echo '<br>';
                }
            else if (${'enabled'.$idavion}==1)
                {
                    echo " NON";
                }
                    echo '<br>';
            ?></div><?php       
            ?><div class="contenant"><?php echo 'Distance totale parcourue:';?></div><div class="contenu"><?php echo " ${'distance'.$idavion} Nts";?></div><?php
                    echo '<br>';    
            ?><div class="contenant"><?php echo 'Nombre total de sorties:';?></div><div class="contenu"><?php echo " ${'sortie'.$idavion}";?></div><?php
                    echo '<br>';    
            ?><div class="contenant"><?php echo 'Temps total de vol:';?></div><div class="contenu"><?php echo " ${'heurenormal'.$idavion} H ${'minutenormal'.$idavion}";?></div><?php
                    echo '<br>';
                    echo '<br>';
            ?><div class="contenant"><?php echo 'Dernière révision effectuées:';?></div><div class="contenu"><?php echo " ${'drev'.$idavion}";?></div><?php
                echo '<br>';
                echo '<br>';
            ?><div class="contenant"><?php echo 'Type de révision à effectuer:';?></div><div class="contenu"><?php echo " $rev";?></div></div><?php
                echo '<br>';
                echo '<br>';
                echo '<br>';
            ?><div class="contenant"><?php echo 'Descriptif de la révision:';?></div><div class="contenu"><?php echo " ${'crev'.$rev}";?></div><?php
                echo '<br>';
                echo '<br>';
                echo '<br>';
            if ((${'enabled'.$idavion}==0) && (isset($_POST) && empty($_POST'pilote']) && empty($_POST'mail'])))
                {
                    ?>
                    <form action="bonrev.php" method="post" target="Fiche de révision"
                    onsubmit="window.open ('blank', 'Fiche de révision', config='height=450, width=750, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, directories=no, status=no');">
                    <input type="hidden" name="avion" value="<?php echo $idavion;?>" />
                    <input type="hidden" name="rev" value="<?php echo $nv; ?>" />
                    <input type="hidden" name="idr" value="<?php echo $login; ?>" />
                    <input type="submit" value="Prendre en charge le vol de révision"/>
                    </form>
                    <?php
                }
            echo '<br>';    

            ?></div><?php

                }
        }
    else 
        {
        echo "mauvais identifiants";
        }
}

?>
</br>

et la partie avec les variable venant de l'autre page

<form action="bonrev.php" method="post"
        onsubmit="window.open ('blank', 'Fiche de révision', config='height=450, width=750, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, directories=no, status=no');">

        <FONT color="#C49320"> 
        Numéro du trakceur sans les zéros: <input type="text" name="pilote"/><br/>
        Mail : <input type="text" name="mail"/><br/>
        </FONT>

        <input type="hidden" name="avion" value="<?php echo $idavion; ?>" />
        <input type="submit" value="me connecter"/>
        </form>

merci d'avance

flo3376
Auteur

donc si je te suis bien je peux faire ça:
pour stocker

<?php
    $_SESSION'user_id'] = 12345;
    $_SESSION'user_mail'] = 12345;
    $_SESSION'user_avion'] = 12345;
    $_SESSION'user_rev'] = 12345;
    ....
?>

et pour récupérer mes données

<?php
    $pilot=$_SESSION'user_id'];
    $mail=$_SESSION'user_mail'];
    $avion=$_SESSION'user_avion'];
    $rev=$_SESSION'user_rev'];
    ....
?>

mais il faut que j'initialise toute mes pages qui ont besoin des variables avec

<?php session_start(); ?>

Exactement je t'invite à essayer de suite :)

flo3376
Auteur

bon je vais être court en temps, mais je vais essayer ce matin

flo3376
Auteur

j' ai essayé mais ça coince,

Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively in Unknown on line 0

bon là je pense que c'est moi

l'utilisation des session sont en ligne 25 et 165

<?php session_start(); ?>
.......
extract($_POST);
echo "test récupération";
echo '<br>';
if (isset($_POST) && empty($_POST'pilote'])&& empty($_POST'mail'])&& empty($_POST'avion'])&& empty($_POST'rev'])&& !empty($_SESSION'pilote'])&& !empty($_SESSION'mail'])&& !empty($_SESSION'avion'])&& !empty($_SESSION'rev']))
    {
                    echo "récupération";
                    echo '<br>';
    $pilote=$_SESSION'pilote'];
    $mail=$_SESSION'mail'];
    $avion=$_SESSION'avion'];
    $nv=$_SESSION'rev'] ;
    }
......
if (isset($_POST) && !empty($_POST'pilote']) && !empty($_POST'mail']))
{
echo "envoie";
echo '<br>';
    extract($_POST);
    $_SESSION'pilote'] = $pilote;
    $_SESSION'mail'] = $mail;
    $_SESSION'avion'] = $avion;
    $_SESSION'rev'] = $nv;
 echo " fin envoie";
}

?>
</br>

mais j'ai trouvé pourquoi ici

car mon post méthode utilisé les mêmes nom de variable, j'ai collé des 2 au cul des session et le message à disparu, donc je test ce midi si ça mémorise bien

flo3376
Auteur

y a de l'idée, ça marche sans marcher, mais là c'est mon code qui catouille, les infos sont bien mémorisé et disponible aprés le refresh.

Merci