Integrare Sessioni in codice php

Un saluto a tutti gli amici del Forum, la mia applicazione php sta prendendo forma ma adesso mi sono bloccato sull'implementazione delle sessioni in codice php, vi posto lo script nella speranza di risolvere insieme questo problema che mi sta facendo sbroccare già da un giorno...

<?php include('Connections/conn.php'); ?>

<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

// Recupero l'id dal campo input della pagina login.php

if (isset($_POST['id']))
{

// Chiedo alla query di estrarre i dati del cliente che corrisponde all'id passato tramite $_POST["id"]

mysql_select_db($database_conn, $conn);
$query_ire_db = "SELECT * FROM accounts INNER JOIN accounts_cstm ON accounts.id = accounts_cstm.id_c INNER JOIN accounts_opportunities ON accounts.id = accounts_opportunities.account_id AND accounts_cstm.id_c = accounts_opportunities.account_id INNER JOIN opportunities_cstm ON accounts_opportunities.opportunity_id = opportunities_cstm.id_c WHERE accounts.id = ($_POST['id'])"; <-----------"Net Beans mi segnala questa parte come errore"

$ire_db = mysql_query($query_ire_db, $conn) or die(mysql_error());

if (!$ire_db->EOF)

    {
    // Esiste un record con questo id
    // inserisco i dati nella sessione

    session_start();
    $_SESSION['id']=$ire_db->Fields('accounts.id');
   
    header('location:anagrafica.php');
    }
   else header('location:login_failed.php');
  }   

$row_ire_db = mysql_fetch_assoc($ire_db);
$totalRows_ire_db = mysql_num_rows($ire_db);
?>

Nell'attesa saluto tutti ciauuu  :bye:

inviato 6 anni fa
condor_uk
X 0 X

Puoi descrivere meglio il tuo problema? Ottieni errori? Si comporta in modo diverso da quello che vorresti ottenere?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

In realtà mi compare una pagina tutta bianca senza nessuna descrizione dell'errore, per rendere l'idea io ho una pagina login.php http://www.gdaenergia.com/script/ire/login.php la quale tramite un form input riceve tramite $_POST un codice identificativo di un utente, tale codice rimanda ad un'altra pagina che potete visionare all'indirizzo http://www.gdaenergia.com/script/ire/anagrafica.php la quale a sua volta contiene altre 5 pagine.

Il mio problema è quello di fare in modo che l'utente una volta collegatosi alla pagina anagrafica.php e visualizzato i suoi dati anagrafici riesca a poter visionare anche gli altri dati legati al suo contratto semplicemente spostandosi tra le pagine ma per fare questo ho la necessità di implementare l'utilizzo delle sessioni.

Thanks ! 

risposto 6 anni fa
condor_uk
X 0 X

Puoi visionare i log del tuo server web. Li dovrebbe essere indicato il motivo del perchè ottieni pagina bianca.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Allora rieccomi, ho modificato le impostazioni del file php.ini abilitando la funzione che permette di visualizzare eventuali errori.

Posto l'errore che viene riportato dal mio script

Fatal error: Function name must be a string in /web/htdocs/www.gdaenergia.com/home/script/ire/anagrafica_2.php on line 54

La riga 54 è  $_SESSION['id']=$ire_db('accounts.id');

<?php include('Connections/conn.php'); ?>

<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}
// Recupero l'id dal campo input della pagina login.php

if (isset($_POST['id']))
{

// Chiedo alla query di estrarre i dati del cliente che corrisponde all'id passato tramite $_POST["id"]

mysql_select_db($database_conn, $conn);
$query_ire_db = "SELECT * FROM accounts INNER JOIN accounts_cstm ON accounts.id = accounts_cstm.id_c INNER JOIN accounts_opportunities ON accounts.id = accounts_opportunities.account_id AND accounts_cstm.id_c = accounts_opportunities.account_id INNER JOIN opportunities_cstm ON accounts_opportunities.opportunity_id = opportunities_cstm.id_c WHERE accounts.id = '$id' ";

$ire_db = mysql_query($query_ire_db, $conn) or die(mysql_error());

if (!$ire_db->EOF)

    {
      
    // Esiste un record con questo id:
    // inserisco i dati nella sessione
   
    session_start();
    $_SESSION['id']=$ire_db('accounts.id');
   
    header('location:main.php');
    }
   else header('location:login_failed.php');
  }   

$row_ire_db = mysql_fetch_assoc($ire_db);
$totalRows_ire_db = mysql_num_rows($ire_db);
?>

Attendo vostri suggerimenti.  :'(

risposto 6 anni fa
condor_uk
modificato 6 anni fa
X 0 X

Come da errore. Che cosa c'è alla riga 54 del file anagrafica_2.php?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Questo è la riga 54 del file anagrafica_2.php

$_SESSION['id']=$ire_db('id');

  :-\

risposto 6 anni fa
condor_uk
X 0 X

Questo:

$ire_db('id');

Mi sembra un bell'errore di sintassi o no ;)

$ire_db è un array? Se si devi scriverlo così:

$ire_db['id'];
risposto 6 anni fa
Mario Santagiuliana
X 0 X

MarioS grazie al tuo aiuto posso asserire che adesso lo script non restituisce errori, l'unico problema è che non funziona o meglio non recupera i dati dal database.

Come avrai capito sono un apprendista di php pertanto cerco di arrangiarmi studiando materiale cartaceo e affidandomi all'aiuto del forum, da quello che ho capito le sessioni devono essere inizializzate in tutte le pagine "riservate" di php utilizzando la funzione session_start();, penso di aver fatto confusione... non so questa parte di codice // Recupero l'id dal campo input della pagina login.php

if (isset($_POST['id'])) {

if (!$ire_db->EOF)

    {            // Esiste un record con questo id:     // inserisco i dati nella sessione         session_start();     $_SESSION['id']=$ire_db['id'];         header('location:anagrafica.php');     }    else header('location:login_failed.php');   }   

se devo inserirla nel file login.php oppure anagrafica.php

allo stato attuale la pagina login.php è strutturata cosi

<?php include('Connections/conn.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}



// Recupero l'id dal campo input della pagina login.php

if (isset($_POST['id']))
{

if (!$ire_db->EOF)

    {
      
    // Esiste un record con questo id:
    // inserisco i dati nella sessione
   
    session_start();
    $_SESSION['id']=$ire_db['id'];
   
    header('location:anagrafica.php');
    }
   else header('location:login_failed.php');
  }   

mysql_select_db($database_conn, $conn);
$query_ire_db = "SELECT * FROM accounts INNER JOIN accounts_cstm ON accounts.id = accounts_cstm.id_c INNER JOIN accounts_opportunities ON accounts.id = accounts_opportunities.account_id AND accounts_cstm.id_c = accounts_opportunities.account_id INNER JOIN opportunities_cstm ON accounts_opportunities.opportunity_id = opportunities_cstm.id_c";
$ire_db = mysql_query($query_ire_db, $conn) or die(mysql_error());
$row_ire_db = mysql_fetch_assoc($ire_db);
$totalRows_ire_db = mysql_num_rows($ire_db);
?>

mentre la pagina anagrafica.php è strutturata cosi;

<?php include('Connections/conn.php'); ?>
<?php


if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

  
  
  

// Chiedo alla query di estrarre i dati del cliente che corrisponde all'id passato tramite $_POST["id"]
mysql_select_db($database_conn, $conn);
$query_ire_db = "SELECT * FROM accounts INNER JOIN accounts_cstm ON accounts.id = accounts_cstm.id_c INNER JOIN accounts_opportunities ON accounts.id = accounts_opportunities.account_id AND accounts_cstm.id_c = accounts_opportunities.account_id INNER JOIN opportunities_cstm ON accounts_opportunities.opportunity_id = opportunities_cstm.id_c WHERE accounts.id = '$id' ";
$ire_db = mysql_query($query_ire_db, $conn) or die(mysql_error());
$row_ire_db = mysql_fetch_assoc($ire_db);
$totalRows_ire_db = mysql_num_rows($ire_db);
?>

Confido in un vostro aiuto, mi sto perdendo !!!  :-\

risposto 6 anni fa
condor_uk
modificato 6 anni fa
X 0 X

Il codice di cui sopra devi inserirlo all'interno della pagina di login. Infatti preleva le informazioni da un form che vengono inviate appunto alla pagina di login.

Nelle pagine che sono protette, e che per vederle bisogna essere autenticati, devi fare un controllo simile a questo:

<?php
session_start();
if ($_SESSION['login_effettuato'])
{
   // quello che vuoi
} else {
   echo "Non puoi vedere la pagina";
}

Ti consiglio di leggere molto attentamente questo articolo prima:

http://www.phpnews.it/articoli/le-sessioni/

risposto 6 anni fa
Mario Santagiuliana
modificato 6 anni fa
X 0 X

Ho provato a seguire il tuo consiglio riguardo al codice ma sono ancora in alto mare, mi faccio una bella lettura della dispensa da te suggerita http://www.phpnews.it/articoli/le-sessioni/ e non appena sarò venuto a capo di qualcosa faccio sapere.

Per il momento ringrazio  ;)

risposto 6 anni fa
condor_uk
X 0 X

Questo:

$ire_db('id');

Mi sembra un bell'errore di sintassi o no ;)

$ire_db è un array? Se si devi scriverlo così:

$ire_db['id'];

Non è un errore di sintassi.

Però la variabile deve contenere una stringa, che sia un nome di una funzione dichiarata.

Il mio consiglio è di sviluppare sempre con il massimo livello di errore (puoi modificarlo in php.ini), in modo da avere subito visualizzati tutti gli errori.

risposto 6 anni fa
Massimiliano Arione
X 0 X

Scusa garak non ho capito come fa a non essere un errore di sintassi se si tratta di un array. Gli indici vanno richiamati con le parantesi quadre, non tonde.

Ti ringrazio comunque per la precisazione, in effetti nella mia risposta non avevo contemplato la possibilità di richiamare una funzione tramite una variabile stringa...

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Scusa garak non ho capito come fa a non essere un errore di sintassi se si tratta di un array. Gli indici vanno richiamati con le parantesi quadre, non tonde.

Ti ringrazio comunque per la precisazione, in effetti nella mia risposta non avevo contemplato la possibilità di richiamare una funzione tramite una variabile stringa...

Mario, ti sei risposto da solo: se la sintassi consente quella dichiarazione, è lapalissiano che non si tratta di un errore sintattico.

Se poi l'intenzione era quella di usare un array (e non una funzione variabile), l'errore è semantico.

risposto 6 anni fa
Massimiliano Arione
X 0 X

Ok, mi ero espresso male io alla prima risposta.  :(

risposto 6 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda