-
[PHP]Captcha
Buona sera.
Ho seguito passo passo questo topic:
http://forum.it.altervista.org/php-m...tcha-come.html
E sono arrivato a questa conclusione:
File che genera il captcha:
Codice PHP:
<?php
/* Inizio Configurazione */
$numero1 = rand(0,9);
$numero2 = rand(0,9);
$numero3 = rand(0,9);
$numero4 = rand(0,9);
$x = "7";
$y = "20";
// Sfondo Obbligatoriamente PNG
$sfondo = "background.png";
// Colore Sfondo diviso da "," in formato RGB (purtroppo diviso in 3 variabili)
$rosso = "255";
$giallo = "0";
$blu = "0";
$font = "cour.ttf";
$grandezza_font = "15";
$angolo = "0";
/* Fine Configurazione */
$bac = imagecreatefrompng($sfondo);
$txt = "$numero1 $numero2 $numero3 $numero4";
$col = imagecolorallocate($bac,$rosso,$giallo,$blu);
imagefttext($bac,$grandezza_font,$angolo,$x,$y,$col,$font,$txt);
/* Inizio memorizzazzione codice in una sessione */
session_start();
$_SESSION['crea'] = $txt;
/* Fine memorizzazzione codice in una sessione */
Header("Content-type: image/png");
imagepng($bac);
imagedestroy($bac);
?>
File che invia la e-mail:
Codice PHP:
<?php
session_start('crea');
$utente = $_POST['captcha'];
$validato = $_SESSION['crea'];
if($utente == $validato){
$email = "***mia mail***"; //Specificare un indirizzo email valido
$nome = $_POST["nome"];
$testo = $_POST["testo"];
$ris = $_POST["ris"];
if($nome == "") echo "Devi inserire l'indirizzo del sito.";
else if($testo == "") echo "Devi inserire una descrizione del sito.";
else if($ris == "") echo "Devi inserire un indirizzo e-mail con il quale posso contattarti";
else
if(mail($email, "Scambio link", "mail: $ris, Indirizzo sito: $nome", $testo))
echo "La tua e-mail è stata inviata correttamente al mio indirizzo.";
else echo "Si è verificato un errore durante l'invio.";
}else{
echo "Codice Captcha Errato.";
} ?>
e file del form:
Codice PHP:
<form action="invio.php" method="post">
<?php
session_start('crea');
echo "<img src=\"captcha.php\" style=\"border-width:1px\" alt=\"captcha dont found\" />";
?>
<input type="text" name="captcha" value = "" /><br />
<p>
(tutti i campi sono obbligatori)</p>
<p>Indirizzo
del sito:
<input type="text" name="nome" size="20" />
<br />
</p>
<p>
Tua mail:
<input type="text" name="ris" size="20" />
</p>
<p>
Descrivilo:
<textarea cols="30" rows="7" name="testo"></textarea></p>
<p>
<input type="submit" value="invia" /> <input type="reset" value="cancella" />
</p>
</form>
Solo che come potete vedere il captcha non viene generato:
http://atterzolivello.altervista.org/captcha/
In bona fede ho caricato nella cartella captcha una immagine .png
http://atterzolivello.altervista.org...background.png
e un file ttf:
http://atterzolivello.altervista.org/captcha/cour.ttf
Grazie della cortese attenzione.
buona sera.:wink:
-
Ho dato una rapida controllata al codice e, purtroppo, non sono riuscito a trovare errori. Aspettiamo l'intervento di qualcuno che abbia lavorato più di me con CAPTCHA. Però ti posso dire che si scrive "CAPTCHA not found" e non "CAPTCHA dont found".
-
L'immagine non è una PNG, ma una JPEG rinominata.
Non è tanto importante l'estensione che dai al file, quanto il formato.
Se non vuoi cambiare immagine o convertire quella che hai adesso, puoi utilizzare createimagefromjpeg() al posto di createimagefrompng(); come avrai capito ogni formato ha una sua funzione per la creazione.
Siccome non sono sicuro che sia l'unico errore e so che sei agli inizi con il php, ti insegno un trucco: la riga con header(...) serve ad indicare al browser di trattare l'output come un'immagine PNG, quindi gli errori dello script rimangono nascosti dietro un "impossibile visualizzare l'immagine" decisamente poco indicativo; se la commenti puoi vederli e correggerli.
Ciao!
-
Bene ho usato createimagefromjpeg(); come ha detto il buon programmazioned, e ora il captcha viene generato.
Ma purtroppo quando schiaccio "invia" mi dice "captcha errato" come mai?
Ho qualche dubbio sulle sessioni, che se non ho capito male, servirebbero ad inviare dati da uno script php all'altro.
ma come si usano?
Grazie. ciao! :mrgreen:
-
Modifica il file che invia l'e-mail così e vedi se funziona. In caso negativo decommenta le righe che stanno prima dell'if e dimmi cosa ti restituisce.
Codice PHP:
<?php
session_start();
$utente = $_POST['captcha'];
$validato = $_SESSION['crea'];
// echo "Codice inserito: <b>{$utente}</b> <br />";
// echo "Codice CAPTCHA: <b>{$validato}</b>";
// exit();
if($utente == $validato)
{
$email = "***mia mail***"; //Specificare un indirizzo email valido
$nome = $_POST["nome"];
$testo = $_POST["testo"];
$ris = $_POST["ris"];
if($nome == "")
echo "Devi inserire l'indirizzo del sito.";
elseif($testo == "")
echo "Devi inserire una descrizione del sito.";
elseif($ris == "")
echo "Devi inserire un indirizzo e-mail con il quale posso contattarti";
elseif(mail($email, "Scambio link", "mail: $ris, Indirizzo sito: $nome", $testo))
echo "La tua e-mail è stata inviata correttamente al mio indirizzo.";
else
echo "Si è verificato un errore durante l'invio.";
}
else
echo "Codice Captcha Errato.";
?>
Ti consiglio di scrivere codice PHP più pulito... non si capisce niente! Ho fatto qualche correzione io in modo che capisci come scrivere sorgente più comprensibile.
-
Uh...
le variabili hanno valori diversi ecco perchè non funzia...
:(
Codice inserito: 6280
Codice CAPTCHA: 1 9 7 4
non ci avevo proprio pensato a stampare il contenuto,... bravo..
e ora?
-
Scusa, ma nell'immagine quindi non compare il codice corretto, se hai messo quello?
Prova a modificare questa riga:
Codice PHP:
$txt = "$numero1 $numero2 $numero3 $numero4";
Togliendo gli spazi.
-
Ho tolto gli spazi
ma, come tu stesso puoi vedere, la variabile $validato = $_SESSION['crea'];
$validato si comporta come una costante come se non venisse mai modificato il suo valore,
strano.. 1974
secondo me c'è qualcosa che non và nelle sessioni...
-
io ti consiglio di usare i cookie...
prima di salvarli di codificarli o in md5 o altro cosi non potrà leggere il contenuto in chiaro l'utente...^^
-
Non vedo che senso ha usare i cookie, che servono per memorizzare dati a distanza, laddove tutti i sistemi utilizzano le sessioni.
E poi che senso avrebbe codificare i dati in MD5 per impedire all'utente di leggerli? Tanto li legge dall'immagine! Mah...
-
Ho lasciato perdere quel captcha ne ho scaricato uno già fatto e l'ho modificato a dovere:
[URL="http://atterzolivello.altervista.org/captcha3/pagina.php#"]http://atterzolivello.altervista.org/captcha3/pagina.php#[/U]
pagina.php
Codice PHP:
<script language='JavaScript'>
<!--
function setFocus() {
document.verifica.key.focus();
}
-->
</script>
<?
session_start();
$key=$_POST['key'];
$email = "ilnero91@hotmail.it"; //Specificare un indirizzo email valido
$nome = $_POST["nome"];
$testo = $_POST["testo"];
$ris = $_POST["ris"];
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<title></title>
</head>
<body onLoad="setFocus()">
<img src='immagine.php' alt="errore">
<form action="#<?php echo SID?>" method="post" name="verifica" onSubmit="setFocus();">
<input type="text" name="key" size=17 maxlength=6 ><br>
<p>
(tutti i campi sono obbligatori)</p>
<p>Indirizzo
del sito:
<input type="text" name="nome" size="20" />
<br />
</p>
<p>
Tua mail:
<input type="text" name="ris" size="20" />
</p>
<p>
Descrivilo:
<textarea cols="30" rows="7" name="testo"></textarea></p>
<p> <input type="reset" value="cancella" />
</p>
<input type="submit" value="invia ">
</form>
<?
//if($key){
if($key==$code && $nome!="" && $testo != "" && $ris != ""){
echo "<p>Codice esatto, la tua richiesta è stata inviata.</p>";
mail($email, "Scambio link", "mail: $ris, Indirizzo sito: $nome", $testo);
}
else{
echo "<p>Il codice inserito è errato oppure controlla di aver inserito correttamente utti i campi</p>";
}
?>
</body>
</html>
Solo che stò avendo problemi ad incorporarlo in una pagina drupal.
ho provato ad usare
<?php
include ("../captcha3/pagina.php");
?>
ma non mi mostra l'immagine del captcha
http://atterzolivello.altervista.org/byAT/?q=node/77
-
Modifica l'indirizzo dell'immagine in
Citazione:
/captcha3/immagine.php
Ciao!
-
Si ora mi mostra l'immagine
ma mi dice captcha errato...
ho provato in tutti i modi:
http://atterzolivello.altervista.org...3/immagine.php
../captcha3/immagine.php
/captcha3/immagine.php
se vai qui:
http://atterzolivello.altervista.org...ha3/pagina.php
funzionava
si vede l'immagine su drupal ma continua a dirmi codice errato
mah...
-
Non c'entra il percorso dell'immagine, lascia quello che ti avevo suggerito; il problema è nel codice php che viene eseguito prima che il form sia inviato.
Dopo il secondo <? aggiungi
Codice PHP:
if(isset($_POST['key'])){
e chiudi la graffa prima del ?>.
Ciao!
-
Ho fatto come dici tu ma l'unica cosa che fa è non mostrarmi messaggi quando carico la pagina:
http://atterzolivello.altervista.org/byAT/?q=node/77
per il resto mi da sempe errore
mentre qui:
funziona alla perfezione:
http://atterzolivello.altervista.org...ha3/pagina.php
EDIT:
Il sorgente della pagina di drupal è
<?php
include("../captcha3/pagina.php");
?>
devo aggiungere nient'altro?