Usa la funzione print_r in modo tale da controllare i valori dei vari campi.
Usa la funzione print_r in modo tale da controllare i valori dei vari campi.
Mi stampa:
Array ( [0] => 1 [id] => 1 [1] => Admin [username] => Admin [2] => Toscana [regione] => Toscana [3] => ***** => 12d0d6548cbfcd6dddf7763e9d6256 [code] => 12d0d6548cbfcd6dddf7763e9d6256 [7] => [verifica] => )
Sì, ma guarda il sorgente, c'è esattamente ciò che ci deve essere.
Nel database c'è quindi tutto ciò che serve, ma come mai allora la pagina è bianca?
Il link è: http://www.programmerscommunity.alte...f7763e9d625646
E il codice:
Codice PHP:
<?php
session_start();
require_once('mysqlconn.php');
mysql_select_db($database, $utenti);
$bSuccesso = true;
$username = $_GET['username'];
$code = $_GET['code'];
$sql = mysql_query("SELECT * FROM utenti WHERE username='".$username."' ") or die(mysql_error());
while ($row = mysql_fetch_array($sql)) {
echo $row;
if ($row['code'] == $code) {
$verDB = true;
$verifica = mysql_query("UPDATE utenti SET verifica = true WHERE username = '".$username."' ") or die (mysql_error());
?>
<html><head>
<script type="text/javascript">
function doRedirect() {
window.open('index.php,'_top');
}
window.setTimeout(doRedirect(), 15);
</script>
</head>
<body></body></html> <?php
}
}
?>
Ma perché code=12d0d6548cbfcd6dddf7763e9d625646? Dovrebbe essere code=12d0d6548cbfcd6dddf7763e9d6256.
Perché ci metti quelle due cifre in più?
Avevo messo il campo code nel database troppo piccolo e le ultime due cifre non le aveva inserite. Ora l'ho ampliato ed ho aggiunto le due cifre rimanenti. A questo punto nel db nella riga corrispondente è stato modificato il valore verifica, ma anzichè essere stato scritto il valore "true" è comparso il valore "1". Come mai?
Beh, di che tipo è il campo?
varchar
Beh, se ci vuoi proprio la stringa true, allora mettila come stringa, ma non ha molto senso. true e false sono delle costani che rappresentano rispettivamente i valori numerici 1 e 0 (nel linguaggio SQL). Il tipo più adatto per ospitare un valore booleano è appunto boolean.
Prova facendoOvvero con le virgolette.Codice:SET verifica = 'true'
Ciao!
regolamento altervista_______________ regolamento forum
Ora va; ma come mai il redirect non funziona? In teoria dopo aver modificato tutti i dati dovrebbe rimandare l'utente alla pagina index.php
Codice PHP:
<?php
session_start();
require_once('mysqlconn.php');
mysql_select_db($database, $utenti);
$bSuccesso = true;
$username = $_GET['username'];
$code = $_GET['code'];
$sql = mysql_query("SELECT * FROM utenti WHERE username='".$username."' ") or die(mysql_error());
while ($row = mysql_fetch_array($sql)) {
/* echo $row; */
if ($row['code'] == $code) {
$verDB = true;
$verifica = mysql_query("UPDATE utenti SET verifica = 'true' WHERE username = '".$username."' ") or die (mysql_error());
?>
<html><head>
<script type="text/javascript">
function doRedirect() {
window.open('index.php,'_top');
}
window.setTimeout(doRedirect(), 15);
</script>
</head>
<body></body></html> <?php
}
}
?>
Manca un apice: dovrebbe essere così:
Codice:window.open('index.php','_top');
Il redirect sostanzialmente può essere fatto in 3 modi: html, javascript e PHP.
- HTML è supportato da chiunque, ma per un attimo l'utente vede le pagina perché appunto è un redirect html, quindi il browser deve prima caricarlo.
- javascript è quello che stai utilizzando te. Non è detto che tutti lo supportino. E visto che anche javascript è eseguito da browser, l'utente deve aspettare che il browser interpreti la pagina. Inoltre lo hai messo dentro .setTimeout(), quindi dopo averlo eseguito aspetta altri 15 millisecondi (probabilmente lo hai fatto intenzionalmente, anche se non capisco il motivo).
- Infine c'é il modo tramite PHP, che è quello che io personalmente utilizzo maggiormente: il browser riceve nell'header della richiesta un messaggio dicendo che deve effettuare il redirect. L'unica accortezza di questo modo è di non scrivere nessun output html prima di questo comando, altrimenti la richiesta chiude l'head e il tuo comando non può più andare a modificare tale "messaggio".
Ciao!
Ultima modifica di alemoppo : 17-03-2014 alle ore 16.43.17
regolamento altervista_______________ regolamento forum
Perfetto, ora va; probabilmente in una successiva revisione del sito modificherò i redirect utilizzando il metodo tramite PHP. Scusate un'ultima cosa: un'altra pagina; dopo aver verificato la validità di una sessione carica una pagina html, ma la pagina rimane vuota.
Codice PHP:
<?php
session_start();
require_once('mysqlconn.php');
mysql_select_db($database, $utenti);
$id = $_SESSION['id'];
if ($_SESSION['stat'] != true) {
?><html><head>
<script type="text/javascript">
function doRedirect() {
window.open('login.php','_top');
}
window.setTimeout(doRedirect(), 5);
</script>;
</head><body></body></html><?php }
$result = mysql_query("SELECT * FROM utenti WHERE id='".$id."'") or die(mysql_error());
while ($resrow = mysql_fetch_array($result)) {
?>
<html>
<head>
<title>Home</title>
<meta charset="UTF-8">
</head>
<body>
<div id="barra">
<a href="home.php" title="home.php">Home</a> <a href="panofferte.php" title="Panoramica offerte">Panoramica offerte</a> <a href="opzioni.php" title="Opzioni">Opzioni</a>
</div>
<div id="main">
<H1>Qui deve essere riempito</H1>
<H2>Lavori in corso</H2>
</div>
</body>
</html>
<?php } ?>
Beh, controlla se $_SESSION['stat'] è diverso da true, ad esempio con var_dump().
p.s:
Sicuramente gli id sono chiavi primarie e il while verrà eseguito soltanto una volta. Quindi perché non utilizzare un if invece di un while? Se invece gli id non sono univoci, ragiona su quel che stai facendo.Codice PHP:
while ($resrow = mysql_fetch_array($result)) {
?>
<html>
<head>
<title>Home</title>
<meta charset="UTF-8">
</head>
<body>
<div id="barra">
<a href="home.php" title="home.php">Home</a> <a href="panofferte.php" title="Panoramica offerte">Panoramica offerte</a> <a href="opzioni.php" title="Opzioni">Opzioni</a>
</div>
<div id="main">
<H1>Qui deve essere riempito</H1>
<H2>Lavori in corso</H2>
</div>
</body>
</html>
<?php } ?>
Ciao!
Ultima modifica di alemoppo : 17-03-2014 alle ore 21.40.42
regolamento altervista_______________ regolamento forum
Il valore di $_SESSION['stat'] è true, anche perchè in caso contrario il redirect farebbe tornare alla pagina di login. Il problema deve quindi essere nella parte successiva di codice; dal while in poi... Effettivamente hai ragione: il while verrà eseguito solo una volta; quindi in effetti non ha senso utilizzarlo. Ho dunque modificato così il codice:
Quando avrò definito i dati da inserire nella pagina html aggiungerò la stringa nella parte iniziale in PHP:Codice PHP:
<?php
session_start();
require_once('mysqlconn.php');
mysql_select_db($database, $utenti);
$id = $_SESSION['id'];
if ($_SESSION['stat'] != true) {
?><html><head>
<script type="text/javascript">
function doRedirect() {
window.open('login.php','_top');
}
window.setTimeout(doRedirect(), 5);
</script>;
</head><body></body></html><?php }
$result = mysql_query("SELECT * FROM utenti WHERE id='".$id."'") or die(mysql_error());
?>
<html>
<head>
<title>Home</title>
<meta charset="UTF-8">
</head>
<body>
<div id="barra">
<a href="home.php" title="home.php">Home</a> <a href="panofferte.php" title="Panoramica offerte">Panoramica offerte</a> <a href="opzioni.php" title="Opzioni">Opzioni</a>
</div>
<div id="main">
<H1>Qui deve essere riempito</H1>
<H2>Lavori in corso</H2>
</div>
</body>
</html>
$row = mysql_fetch_array($sql)
E all'interno dell'HTMl in corrispondenza dei valori da richiamare: <?php echo $row['valore']; ?>
Va bene, no?
Sì. In effetti ho letto male su: pensavo che non ti funzionasse il redirect.
Se la pagina rimane vuota, significa che non trova nessun risultato nel database. Comunque va bene come pensi di fare. Occhio soltanto di non stampare entrambi i codici html, di evitare di stampare una cosa come:
Magari metti un else per stampare il secondo codice, oppure fai il redirect tramite PHP semplicemente con:Codice HTML:<html><head> <script type="text/javascript"> function doRedirect() { window.open('login.php','_top'); } window.setTimeout(doRedirect(), 5); </script>; </head><body></body></html><html> <head> <title>Home</title> <meta charset="UTF-8"> </head> <body> <div id="barra"> <a href="home.php" title="home.php">Home</a> <a href="panofferte.php" title="Panoramica offerte">Panoramica offerte</a> <a href="opzioni.php" title="Opzioni">Opzioni</a> </div> <div id="main"> <H1>Qui deve essere riempito</H1> <H2>Lavori in corso</H2> </div> </body> </html>
Ciao!Codice PHP:
header('Location: login.php');
regolamento altervista_______________ regolamento forum
Grazie, risolto.
Nell'esecuzione della seguente pagina mi viene restituito l'errore "No database selected"
Ho controllato più volte il codice, ma mi sembra tutto a posto; inoltre nel file mysqlconn.php tutti i parametri mi sembrano impostati correttamente:Codice PHP:
<?php
session_start();
require_once('mysqlconn.php');
mysql_select_db($databse, $offerte);
$bSuccesso = true;
$num = $_POST['num'];
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$mail = $_POST['email'];
$nascita = $_POST['nascita'];
$provincia = $_POST['provincia'];
$indirizzo = $_indirizzo['indirizzo'];
$control = mysql_query("SELECT * FROM offerte WHERE num = '".$num."' ") or die(mysql_error());
$info = mysql_fetch_array($control);
$numoff = $resrow['numoff'];
if ($numoff == 0) {
echo "Non è possibile completare l'operazione: l'offerta richiesta è esaurita";
} else {
$numoff = $numoff - 1;
$countdown = mysql_query("UPDATE offerte SET numoff = '".$numoff."' WHERE num = '".$num."' ") or die(mysql_error());
//INIZIO GENERAZIONE CODICE
do {
mysql_select_db($database, $acquisti);
function rPass($length = 6) {
// Questo array contiene i caratteri con i quali
// saranno create le password
$lettere = explode(" ",
"A B C D E F G H I J K L M N O P Q R S T U V W X Y Z "
."a b c d e f g h i j k l m n o p q r s t u v w x y z "
."0 1 2 3 4 5 6 7 8 9");
// questo ? il clico tramite si crea la password
for($i=0;$i<$length;$i++) {
srand((double)microtime()*8625342);
$foo = rand(0, 61);
$pass = $pass.$lettere[$foo];
}
$control = mysql_query("SELECT * FROM acquisti WHERE codeoff = '".$pass."'") or die (mysql_error());
if (mysql_num_rows($control) != 0) {
$esist = 0;
} else { $esist = 1; }
return $pass;
return $esist;
}
} while ( $esist == 0);
//FINE GENERAZIONE CODICE
mysql_select_db($database, $acquisti);
$buy = mysql_query("INSERT INTO acquisti (num, nome, cognome, email, nascita, provincia, indirizzo, codeoff) values ('".$num."', '".$nome."', '".$cognome."', '".$email."', '".$nascita."', '".$provincia."', '".$indirizzo."', '".$pass."')") or die (mysql_error());
if ($bSuccesso)
{
$intestazioni = "MIME-Version: 1.0\r\n";
$intestazioni .= "Content-type: text/html; charset=iso-8859-1\r\n";
$messaggio = "
<html><head><title>Codice acquisto</title></head>
<body>
<h1>Grazie per aver effettuato l'acquisto</h1><br><br>
Stampa questa mail e consegnala presso $azienda; il pagamento dovrà essere effettuato in loco secondo le modalità stabilite dall'azienda erogatrice dell'offerta.<br><br>
CODICE OFFERTA: $pass
</body></html>";
mail ($mail, "Codice acquisto", $messaggio, $intestazioni);
echo "Acquisto avvenuto con successo; una mail con il codice per attivare l'offerta è stata inviata alla tua casella di posta elettronica.";
header('Location: index.php');
mysql_select_db($databse, $offerte);
$countdown = mysql_query("UPDATE offerte SET numoff = (numoff - 1) WHERE num = '".$num."' ") or die(mysql_error());
}
else
{
echo '<p align="center">Spiacenti, è avvenuto un errore! Indietro per riprovare.</p>';
}
}
?>
Co sa c'è che non va?Codice PHP:
<?php
header('Content-type: text/html;charset=utf-8');
$hostname = "localhost";
$database = "***";
$username = "***";
$password = "***";
$utenti = mysql_pconnect($hostname, $username, $password) or trigger_error(mysql_error(),E_USER_ERROR);
$offerte = mysql_pconnect($hostname, $username, $password) or trigger_error(mysql_error(),E_USER_ERROR);
$acquisti = mysql_pconnect($hostname, $username, $password) or trigger_error(mysql_error(),E_USER_ERROR);
?>
Perché hai 3 database? Su altervista puoi averne solo uno mysql, e le connessioni verso database esterni sono disabilitate.
Ciao!
regolamento altervista_______________ regolamento forum
Ho un solo database. Ho però tre tabelle nel database
E allora devi fare una sola connessione. Vedi qui.
Tra l'altro, non è necessario inserire la password corretta: puoi lasciare il campo vuoto (che è più sicuro).
Le tabelle le specifichi nelle query.
Se stai imparando ora, non ti conviene imparare le funzioni mysql_*, perché sono deprecate. Dovresti partire subito da mysqli.
Ciao!
regolamento altervista_______________ regolamento forum
Non capisco al posto di cosa e come dovrei usare mysql_connect()
Non ho quindi capito quale sia il problema che ha il mio codice...
Problema risolto; un piccolissimo errore di battitura all'inizio. avevo scritto $dtabase anziche $database
L'esecuzione ora non da errori, non capisco però perchè sebbene il numero di articoli disponibili sia 5 l'if lo consideri come 0 e visualizzi un messaggio d'errore predisposto.
Codice PHP:
<?php
session_start();
require_once('mysqlconn.php');
mysql_select_db($database, $offerte);
$bSuccesso = true;
$num = $_POST['num'];
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$mail = $_POST['email'];
$nascita = $_POST['nascita'];
$provincia = $_POST['provincia'];
$indirizzo = $_indirizzo['indirizzo'];
$control = mysql_query("SELECT * FROM offerte WHERE num = '".$num."' ") or die(mysql_error());
$info = mysql_fetch_array($control);
$numoff = $resrow['numoff'];
if ($numoff == 0) {
echo "Non è possibile completare l'operazione: l'offerta richiesta è esaurita";
} else {....
.......
?>