Captca

Ho finalmente trovato Captca senza DB, non riesco però a visualizzare l'immagine con i caratteri penso sia questo da modificare, ho inserito la stringa di dove si trova il file arial.ttf

$font = "C:windows\fonts\arial.ttf";

Nel form:

&nbsp;&nbsp;&nbsp;<img src="captca-image.php" alt="CAPTCHA image" width="60" height="20" vspace="1" align="top" /> 
&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="validator" id="validator" size="5" /> 
<font size="2" color="red" face="arial">Scrivi il codice</font>
<?php 
if (!empty($_POST['validator']) && $_POST['validator'] == $_SESSION['rand_code']) { 
unset($_SESSION['rand_code']); 
} 
?>

Ho creato un file captca-image.php

<?php

//Captca code

session_start(); 
if (empty($_SESSION['rand_code'])){ 
$str = ""; 
$length = 0; 
for ($i = 0; $i < 4; $i++){ 
// this numbers refer to numbers of the ascii table (small-caps) 
$str .= chr(rand(97, 122)); 
} 
$_SESSION['rand_code'] = $str; 
} 
$imgX = 60; 
$imgY = 20; 
$image = imagecreatetruecolor(60, 20); 

$backgr_col = imagecolorallocate($image, 238,239,239); 
$border_col = imagecolorallocate($image, 208,208,208); 
$text_col = imagecolorallocate($image, 46,60,31); 

imagefilledrectangle($image, 0, 0, 60, 20, $backgr_col); 
imagerectangle($image, 0, 0, 59, 19, $border_col); 

$font = "C:windows\fonts\arial.ttf";
$font_size = 10; 
$angle = 0; 
$box = imagettfbbox($font_size, $angle, $font, $_SESSION['rand_code']); 
$x = (int)($imgX - $box[4]) / 2; 
$y = (int)($imgY - $box[5]) / 2; 
imagettftext($image, $font_size, $angle, $x, $y, $text_col, $font, $_SESSION['rand_code']); 

header("Content-type: image/png"); 
imagepng($image); 
imagedestroy ($image);
 
//Fine Captca code 

 ?>
inviato 10 anni fa
php
php
6
X 0 X

Prova a richiamare direttamente il file captca-image.php

Ricevi degli errori?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Prova a richiamare direttamente il file captca-image.php

Ricevi degli errori?

Non capisco cosa intendi con "Prova a richiamare direttamente il file captca-image.php", non lo fa già il form?

Ricevo un'alert se non inserisco almeno un carattere qualsiasi.

Posto anche il form così hai tutto:

<form method="POST" action="ins.php" name="mioform"  onSubmit="return controlla()">
            <tr> 
            <td><font size="2"><b>NOME:</font><font size="2" color="red">&nbsp;*</b></font>
                  </td>
            <td><input name="nome" value="<?echo $_SESSION['nome'];?>" size="30"  type="text" maxlength="15"
                  onblur="this.value=this.value.replace(/^\s*/,'')">
                  &nbsp;&nbsp;<img src="../faccine/pxaura.gif"alt="Paura"onClick="document.mioform.messaggio.value+='pxaura'">
                  &nbsp;<img src="../faccine/rxide.gif"alt="Ride"onClick="document.mioform.messaggio.value+='rxide'">
                  &nbsp;<img src="../faccine/cxonfuso.gif"alt="Confuso"onClick="document.mioform.messaggio.value+='cxonfuso'">
                  &nbsp;<img src="../faccine/fxelice.gif"alt="Felice"onClick="document.mioform.messaggio.value+='fxelice'">
           </td>
          </tr>
          <tr> 
            <td><font size="2"><b>EMAIL:</b><font color="#008080"></font></td>
            <td><input name="email" value="<?echo $_SESSION['email'];?>" size="30" type="text" maxlength="30" onBlur="this.value=ignoreSpaces(this.value)">
                  &nbsp;&nbsp;<img src="../faccine/ixmpossibile.gif"alt="Impossibile"onClick="document.mioform.messaggio.value+='ixmpossibile'">
                  &nbsp;&nbsp;<img src="../faccine/oxcchiolino.gif"alt="Occhiolino"onClick="document.mioform.messaggio.value+='oxcchiolino'">
                  &nbsp;&nbsp;<img src="../faccine/pxiange.gif"alt="Piange"onClick="document.mioform.messaggio.value+='pxiange'">
                  &nbsp;&nbsp;<img src="../faccine/oxk!.gif"alt="Ok!"onClick="document.mioform.messaggio.value+='oxk!'">
          </td>
          </tr>
          <tr> 
            <td><font size="2"><b>SITO:</b><font color="#008080"></font></td>
            <td><input name="url" value="<?echo $_SESSION['url'];?>" size="30" type="text" maxlength="100"  onBlur="this.value=ignoreSpaces(this.value)">
                  &nbsp;&nbsp;<img src="../faccine/txestardo.gif"alt="Testardo"onClick="document.mioform.messaggio.value+='txestardo'">
                  &nbsp;<img src="../faccine/gxrattacapo.gif"alt="Grattacapo"onClick="document.mioform.messaggio.value+='gxrattacapo'">
                  &nbsp;<img src="../faccine/sxaluto.gif"alt="Ciao" onClick="document.mioform.messaggio.value+='sxaluto'">
           </td>
          </tr>
               <tr> 
            <td><font size="2"><b>CITTA':</b><font color="#008080"></font></td>
            <td><input name="citta" value="<?echo $_SESSION['citta'];?>" size="30" type="text" maxlength="15" onBlur="this.value=ignoreSpaces(this.value)"> 
                  </td>
          </tr>
          <tr> 
           <td valign="top"><font size="2"><b>MESSAGGIO:</font><font size="2" color="red">&nbsp;*</b></font>
                <br>
                <br>
                <br>
                <br>
                &nbsp;&nbsp;&nbsp;<img src="captca-image.php" alt="CAPTCHA image" width="60" height="20" vspace="1" align="top" /> 
           &nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="validator" id="validator" size="5" /> 
                <font size="2" color="red" face="arial">Scrivi il codice</font>
   <?php 
if (!empty($_POST['validator']) && $_POST['validator'] == $_SESSION['rand_code']) { 
unset($_SESSION['rand_code']); 
} 
    ?> 
          </td>
                <td><textarea name="messaggio"  wrap="soft" cols="40" rows="10" onkeyup="conta(this.form)" 
                onblur="this.value=this.value.replace(/^\s*/,'')"><?echo $_SESSION['messaggio'];?></textarea>
           </td>
                </tr>
                </table>
                 <table width="450" border="0">
                  <tr><td align="center" width="90"><input type="submit" value="Invia"></td><td><font face="arial" size="2">Max&nbsp;<input value="500" size="1" name="num" readonly> 
                caratteri</font></td>
           </tr>
                </form>
risposto 10 anni fa
php
php
6
X 0 X

Cioè...il file captca l'ho inserito nel file ins.php dove viene elaborato il form.

risposto 10 anni fa
php
php
6
X 0 X

intendevo dire di provare a richiamare il file che genera l'immagine direttamente dal browser, senza passare dal form. In pratica devi digitare nel browser l'URL del file in questione (es. http://localhost/captca-image.php)

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

intendevo dire di provare a richiamare il file che genera l'immagine direttamente dal browser, senza passare dal form. In pratica devi digitare nel browser l'URL del file in questione (es. http://localhost/captca-image.php)

 :bye:

Si, appare un rettangolino grigio, ma nel form niente, guarda http://www.photoman.altervista.org/guestbook/form.php

risposto 10 anni fa
php
php
6
X 0 X

se accedo direttamente all'immagine mi da un errore 404  :dunno:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
se accedo direttamente all'immagine mi da un errore 404  :dunno:

Era in un'altra cartella, ora dovrebbe andare

risposto 10 anni fa
php
php
6
X 0 X
se accedo direttamente all'immagine mi da un errore 404  :dunno:

Ora sembra funzionare a metà, il problema ora è che basta inserire un qualsiasi carattere e si invia...eppoi appaiono solo 4 caratteri ma non numeri :lamo:

http://www.photoman.altervista.org/guestbook/form.php

risposto 10 anni fa
php
php
6
modificato 10 anni fa
X 0 X

gli script che hai riportato non contengono il codice per la verifica del codice capcha. Lo script che gestisce il POST del form dovrebbe includere un controllo per verificare se i caratteri presenti nell'immagine sono stati correttamente riconosciuti.

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
gli script che hai riportato non contengono il codice per la verifica del codice capcha. Lo script che gestisce il POST del form dovrebbe includere un controllo per verificare se i caratteri presenti nell'immagine sono stati correttamente riconosciuti.

Nella pag. che elabora il form "ins.php" ho solo questo

if(empty($validator))
echo "Inserire il Codice";
risposto 10 anni fa
php
php
6
X 0 X

troppo poco, verifichi solo se il campo è stato lasciato vuoto  :dunno:

controlla la documentazione del codice che stai usando e cerca il controllo sulla correttezza del codice

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

troppo poco, verifichi solo se il campo è stato lasciato vuoto  :dunno:

controlla la documentazione del codice che stai usando e cerca il controllo sulla correttezza del codice

Non ho documentazione...sto vedendo in questo tuo articolo Captca se riesco a tirar fuori qualcosa...ma io non ho il DB.

risposto 10 anni fa
php
php
6
X 0 X

Il mio articolo non fa uso delle sessioni quindi il comportamento è diverso.

Nel tuo caso dovresti procedere in questo modo:

All'inizio dello script devi inserire (se non c'è già):

session_start();

poi per controllare il codice ti serve un controllo di questo tipo:

if ($_SESSION['rand_code'] != $_POST['validator']) die('Codice errato!');

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Il mio articolo non fa uso delle sessioni quindi il comportamento è diverso.

Nel tuo caso dovresti procedere in questo modo:

All'inizio dello script devi inserire (se non c'è già):

session_start();

poi per controllare il codice ti serve un controllo di questo tipo:

if ($_SESSION['rand_code'] != $_POST['validator']) die('Codice errato!');

 :bye:

mi da questo errore

Parse error: syntax error, unexpected T_IS_NOT_EQUAL in /membri2/miosito/guestbook/ins.php on line 118

Parte del codice è questo:

session_start();

$_SESSION['nome'] = $nome;

$_SESSION['email'] = $email;

$_SESSION['url'] = $url;

$_SESSION['citta'] = $citta;

$_SESSION['messaggio'] = $messaggio;

else:

$nome = str_replace("\n","",$nome);

$citta = str_replace("\n","",$citta);

$url = str_replace("\n","",$url);

if(strpos($url, 'http') === false) $url = "http://$url";

$messaggio = str_replace("\n","",$messaggio);

if ($_SESSION['rand_code']) != $_POST['validator']) die('Codice errato!');  //linea 118

risposto 10 anni fa
php
php
6
X 0 X

Si, avevo fatto un errore nello scrivere il codice nel mio precedente post, che poi ho subito corretto, quindi prova a ricopiarlo.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Si, avevo fatto un errore nello scrivere il codice nel mio precedente post, che poi ho subito corretto, quindi prova a ricopiarlo.

 :bye:

Ho solo questo:

if ($_SESSION['rand_code'] != $_POST['validator']) die('Codice errato!');

risposto 10 anni fa
php
php
6
X 0 X

funziona?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
funziona?

E' quello che mi da errore

risposto 10 anni fa
php
php
6
X 0 X
funziona?

Funziona a metà, anche se lo inserisco giusto esce l'alert

risposto 10 anni fa
php
php
6
X 0 X

non funziona proprio allora....

metti un echo $_SESSION['rand_code']; e un echo $_POST['validator']; e controlla se vengano visualizzati il codice corrretto e quello inviato

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

non funziona proprio allora....

metti un echo $_SESSION['rand_code']; e un echo $_POST['validator']; e controlla se vengano visualizzati il codice corrretto e quello inviato

Ho messo così:

$_SESSION['rand_code'];echo"rand code"; 

$_POST['validator']; echo"validator";

Sia che inserisco un carattere o il codice esatto il form si invia ed esce sempre "validator"

risposto 10 anni fa
php
php
6
X 0 X

 :dunno:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
:dunno:

Il codice che mi da sempre errore (sia che metto un solo carattere o il codice giusto) l'ho messo in questo contesto:

//Campi obbligatori

if(empty($nome))

$errore .= "<br><br><br><br><br><br><br><br><tr><td valign=\"center\"><center><font family=\"Arial\" size=\"5\">Inserire il Nome</font></center><br />";

else

if(empty($messaggio))

$errore .= "<br><br><br><br><br><br><br><br><tr><td valign=\"center\"><center><font family=\"Arial\" size=\"5\">Inserire il Messaggio</font></center><br />";

else

if(empty($validator))

$errore .= "<br><br><br><br><br><br><br><br><tr><td valign=\"center\"><center><font family=\"Arial\" size=\"5\">Inserire il Codice</font></center><br />";

else

//Controlla che il codice Captca inserito corrisponda a quello che appare sopra

if ($_SESSION['rand_code'] != $_POST['validator'])

$errore .= "<br><br><br><br><br><br><br><br><tr><td valign=\"center\"><center><font family=\"Arial\" size=\"5\">Codice errato!</font></center><br />";

if($errore) 

echo $errore;

risposto 10 anni fa
php
php
6
X 0 X

Non mi rispondi Gianni? :-[

risposto 10 anni fa
php
php
6
X 0 X

Ho risolto :D, mancava session_start(); appena prima del codice, credevo che bastasse metterlo solo una volta nella pag.

Ora in php devo solo modificare i caratteri dell'immagine, ho fatto vari tentativi a vuoto.

Cioè vorrei che appaiono anche i numeri da 1 a 9 mischiati ai caratteri da "a" a "z" in totali 5 se si può.

Ti posto la parte

//Captca-image 

session_start(); 

if (empty($_SESSION['rand_code'])){ 
$str = ""; 
$length = 0; 
for ($i = 0; $i < 4; $i++){ 
// this numbers refer to numbers of the ascii table (small-caps) 
$str .= chr(rand(97, 122)); 
} 
$_SESSION['rand_code'] = $str; 
} 
$imgX = 60; 
$imgY = 20; 
$image = imagecreatetruecolor(60, 20);
...
risposto 10 anni fa
php
php
6
X 0 X

cambia :

for ($i = 0; $i < 4; $i++){ 
// this numbers refer to numbers of the ascii table (small-caps) 
$str .= chr(rand(97, 122)); 
}

con

$caratteri = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
for ($i = 0; $i < 5; $i++){ 
$str .= $caratteri{rand(0,34)};
}

se vuoi usare solo i caratteri minuscoli basca sostituirli in $caratteri

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
modificato 10 anni fa
X 0 X

cambia :

for ($i = 0; $i < 4; $i++){ 
// this numbers refer to numbers of the ascii table (small-caps) 
$str .= chr(rand(97, 122)); 
}

con

$caratteri = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
for ($i = 0; $i < 5; $i++){ 
$str .= $caratteri{rand(0,34)};
}

se vuoi usare solo i caratteri minuscoli basca sostituirli in $caratteri

 :bye:

 O0

risposto 10 anni fa
php
php
6
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda