[PHP] Sessione Login

miagy

Utente Attivo
2 Nov 2014
70
0
6
Ciao ragazzi.
Data una tabella MySql chiamata event, ho creato un calendario di "promemoria" che funziona correttamente. Quando un dato, attualmente globale, viene inserito, l'icona del calendario si riempie attraverso questo pezzo sorgente:

PHP:
for ($list_day = 1; $list_day <= $daysinmonth; $list_day++) {
        $tm = date("U", mktime(0, 0, 0, $month, $list_day, $year)) - 86400; // Bir gün önce
        $tn = date("U", mktime(0, 0, 0, $month, $list_day, $year)); // O gün ...
        $tp = date("U", mktime(0, 0, 0, $month, $list_day, $year)) + 86400; // Bir gün sonra
        $Q = sprintf("SELECT * FROM ´events´ WHERE ´Autore´ = ´$Autore´ AND ´date´ > ´%s´ AND ´date´ < ´%s´ AND ´day´ = ´%s´;", $tm, $tp, $list_day);
        $R = mysql_query($Q);
        $D = mysql_fetch_assoc($R);
        $S = mysql_num_rows($R);
        $Y = $D[´date´];
        $TheDay = date(´d´, $Y);
        $TheMon = date(´F´, $Y);
        $TheYea = date(´Y´, $Y);
        $time = $D[´time´];
        list($hour, $minute) = explode(´:´, $time);
        mysql_free_result($R);
        if (($S) AND ($Autore == ´´)) {
        ?>
            <td align="center" style="background-color: #FFFFFF; color: #FFFFFF; border: 1px solid #FFFFFF; cursor: pointer;" onmouseover="return overlib(´<table width="100%" border="0" class="popupDateTable"><tr><td align="center" class="popupDate"><?php echo stripslashes($D[´title´]); ?> ore <?php echo date($D[´time´]); ?> <?php echo ´@´ . stripslashes($D[´location´]); ?></td></tr></table>´);" onmouseout="return nd();" title="">
        <?php
        }
Come promemoria globale, funziona tutto alla perfezione.
Ultimamente ho in mente di creare un promemoria personalizzato, legato cioè al singolo utente loggato.
Ho agito dunque in questo modo:

  • Ho già creato un panel in cui l´inserimento dei dati (prenotazioni utente), dentro la tabella event, avviene senza problemi.
  • Ho valorizzato all´inizio, dopo il session_start(), la sessione Login (ho provato anche con un print ed è tutto okay)
    PHP:
    $utente = $_SESSION['Login'];
  • Dopo il primo if qui sopra, ho aggiunto questa riga
    PHP:
    } elseif (($S) AND ($Autore == $utente)) {
            ?>
                <td>bla bla

Il risultato però è nullo e non capisco il motivo.
Ho provato anche il blando Autore == $_SESSION['Login'], ma nulla. E' come se non esistesse nessun dato (cosa falsa, ovviamente).
 

miagy

Utente Attivo
2 Nov 2014
70
0
6
ciao
sarebbe opportuno che tu scrivessi un po' più di codice relativo a quell'if
Certo: nella sua interezza è questo:

PHP:
<?
//Personalizzato//

if (($S) AND ($Autore == $utente)) { ?>
            <td align="center" style="background-color: #e6e7e7; color: #618dd6; border: 1px solid #888888; cursor: pointer;" onmouseover="return overlib('&lt;table width=&quot;100%&quot; border=&quot;0&quot; class=&quot;popupDateTable&quot;&gt;&lt;tr&gt;&lt;td align=&quot;center&quot; class=&quot;popupDate&quot;&gt;<?php echo stripslashes($D['title']); ?> ore <?php echo date($D['time']); ?> <?php echo '@' . stripslashes($D['location']); ?>&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;');" onmouseout="return nd();" title="">
<? //Chiudo e Globale

        } elseif (($S) AND ($Autore == '')) {
        ?>
            <td align="center" style="background-color: #e6e7e7; color: #618dd6; border: 1px solid #888888; cursor: pointer;" onmouseover="return overlib('&lt;table width=&quot;100%&quot; border=&quot;0&quot; class=&quot;popupDateTable&quot;&gt;&lt;tr&gt;&lt;td align=&quot;center&quot; class=&quot;popupDate&quot;&gt;<?php echo stripslashes($D['title']); ?> ore <?php echo date($D['time']); ?> <?php echo '@' . stripslashes($D['location']); ?>&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;');" onmouseout="return nd();" title="">
        <?php
        } elseif ($tn > $tm AND $tn < $tp AND date('j') == $list_day AND date('m') == $month AND date('Y') == $year) {
        ?>
            <td align="center" style="background-color: #11243a; color: #618dd6;  border: 1px solid #618dd6;">
        <?php
        } elseif ($theday == 6 or $theday == 0) {
        ?>
            <td align="center" style="background-color: #11243a; color: #e6e7e7; border: 1px solid #888888;">
        <?php
        } else {
        ?>
            <td align="center" style="background-color: #11243a; color: #e6e7e7; border: 1px solid #888888;">
        <?php
        }
       
       
       
        echo $list_day;

        echo '</td>';
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
non vedo session_start(), session_start deve esserci in tutte le pagine in cui usi le sessioni
poi non usare lo shortag <? ma usa <?php è meglio, soprattutto non fare la mescolanza
 

miagy

Utente Attivo
2 Nov 2014
70
0
6
Corretto con la tua indicazione.
Il session_start() è a inizio pagina:

PHP:
<?php session_start();

include ("../inc/parametri.inc.php");
include ("../inc/controllo.php");
include ("../inc/open2.php");
include ("../inc/controlloesilio.php");
include ("../inc/header.html.inc.php");

$utente = $_SESSION['Login'];

//inizio html//

?>
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
e dove valorizzi $_SESSION['Login']?
da dove proviene?
se questa è la pagina in cui verifichi il log (almeno così sembra o sbaglio?), dovresti avere prima un form in cui l'utente pinco immette le sue credenziali
riceverle con i loro $_POST, verificare se le credenziali sono in tabella (utente registrato) e a quel punto valorizzare la sessione e accedere promemoria personalizzato


p.s.
abbandona le vecchie istruzioni php mysql_xy deprecate e in via di abbandono e passa alle nuove mysqli_xy
 

miagy

Utente Attivo
2 Nov 2014
70
0
6
La sessione $_SESSION['Login'] viene valorizzata dentro un file include (ho fatto un print di prova e mi viene stampato correttamente il risultato).
Se vuoi posso portarti la pagina, ma in teoria non dovrebbe esserci bisogno dato che, ribadisco, con un print il risultato c'è :S
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
prova così
PHP:
<?php
session_start();
//Personalizzato//
var_dump($_SESSION['login']);//poi lo togli dopo aver visto cosa riporta
if(isset($_SESSION['login'])){
?>
<td align="center" style="background-color: #e6e7e7; color: #618dd6; border: 1px solid #888888; cursor: pointer;" onmouseover="return overlib('&lt;table width=&quot;100%&quot; border=&quot;0&quot; class=&quot;popupDateTable&quot;&gt;&lt;tr&gt;&lt;td align=&quot;center&quot; class=&quot;popupDate&quot;&gt;<?php echo stripslashes($D['title']); ?> ore <?php echo date($D['time']); ?> <?php echo '@' . stripslashes($D['location']); ?>&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;');" onmouseout="return nd();" title="">

<?php   
}else{//Chiudo e Globale
    //quello che ci va nel globale
}
?>
eventualmete posta tutto il codice in particolare dove valorizzi la sessione
 

miagy

Utente Attivo
2 Nov 2014
70
0
6
Allora, con il var_dump il risultato mostra il log correttamente.
Con la tua soluzione, tutte le caselle vengono "attivate" (ovviamente, considerando che si attivano non se $Autore == LOGIN ma se sei loggato e basta).

Per quanto riguarda la valorizzazione, ci sono degli include (vedi codice in #5)

In open2 attivo il db:

PHP:
<? $db = mysql_connect("localhost",$par_DbUser,$par_DbPassword) or die("<b>ERRORE DI ACCESSO AI DATI</B><br>L'errore di solito &egrave; dovuto a problemi di sovraccarico del server, &egrave; temporaneo e sparisce dopo qualche minuto.<br><a href='Javascript:location.reload()'>riprova</a>");
mysql_select_db($par_Conn);
function pars($var) {
    return addslashes($var);
}
?>
In controllo.php

PHP:
<? $Login = $_SESSION['Login'];

if ($Login == '') {
    include("header.html.inc.php");
    echo "<center>Sei stato inattivo troppo a lungo. Rientra.<br><br><a href='inizio.php' target='_top'>esci</a></center>";
    exit();
};
?>

Per quanto riguarda la valorizzazione del dato in events:

PHP:
<?php
/*
   +-------------------------------------+
   + NEW                                 +
   +-------------------------------------+
*/
if ($_GET['sa'] == 'new') {
/*
   +-------------------------------------+
   + NEW                                 +
   +-------------------------------------+
*/
?>
<table width="768" border="0" align=center>
<form name="form1" action="prenota.php?sa=save" method=Post>
  <center>
    Tipo:<br>
    <select name="title" class="ares">
    <option>Impegno Personale</option>
    <option>Impegno Pubblico</option>
    </select>
    <br><br>
    
    Tuo Login:<br>

    <select name="Autore" class="ares">
    <option><?= $utente ?></option>
    </select><br><br>
    Quando:<br>
    <select name="day" class="ares">
                    <option value="1"<?php if (date('j') == '1') { echo ' selected'; } ?>>01</option>
<? //FINO A 31// ?></select>
                <select name="month" class="ares">
                    <option value="1"<?php if (date('n') == '1') { echo ' selected'; } ?>>Gennaio</option><? //FINO A 12// ?>
                </select>
                <select name="year" class="ares">
                    <option value="2017"<?php if (date('Y') == '2017') { echo ' selected'; } ?>>2017</option></select>
                &nbsp; &nbsp;
                -
                &nbsp; &nbsp;
                <input type="text" size=3 name="hour" value="<?php echo date('H'); ?>" class="ares" style="text-align: center;">
                :
                <input type="text" size=3 name="minute" value="<?php echo date('i'); ?>" class="ares" style="text-align: center;">
            
                <br><br>
<input type=submit name=op value='Avanti' class=ares></center>
</form><br><br>
</td></tr></table>

<?php
/*
   +-------------------------------------+
   + SAVE                                +
   +-------------------------------------+
*/
} elseif ($_GET['sa'] == 'save') {
/*
   +-------------------------------------+
   + SAVE                                +
   +-------------------------------------+
*/
?>


<?php
// Variables from Form
$title = trim(addslashes($_POST['title']));
$event = trim(addslashes($_POST['event']));
$Autore = trim($_POST['Autore']);
$day = trim($_POST['day']);
$month = trim($_POST['month']);
$year = trim($_POST['year']);
$hour = trim($_POST['hour']);
$minute = trim($_POST['minute']);
$date = date('U', mktime(0, 0, 0, $month, $day, $year));
$time = $hour.':'.$minute;

// Query
$query = sprintf("INSERT INTO `events` (`event_id`, `title`, `event`, `Autore`, `day`, `month`, `year`, `date`, `time`) VALUES (NULL, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s');", $title, $event, $Autore, $day, $month, $year, $date, $time);

// Run it!
$run = mysql_query($query);

}

//ULTIMO HTML//
?>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
ok, ma allora dovrebbe funzionare con
PHP:
if (($S) and ($Autore == $_SESSION['Login'])) {
a qusto punto un dubbio, verifica $Autore e $s
PHP:
session_start();
var_dump($s);
var_dump($Autore);
var_dump($_SESSION['Login']);//questo mi hai detto che va bene
if (($S) and ($Autore == $_SESSION['Login'])) {//ecc....
 

miagy

Utente Attivo
2 Nov 2014
70
0
6
Questo è il risultato attuale (no, ancora non funziona)

 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
se $s e $Autore sono NUL la parte personalizzata non verra mai eseguita
a parte che non so dove generi quel $s ma per $autore mi sembra che in una pagina derivi da un $_POST, quindi passa anche quello in sessione e analogamente in sessione il valore di $s e prova a correggere quell'if così
PHP:
if (isset($_SESSION['s']) and $_SESSION['Autore'] == $_SESSION['Login']) {
 

miagy

Utente Attivo
2 Nov 2014
70
0
6
Allora, il POST di $Autore è in una pagina chiamata prenota.php ed è l'ultimo codice in #9
Per quanto riguarda $S, valorizzo nella pagina calendario, nello specifico:

PHP:
$tm = date("U", mktime(0, 0, 0, $month, $list_day, $year)) - 86400; // Bir gün önce
        $tn = date("U", mktime(0, 0, 0, $month, $list_day, $year)); // O gün ...
        $tp = date("U", mktime(0, 0, 0, $month, $list_day, $year)) + 86400; // Bir gün sonra
        $Q = sprintf("SELECT * FROM `events` WHERE `Autore` = '$Autore' AND `date` > '%s' AND `date` < '%s' AND `day` = '%s';", $tm, $tp, $list_day);
        $R = mysql_query($Q);
        $D = mysql_fetch_assoc($R);
        $S = mysql_num_rows($R);
        $Y = $D['date'];
        $TheDay = date('d', $Y);
        $TheMon = date('F', $Y);
        $TheYea = date('Y', $Y);
        $time = $D['time'];
        list($hour, $minute) = explode(':', $time);
        mysql_free_result($R);
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
allora sempre ricordando di mettere all'inizio session_start();
nella pagina calendario
PHP:
//....
$R = mysql_query($Q);
$D = mysql_fetch_assoc($R);
$S = mysql_num_rows($R);
if($S>0) $_SESSION['s']=$S;
$Y = $D['date'];
//.....
e nella pagina prenota
PHP:
//.....
$event = trim(addslashes($_POST['event']));
$Autore = trim($_POST['Autore']);
if(!empty($Autore) $_SESSION['autore']=$Autore;
$day = trim($_POST['day']);
//......
con l'ultimo if che ti ho postato "dovrebbe" funzionare.

poi una cosa, attento alle maiuscole/minuscdole, io avevo sbagliato nel var_dump avevo messo $s invece che $S
 

miagy

Utente Attivo
2 Nov 2014
70
0
6
Funziona tutto :)
Ti ringrazio della pazienza.

Ho solo un ultimo bug.
Mi sono accorto che se prenoto un utente personalizzato (e compare nel calendario) scompaiono gli eventi globali, come se non potessero coesistere insieme.
Viceversa, se cancello il promemoria personale, torna l'evento globale.
 

miagy

Utente Attivo
2 Nov 2014
70
0
6
No, rettifico tutto. Sto impazzendo.
Mi sono accorto di un altro bug:

  • Se prenoto una personale, non solo scompaiono quelli globali ma non posso neanche più prenotare i globali. Se esco e riloggo, tuttavia, scompaiono i personali e tornano i globali.
  • Se prenoto globalmente è tutto okay.