Visualizzazione risultati 1 fino 15 di 15

Discussione: [PHP]Captcha

  1. #1
    Guest

    Predefinito [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.
    Ultima modifica di atterzolivello : 23-12-2009 alle ore 12.39.59

  2. #2
    Guest

    Predefinito

    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".

  3. #3
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    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!
    Ultima modifica di programmazioned : 22-12-2009 alle ore 23.23.24

  4. #4
    Guest

    Predefinito

    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!

  5. #5
    Guest

    Predefinito

    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.

  6. #6
    Guest

    Predefinito

    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?

  7. #7
    Guest

    Predefinito

    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.

  8. #8
    Guest

    Predefinito

    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...

  9. #9
    Guest

    Predefinito

    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...^^

  10. #10
    Guest

    Predefinito

    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...

  11. #11
    Guest

    Predefinito

    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

  12. #12
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Modifica l'indirizzo dell'immagine in
    /captcha3/immagine.php
    Ciao!

  13. #13
    Guest

    Predefinito

    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...
    Ultima modifica di atterzolivello : 23-12-2009 alle ore 19.02.16

  14. #14
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    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!
    Ultima modifica di programmazioned : 23-12-2009 alle ore 19.10.20

  15. #15
    Guest

    Predefinito

    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?
    Ultima modifica di atterzolivello : 23-12-2009 alle ore 19.19.53

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •