PDA

View Full Version : [PHP] Problema reindirizamento pagina


Fede 88
31-10-2009, 14:46
Devo far si che dopo la registrazione del account venga visualizzato un messaggio e dopo X secondi (in questo caso 3) l'utente venga reindirizzato alla pagina profilo.php.

Ho fatto nel seguente modo:

<?php
...
...
echo "Il tuo account è stato attivato!";
sleep(3);
header('Location: ' . $url . 'profilo.php');
?>


Il problema è che l'echo non viene visualizzato, qualcuno sa dirmi perché. Grazie

Fede 88
31-10-2009, 16:16
In alternativa ho trovato anche questo codice, ho provato ad inserirlo negli echo ma mi da errore, credo faccia casino con le virgolette del echo. Voi che dite?

<meta http-equiv="Refresh" content="3;URL=sito.it">

MEMon
31-10-2009, 17:06
Devo far si che dopo la registrazione del account venga visualizzato un messaggio e dopo X secondi (in questo caso 3) l'utente venga reindirizzato alla pagina profilo.php.

Ho fatto nel seguente modo:

<?php
...
...
echo "Il tuo account è stato attivato!";
sleep(3);
header('Location: ' . $url . 'profilo.php');
?>


Il problema è che l'echo non viene visualizzato, qualcuno sa dirmi perché. Grazie
Probabilmente c'è un errore prima.
Comunque sappi che l'header non lo puoi modificare dopo che hai stampato qualcosa.

Fede 88
31-10-2009, 20:43
Comunque sappi che l'header non lo puoi modificare dopo che hai stampato qualcosa.

Non ho capito...

Fede 88
31-10-2009, 20:45
Comunque questo è il file completo:


<?php

include("connessioneDB.php");


// Controllo che la variabile "codice" ricevuta tramite GET abbia un valore
if(!IsSet($_GET['codice'])){ echo "ERRORE: Codice di attivazione non fornito!";}
else
{
$codice = $_GET['codice'];
$check = mysql_query("SELECT * FROM utenti WHERE codice='".$codice."'");
$appo = mysql_num_rows($check);
if ($appo != 1) { echo "Non corrisponde nessun account al codice di attivazione usato"; }
else
{
$curruser=mysql_fetch_array($check);
if($curruser['conf']=='1')
{
echo "Il tuo account è già stato attivato!";
echo "Tra pochi istanti verrai reindirizzato alla home.";
}
else
{
// Seleziono username e password degli utenti con il suddetto codice
$username = mysql_query("SELECT username FROM utenti WHERE codice='$codice'");
$password = mysql_query("SELECT password FROM utenti WHERE codice='$codice'");
// Creo una sessione con i selezionati dal DB
session_start ();
$_SESSION['username'] = $username;
$_SESSION['pass'] = $password;
// Attivo l'account settando il campo conf = 1
$activate = mysql_query("UPDATE utenti SET conf='1' WHERE codice='".$codice."'");
echo "Il tuo account è stato attivato con successo!";
echo "Tra pochi istanti verrai reindirizzato alla pagina del tuo profilo.";

}
}

}
sleep(3);
header('Location: ' . $url . 'profilo.php');
?>

MEMon
31-10-2009, 20:59
Comunque questo è il file completo:


<?php

include("connessioneDB.php");


// Controllo che la variabile "codice" ricevuta tramite GET abbia un valore
if(!IsSet($_GET['codice'])){ echo "ERRORE: Codice di attivazione non fornito!";}
else
{
$codice = $_GET['codice'];
$check = mysql_query("SELECT * FROM utenti WHERE codice='".$codice."'");
$appo = mysql_num_rows($check);
if ($appo != 1) { echo "Non corrisponde nessun account al codice di attivazione usato"; }
else
{
$curruser=mysql_fetch_array($check);
if($curruser['conf']=='1')
{
echo "Il tuo account è già stato attivato!";
echo "Tra pochi istanti verrai reindirizzato alla home.";
}
else
{
// Seleziono username e password degli utenti con il suddetto codice
$username = mysql_query("SELECT username FROM utenti WHERE codice='$codice'");
$password = mysql_query("SELECT password FROM utenti WHERE codice='$codice'");
// Creo una sessione con i selezionati dal DB
session_start ();
$_SESSION['username'] = $username;
$_SESSION['pass'] = $password;
// Attivo l'account settando il campo conf = 1
$activate = mysql_query("UPDATE utenti SET conf='1' WHERE codice='".$codice."'");
echo "Il tuo account è stato attivato con successo!";
echo "Tra pochi istanti verrai reindirizzato alla pagina del tuo profilo.";

}
}

}
sleep(3);
header('Location: ' . $url . 'profilo.php');
?>


Se fai un echo non puoi poi modificare l'header con
header('Location: ' . $url . 'profilo.php');

Fede 88
31-10-2009, 21:13
Non c'è un altro modo per modificarlo?

MEMon
31-10-2009, 21:19
Devi fare il reindirizzamento in altro modo, o in html

<META HTTP-EQUIV="Refresh" CONTENT="secondi; URL=http://url...">


o in javascript

<script type="text/javascript">
window.location.href="http://url...";
</script


Ovviamente in entrambi i casi la roba che butti fuori deve essere una pagina web.

Fede 88
01-11-2009, 11:03
Grazie sono riuscito a risolvere usanto META HTTP-EQUIV

Ho un'altro problema, il codice scritto qui sotto non funziona.
Ho provato ha visualizzare con un echo il contenuto delle variabili $username e $password e mi visualizza:
- Resource id #6
- Resource id #7

Quindi deve esserci qualche errore nelle select, però non capisco dove...


// Seleziono username e password degli utenti con il suddetto codice
$username = mysql_query("SELECT username FROM utenti WHERE codice='".$codice."'");
$password = mysql_query("SELECT password FROM utenti WHERE codice='".$codice."'");
// Creo una sessione con i selezionati dal DB
session_start ();
$_SESSION['username'] = $username;
$_SESSION['pass'] = $password;
// Attivo l'account settando il campo conf = 1
$activate = mysql_query("UPDATE utenti SET conf='1' WHERE codice='".$codice."'");
// Memorizzo la data di login dell'utente nel campo data_ultima
mysql_query("UPDATE utenti SET data_ultima = NOW() WHERE (username = '$username')") or die (mysql_error());
echo "Il tuo account è stato attivato con successo!";
echo "Tra pochi istanti verrai reindirizzato alla pagina del tuo profilo.

Tadde
01-11-2009, 13:39
mysql_query restituisce un oggetto di tipo tabella, non una stringa. Per ottenere l'informazione che cerchi da questa tabella devi usare i metodi per "scansionarla".

kurts
01-11-2009, 13:44
ti da quei codici di errore perchè le variabili $username e $password non contengono una stringa come ti aspetti ma un array.
il risultato di una query in php è generalmente un array multidimensionale (in questo caso sono 2 array monodimensionali), ad ogni modo, per potere leggere i valori restituiti dalla query devi utilizzare la funzione mysql_fetch_array()

$username = mysql_query("SELECT username FROM utenti WHERE codice='".$codice."'");
$username=mysql_fetch_array($username);

gia che ci sono ti consiglio di non memorizzare la password in una variabile di sessione, oltre che pericoloso non è nemmeno utile, se ti serve per controllare che quella inserita al login sia quella corretta ti posto il metodo che uso io

if(IsSet($_POST['posted_username']) && IsSet($_POST['posted_password'])){
$check=mysql_query("SELECT * FROM users WHERE username = '".$_POST['posted_username']."'")or die(mysql_error());
$info=mysql_fetch_array($check);
if($info['username']==($_POST['posted_username']) && $info['password']==md5($_POST['posted_password'])){
$_SESSION['user']=$_POST['posted_username'];
}
}

se qualcuno nota errori o vuole darmi dei consigli siete i benvenuti

Fede 88
01-11-2009, 13:56
Grazie per l'aiuto.

E se invece di memorizzare la pass memorizzassi l'MD5 della pass?

Fede 88
01-11-2009, 14:01
Ho provato a correggere le query nel modo da te consigliato però non funziona ancora, adesso se visualizzo il contenuto delle variabili mi visualizza - - Array
- Array

Il codice è questo:

// Seleziono username e password degli utenti con il suddetto codice
$query1 = mysql_query("SELECT username FROM utenti WHERE codice='".$codice."'");
$username = mysql_fetch_array($query1);
$query2 = mysql_query("SELECT password FROM utenti WHERE codice='".$codice."'");
$password = mysql_fetch_array($query2);

kurts
01-11-2009, 14:01
Grazie per l'aiuto.

E se invece di memorizzare la pass memorizzassi l'MD5 della pass?

ma a che pro? voglio dire, una volta che verifichi l'esatto inserimento al momento del login poi sei a posto

kurts
01-11-2009, 14:08
Ho provato a correggere le query nel modo da te consigliato però non funziona ancora, adesso se visualizzo il contenuto delle variabili mi visualizza - - Array
- Array

Il codice è questo:

// Seleziono username e password degli utenti con il suddetto codice
$query1 = mysql_query("SELECT username FROM utenti WHERE codice='".$codice."'");
$username = mysql_fetch_array($query1);
$query2 = mysql_query("SELECT password FROM utenti WHERE codice='".$codice."'");
$password = mysql_fetch_array($query2);


si, scusa, una piccola distrazione
$query1 = mysql_query("SELECT username FROM utenti WHERE codice='".$codice."'");
$query1 = mysql_fetch_array($query1);
$username = $query[0];

in poche parolecon la prima esegui la query, con la seconda prendi la prima riga (l'unica) e con la terza istruzione prendi il nome utente

Fede 88
01-11-2009, 14:20
si, scusa, una piccola distrazione
$query1 = mysql_query("SELECT username FROM utenti WHERE codice='".$codice."'");
$query1 = mysql_fetch_array($query1);
$username = $query[0];

in poche parolecon la prima esegui la query, con la seconda prendi la prima riga (l'unica) e con la terza istruzione prendi il nome utente

Perfetto funziona!

Fede 88
01-11-2009, 14:21
ma a che pro? voglio dire, una volta che verifichi l'esatto inserimento al momento del login poi sei a posto

Hai ragione, quindi alla fine per la sessione ho fatto in questo modo:


session_start ();
$_SESSION['username'] = $username;