problema con area riservata

alessandromonti

Utente Attivo
25 Mar 2012
62
0
0
salve..
per area riservata cui possono accedere più utenti creato 3 pag
1-accedi-riservata.php: utente inserito username e password viene spedito a pagina-riservata.php
2-in pagina-riservata.php l'utente inserisci la sua e-mail che la spedisco a estrarre-link-da-db.php
3- in estrarre-link-da-db.php se la e-mail inserita dall'utente esiste nel db gli dò il suo indirizzo di pagina riservata altrimenti, e-mail assente, lo mando alla pag e-mail-assente.php...problema se l'utente inserisce l'e-mail corretta tutto bene...se invece inserisce un indirizzo inesitente nel db salta fuori Warning: Cannot modify header information - headers already sent by (output started at /home/n65432/domains/xxxxxxx.yy/public_html/area-riservata/estrarre-link-da-db.php:130) in /home/n65432/domains/xxxxxx.yy/public_html/area-riservata/estrarre-link-da-db.php on line 139..in locale tutto fila liscio..il problema salta fuori in remoto..
ecco lo script della pg estrarre-link-da-db.php

PHP:
           <?php
  $db = 'nomedatabase'; 
  $sel = mysql_select_db($db) or die (mysql_error());//selz il db
  $email = $_POST['imail'];
  $pagina_errore = "http://www.xxxxxx.yy/area-riservata/email-assente.php";  
//query al db
    $ricevuta = mysql_query("SELECT link FROM pagineriservate WHERE email = '$email'") or die (mysql_error());
          if(mysql_num_rows($ricevuta) == 0)
    {
      header ("Location: $pagina_errore");
    }else{
      //recupero il link
      if($obj = mysql_fetch_object($ricevuta) or die (mysql_error()))
      {
        // stampo il link 
	echo 'Ecco il link per la tua pagina riservata personale:  <a href='.$obj->link.'>Link</a>'."\n";          
      }
    }
?>

grazie
 
ciao
intanto mi sembra che manchi qualcosa nella connessione al db,
poi potresti verificare la correttezza formale dell'indirizzo email e solo se corretto ti colleghi al db ecc...
PHP:
<?php
$pagina_errore = "http://www.xxxxxx.yy/area-riservata/email-assente.php"; 
$email = $_POST['imail'];
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){//se email non corretta rimandi all'errore
	header ("Location: $pagina_errore");
	exit();//poi aggiungi questo sempre dopo l'header location o refresh
}
$db = 'nomedatabase';
$conn = mysql_connect($host,$username,$password) or die (mysql_error());//devi connettriti al db
$sel = mysql_select_db($db) or die (mysql_error());//selz il db 
//query al db
$ricevuta = mysql_query("SELECT link FROM pagineriservate WHERE email = '$email'") or die (mysql_error());
if(mysql_num_rows($ricevuta) == 0){
	header ("Location: $pagina_errore");
	exit();//poi aggiungi questo
}else{
	//recupero il link
	if($obj = mysql_fetch_object($ricevuta) or die (mysql_error())){
		// stampo il link 
		echo 'Ecco il link per la tua pagina riservata personale:  <a href='.$obj->link.'>Link</a>'."\n";          
	}
}
?>
 
Ciao,
non è consentito mandare in output nessun carattere,nemmeno uno spazio prima del richiamo della funzione header();
devi controllare bene
o puoi provare ritardando il redirect in questo modo
PHP:
header("refresh:1;url=" . $pagina_errore);
ma non ti assicuro
 
ciao scusa
mi sono accorto di una cosa, facendo solo così uno che riesce a capire come si chiama la pagina (scrivo con gli spazi)
puo scrivere sul bw
http :// www. tuo_sito . it/ pagina_riservata_di_pinco.php
e quindi accede alla pagina senza essere autorizzato
se non ci avevi già pensato fai queste aggiunte
PHP:
<?php
ob_start();
session_start();
$pagina_errore = "http://www.xxxxxx.yy/area-riservata/email-assente.php"; 
$email = $_POST['imail'];
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){//se email non corretta rimandi all'errore
	header ("Location: $pagina_errore");
	exit();//poi aggiungi questo sempre dopo l'headre location o refresh
}
$db = 'nomedatabase';
$conn = mysql_connect($host,$username,$password) or die (mysql_error());//devi connettriti al db
$sel = mysql_select_db($db) or die (mysql_error());//selz il db 
//query al db
$ricevuta = mysql_query("SELECT link FROM pagineriservate WHERE email = '$email'") or die (mysql_error());
if(mysql_num_rows($ricevuta) == 0){
	header ("Location: $pagina_errore");
	exit();//poi aggiungi questo
}else{
	//recupero il link
	if($obj = mysql_fetch_object($ricevuta) or die (mysql_error())){
		//valorizzo la sessione
		$_SESSION['email']=$obj->email;
		// stampo il link 
		echo 'Ecco il link per la tua pagina riservata personale:  <a href='.$obj->link.'>Link</a>'."\n"; //non ti converrebbe mettere un header anche qui?      
	}
}
ob_end_flush();
?>
poi nella pagina riservata verifichi che esista la sessione

PHP:
<?php
session_start();
if(!isset($_SESSION['email'])){//la sessione non esiste
	header ("Location: alla_pagina_che_preferisci.php");//quindi rimandi dove vuoi es alla index.php
	exit();
}
// e qui tutto quello che riguarda la pag riservata
//.........
?>

edit per cercare di evitre l'errore sul'hedare aggiungi ob_start all'inizio e ob_end_flush alla fine
 
Ultima modifica:
..intanto grazie...
1 il controllo correttezza formale della e-mail l'ho fatto in pagina-riservata.php quella che manda l'utente a pag estrarre-link-da-db.php
2 per proteggere le pag riservate ho usato limita l'accesso alla pagina di dreamweaver (è sufficiente?)...anche connessione fatta..non avevo postato tutto per snellire il post...
.. il codice di estrarre-link-da-db.php:

PHP:
<?php
if (!isset($_SESSION)) {
  session_start();
}
$MM_authorizedUsers = "";                         // limitazione accesso  alla pg 
$MM_donotCheckaccess = "true";


  $isValid = False; 


  if (!empty($UserName)) { 
   
    $arrUsers = Explode(",", $strUsers); 
    $arrGroups = Explode(",", $strGroups); 
    if (in_array($UserName, $arrUsers)) { 
      $isValid = true; 
    } 
   
    if (in_array($UserGroup, $arrGroups)) { 
      $isValid = true; 
    } 
    if (($strUsers == "") && true) { 
      $isValid = true; 
    } 
  } 
  return $isValid; 
}

$MM_restrictGoTo = "../riservata-errore.php";
if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) {   
  $MM_qsChar = "?";
  $MM_referrer = $_SERVER['PHP_SELF'];
  if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&";
  if (isset($_SERVER['QUERY_STRING']) && strlen($_SERVER['QUERY_STRING']) > 0) 
  $MM_referrer .= "?" . $_SERVER['QUERY_STRING'];
  $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer);
  header("Location: ". $MM_restrictGoTo); 
  exit;
}
?>
<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
$hostname_conexione = "xxxxxxx";
$database_conexione = "xxxxxxx";
$username_conexione = "xxxxxxxx";
$password_conexione = "xxxxxxxxxx";
$conexione = mysql_pconnect($hostname_conexione, $username_conexione, $password_conexione) or trigger_error(mysql_error(),E_USER_ERROR);
?>
<?php 
ob_start();
$db = 'xxxxxx';
$sel = mysql_select_db($db) or die (mysql_error());//selz il db
$email = $_POST['imail'];
$pagina_errore = "http://xxxxx.xx/area-riservata/email-assente.php";  
//query al db
$ricevuta = mysql_query("SELECT link FROM pagineriservate WHERE email = '$email'") or die (mysql_error());
    if(mysql_num_rows($ricevuta) == 0){
        header ("Location: $pagina_errore");
        exit();  
    }else{
      //recupero il link
      if($obj = mysql_fetch_object($ricevuta) or die (mysql_error())){      
        // stampo il link 
	echo 'Ecco il link per la tua pagina riservata personale:  <a href='.$obj->link.'>Link</a>'."\n";          
      }
    }
ob_end_flush();
?>
funziona...ho cercato materiale...non sapevo che header non ammette anche i tag html...
.... un header al posto del link è meglio ma non so come fare..
grazie
 

Discussioni simili