Nel mio sito sto cercando di inserire un'immagine di conferma per accedere, una tipo quelle che si vedone nei siti dove c'è un'immagini con lettere e/o numeri da copiare in un campo sotto, come posso fare?
Nel mio sito sto cercando di inserire un'immagine di conferma per accedere, una tipo quelle che si vedone nei siti dove c'è un'immagini con lettere e/o numeri da copiare in un campo sotto, come posso fare?
butto giù alcune righe, non prenderle come funzionanti ( anche se dovrebbero).
Creiamo l'immagine:
questo stamperà in una immagine un codice casuale e FUNZIONA, basta cambiare il valore di " $length="8" " per avere un valore più o meno grande.Codice PHP:
<?php
function random_str($length="8")
{
$set = array("a","A","b","B","c","C","d","D","e","E","f","F","g","G","h","H","i","I","j","J","k","K","l","L","m","M","n","N","o","O","p","P","q","Q","r","R","s","S","t","T","u","U","v","V","w","W","x","X","y","Y","z","Z","1","2","3","4","5","6","7","8","9");
$str;
for($i=1;$i<=$length;$i++)
{
$ch = rand(0, count($set)-1);
$str .= $set[$ch];
}
return $str;
}
$check=random_str();
$im = imagecreatefrompng ("base.png"); //immagine qualsiasi di base sulla quale scrivere
$textcolor = imagecolorallocate($im, 255, 255, 255); //colore della scritta
// write the string at the top left
imagestring($im, 2, 2, 2,$check, $textcolor);
// output the image
header("Content-type: image/png");
imagePNG($im);
?>
ora lo confrontiamo
come detto dovrebbe funzionare ma NON è completo.Codice PHP:
<form method="post" action="">
<input name="valore">
<input type="submit" name="submit" value="vai">
</form>
<?
if($submit=="vai"){
if($valore==$check"){
echo"ok, controllo valido";
}
else
{
echo"Controllo non valido, riprova";
}
?>
edit: dimenticavo, la creazione dell'immagine "base" DEVE essere PNG
Ultima modifica di makpaolo : 24-02-2006 alle ore 18.01.39
Se smetti di imparare e evolverti sei morto dentro
guarda qui: http://forum.altervista.org/showthread.php?t=49147
ciao ^__^
io ho dato una modificatina allo script eccolo adesso:
Pagina reg.php:
Pagine reg_chek.phpCodice PHP:
<?php
function random_str($length="8")
{
$set = array("a","A","b","B","c","C","d","D","e","E","f","F","g","G","h","H","i","I","j","J","k","K","l","L","m","M","n","N","o","O","p","P","q","Q","r","R","s","S","t","T","u","U","v","V","w","W","x","X","y","Y","z","Z","1","2","3","4","5","6","7","8","9");
$str;
for($i=1;$i<=$length;$i++)
{
$ch = rand(0, count($set)-1);
$str .= $set[$ch];
}
return $str;
}
$check=random_str();
$im = imagecreatefrompng ("base.png"); //immagine qualsiasi di base sulla quale scrivere
$textcolor = imagecolorallocate($im, 255, 255, 255); //colore della scritta
// write the string at the top left
imagestring($im, 2, 2, 2,$check, $textcolor);
// output the image
header("Content-type: image/png");
imagePNG($im);
?>
<form method="post" action="reg_chek.php">
<input name="valore">
<input type="submit" name="submit" value="vai">
<input name="check" type="hidden" id="check" value="<? echo $check; ?>">
</form>
Ecco gli errori che mi da:Codice PHP:
<html>
<head>
<title>Documento senza titolo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
$valore = $_POST[valore];
$check = $_POST[check];
$control = "" ;
if ($valore == $check) $control = "ok" else $control = "error";
if ($control == "ok") echo "OK! valore:$valore, check:$check";
if ($control == "error") echo "Errore! valore:$valore, check:$check";
?>
</body>
</html>
I primi sono due banali errori di variabile, l'ultimo secondo me sta ad indicare che il mio EasyPHP 1.7 non supporta questa funzione? o che la mia versione PHP non è aggiornata? o che c'è qualche errore nel codice?Notice: Undefined variable: str in d:\programmi\easyphp1-7\www\p.s\registrazione.php on line 5
Notice: Undefined variable: str in d:\programmi\easyphp1-7\www\p.s\registrazione.php on line 9
Fatal error: Call to undefined function: imagecreatefrompng() in d:\programmi\easyphp1-7\www\p.s\registrazione.php on line 18
per i primi due prova a sostiruire $str; con $str = ''; e poi quando stampi l'output dell'immaine non puoi mettere altro codice...
per l'altro errore devi scaricarti la libreria gd
ciao ^__^
propongo di usare array_rand() al posto del ciclo for
1) è più veloce
2) non si ottengono lettere/numeri uguali