[PHP] Sessione Login

miagy

Utente Attivo
2 Nov 2014
83
1
8
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
83
1
8
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.046
150
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
83
1
8
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.046
150
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
83
1
8
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.046
150
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
83
1
8
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.046
150
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
83
1
8
Questo è il risultato attuale (no, ancora non funziona)

20thybl.png
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
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
83
1
8
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.046
150
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
83
1
8
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
83
1
8
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.
 
Discussioni simili
Autore Titolo Forum Risposte Data
I [PHP] login con sessione singola PHP 1
K [PHP] Unica sessione login forum/sito PHP 1
M [PHP] Passare variabile di sessione con metodo GET PHP 10
L [PHP] Suggerimento su sessione PHP 6
Cosina [PHP] Chiudere sessione quando la pagina viene riaggiornata PHP 4
cattivic72 [PHP] Durata sessione PHP 1
N [PHP] Utilizzo variabili di sessione [Risolto] PHP 13
otto9due [PHP] id di sessione "session_id()" a cosa serve e come utilizzarlo? PHP 4
L [PHP] Sessione tra sottodominio PHP 1
gandalf1959 [PHP] variabile di sessione si azzera ricaricando la pagina? PHP 3
M durata sessione php PHP 1
L Sessione php PHP 6
zighy php sessione per singolo utente PHP 7
U passare una variabile di sessione da pagina di joomla a pagina php Joomla 3
max_400 php: sessione scadenza a tempo e reidirect - by max4001976 PHP 1
H autenticazione sessione ajax/php Ajax 2
L php e ajax, le variaibli di sessione si possono usare? Ajax 0
A array in una sessione php PHP 3
R [PHP] - Variabili di sessione PHP 1
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0

Discussioni simili