Avatar billede Asky Forsker
19. januar 2024 - 20:16 Der er 16 kommentarer og
1 løsning

kontrol af captcha virker ikke

Leger med en captcha, men får ikke fejl, når koden er forkert:

session_start();
if ($_POST['captcha'] != $_SESSION['security_code'] die("Sorry, the CAPTCHA code entered was incorrect!");
    session_destroy();
else

  $mail->send(); {
  echo "<H3>Tilmeldingen er blevet sendt af: ".$navn." <br/>
    Om lidt modtager du en email med alle oplysninger</h3>" ;
  }
Avatar billede erikjacobsen Ekspert
20. januar 2024 - 09:55 #1
Du kan hjælpe dig selv ved at skrive værdierne ud:

    session_start();
    print($_POST['captcha']);
    print($_SESSION['security_code']);

Er det de forventede værdier?
Avatar billede Asky Forsker
20. januar 2024 - 12:12 #2
Det lykkedes ikke at printe koderne ud.

I følge captcha koden har text-feltet ved siden af Captcha billedet navnet captcha.
Koden på Captcha billedet er ($_SESSION['security_code'])= $input.
 
if ($_POST['captcha'] != $input) die("CAPTCHA koden er forkert!");
    session_destroy();
else

men det virker heller ikke, så måske er jeg forkert et eller andet sted?
Avatar billede erikjacobsen Ekspert
20. januar 2024 - 12:24 #3
Jah, mon ikke der er et eller andet galt.... ;)

Kan du gå tilbage til koden fra dit spørgsmål? Vi skal først finde ud af hvorfor der ikke skrives noget ud.

Så med den kode, så lave en "Vis kilde" (eller hvad det hedder), og vis os den genererede HTML fra <form ...> til </form>
Avatar billede Asky Forsker
20. januar 2024 - 14:27 #4
fra <form ...> til </form> er meget lang, men her er html hvor captcha-en står

<p><img src="captcha.php" width="120" height="30" border="1" alt="CAPTCHA"></p>
<p><input type="text" size="6"  name="captcha" value=""><br>
<small>copy the digits from the image into this box</small></p>

<input type="submit" name="Submit" onclick="return validate();" value="Send" />

<div class="reset">
"captcha" value=""> står til "" det er så her man skriver koden fra captcha-billedet.

formen kalder en response-fil (sender en mail), hvor ovenstående kode står.
Avatar billede erikjacobsen Ekspert
20. januar 2024 - 14:43 #5
Hvis du har

    <input type="text" size="6"  name="captcha" value="">

og skriver noget i feltet og intet får ud på serveren med

    print($_POST['captcha']);

så kan der netop være noget galt med det der står i <form....> og </form> og indimellem.
Avatar billede Asky Forsker
20. januar 2024 - 14:55 #6
Nu taler vi nok forbi hinanden. Jeg har ikke selv server, men bruger et anerkendt webhotel.
Glemte at skrive før, at posterne andetsteds i koden er defineret ligesom andre input.

$input=($_SESSION['security_code']?? null);
$captcha=($_POST['captcha']?? null);
Avatar billede erikjacobsen Ekspert
20. januar 2024 - 15:00 #7
Hvis du har

    <input type="text" size="6"  name="captcha" value="">

og skriver noget i feltet og intet får ud i din PHP-kode med

    print($_POST['captcha']);

så kan der netop være noget galt med det der står i <form....> og </form> og indimellem.
Avatar billede Asky Forsker
20. januar 2024 - 17:19 #8
Hvis der slet ikke er nogen Captcha, virker siden perfekt. Det jo lidt fjollet med en captcha, der så ikke fanger forkert indtastning.
Avatar billede Asky Forsker
21. januar 2024 - 09:10 #9
Jeg kigger nu et helt andet sted:
    $_SESSION['security_code'] = $input;
ligger i filen captcha.php som danner billedet med koden på

($_POST['captcha']); ligger i min formular (sammen med billedet)

Begge dele skal hentes og behandles i filen response.php derfor mangler der vist noget her:
session_start();
if ($_POST['captcha'] != $_SESSION['security_code'] die("Sorry, the CAPTCHA code entered was incorrect!");
    session_destroy();
else

  $mail->send(); {
Avatar billede erikjacobsen Ekspert
21. januar 2024 - 11:41 #10
Hva' med om vi kigger på hele koden? Vi får ikke meget gavn af at kigge på enkelte linjer hist og pist.
Avatar billede Asky Forsker
21. januar 2024 - 16:06 #11
responsen fylder 260 linjer og formularen fylder 215.
Jeg har prøvet at sætte en sti ind, men det giver fejl. Den nu viste kode fra en anden captcha, men den giver også fejl
session_start();
if /captcha.php/$text() !=($_POST["vercode"] die("CAPTCHA koden er forkert!");
    echo  '<strong>Incorrect verification code.</strong>';
else
Jeg har nu prøvet 4-5 forskellige opskrifter på captcha-er fundet på nettet.
Enten bliver tekst eller tal på billedet ikke vist, eller også vises der tal, men uden at forkert kode giver fejl.
Heldigvis lykkes andre tiltag mod spam-udfyldning af formularerne, så en captcha kan undværes.
Avatar billede Asky Forsker
21. januar 2024 - 16:38 #12
Nå men jeg lavede lige et lille forsøg: På en hjemmeside fandt jeg en meget enkel captcha.
der er tre filer en form.php, en submit.php og en captcha.php
form.php kalder filen submit.php, der afgør om koden er rigtig eller forkert.
så er vi så langt. spørgsmålet er, om man man lægge et formkald ind i en eksisterende form, som kalder en response.php?
Avatar billede Asky Forsker
21. januar 2024 - 16:40 #13
Avatar billede erikjacobsen Ekspert
21. januar 2024 - 16:51 #14
Du er en svær mand at hjælpe, Asky. Som jeg ser det løber du altid ind i supertrivielle problemer, som vi alle har prøvet, men jeg får aldrig lov til at se nok kode til at finde din fejl på de 3.5 sekund det plejer at tage. Hvad gør jeg så når det ikke virker?

1) Test-udskrifter. Hvis variabler indeholder værdier, så er jeg på sporet af noget. Hvis der ikke bliver udskrevet noget, så bliver jeg mistænksom - nåede den overhovedet til print-sætningerne? Så bliver de lige udvidet med f.ex.

    print("***********".$_POST['captcha']."***********");
    print("###########".$_SESSION['security_code']."##########");

Hvis heller ikke *-er og #-er kommer ud, så når de ikke til print-sætningerne. Og skulle der kun være et mellemrum som værdi, så kan jeg også se det.

2) Stadig problemer ... så laver jeg en minimal udgave af det jeg tester. En minimal HTML/PHP fil med <form...> ... </form> i, uden forstyrrende elementer. Og den tilhørende PHP-fil, der behandler indtastede værdier, begynder med udskrift af hele $_GET, $_POST, $_SESSION, $_COOKIES.

3) Stadig problemer ... så kan jeg nemt vise alt fra 2) til andre, der sikkert kan se fejlen.

:)
Avatar billede Asky Forsker
21. januar 2024 - 19:50 #15
Fra det lille forsøg
form.php:
<form action="submit.php" method="post">
Comment: <textarea name="coment"></textarea>
Enter Code <img src="captcha.php"><input type="text" name="vercode" />
<input type="submit" name="Submit" value="Submit" />
</form>
submit.php
<?php
session_start();
if ($_POST["vercode"] != $_SESSION["vercode"] OR $_SESSION["vercode"]=='')  {
    echo  '<strong>Incorrect verification code.</strong>';
} else {
    // add form data processing code here
    echo  '<strong>Verification successful.</strong>';
};
?>
og så captcha.php
de tre virker fint sammen.
---------------------
Mine formularer er alle opbygget med en formularfil og en response.php
Formularen start
t<?php echo $error_msg ?>
<form action="response.php" method="post" onsubmit="return validate(this)">
<input name="context" value="opret" type="hidden">
<input name="return_page" value="<?php echo $_SERVER['PHP_SELF'] ?>" type="hidden">
<input type="hidden" name="subject" value="privatbestilling" >
... input felter ofte 30-40 stk - et enkelt tilfælde 150 letlæsningsbøger
...et maildesign
og slutter med
<input type="submit" name="Submit" onclick="return validate();" value="Send" />

<div class="reset">
<input type="reset" value="Ryd formular" name="slet" id="slet"></div>
</div>
</form>
</body>
</html>

response.php:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;

require 'Exception.php';
require 'PHPMailer.php';
require 'SMTP.php';

$mail = new PHPMailer(true);
try {
 
  //$mail->SMTPDebug  = 2;                      //Enable verbose debug output
//$mail->Debugoutput = 'html';
$mail->isSMTP();                                            //Send using SMTP
$mail->Host      = 'smtp.webhosting.dk';                    //Set the SMTP server to send
    $mail->SMTPAuth  = true;                                  //Enable SMTP authentication
    $mail->Username  = 'info@domæne.dk';
    $mail->Password  = "xxxxxxx";    //SMTP username;        //SMTP password
  // $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;  //Enable implicit TLS encryption
    $mail->SMTPSecure =  'SSL';
    $mail->Port      = 25;  //465 TCP port to connect to; use 587 if you have set `
  $subject = ($_POST['subject']?? null);
$navn = ($_POST['navn']?? null);
$adresse = ($_POST['adresse']?? null);
$postnummer = ($_POST['postnummer']?? null);
$by = ($_POST['by']?? null);
$telefon = ($_POST['telefon']?? null);
osv
definitioner af inputfelter og design af  bestillingsmail
//Recipients
  $mail->setFrom('info@domæne.dk', 'Bestilling');
    $mail->addAddress('info@domæne.dk', 'Bibliodan');    //Add a recipient
    $mail -> addBCC($_POST['email']?? null);
    $mail->addReplyTo('info@domæne.dk', 'Information');
     
$mail->isHTML(true)
$mail->SMTPAuth  = true; // enable SMTP authentication

$mail->send();{
    echo "<H3>Tilmeldingen er blevet sendt af: ".$navn." <br/>
    Om lidt modtager du en email med alle oplysninger</h3>" ;}

Mit spørgsmål er: hvordan implementerer man koderne fra form.php og submit.php
i min formmodel og i response.php? fx include eller andet?
Avatar billede erikjacobsen Ekspert
21. januar 2024 - 20:15 #16
Så før "de tre virker fint sammen" så virker det. Du kan taste en forkert captcha-værdi og du kan taste en rigtig, og det virker efter hensigten? Det lyder rigtigt.

I dit rigtige eksempel skal du så sørge for:

1) På din indtastningsside skal nedenstående være mellem <form...> og </form>
    Enter Code <img src="captcha.php"><input type="text" name="vercode" />
     
2) Allerførste linjer i din response.php skal være
    <?php
    session_start();
    if ($_POST["vercode"] != $_SESSION["vercode"] OR $_SESSION["vercode"]=='')  {
        echo  '<strong>Incorrect verification code.</strong>';
        // et eller andet med die eller lignende.
    } else {
        // add form data processing code here
        echo  '<strong>Verification successful.</strong>';
    };

  3) Og så lige:  både onsubmit-validate og onclick-validate ...? Det er alt rigeligt med onsubmit.
Avatar billede Asky Forsker
22. januar 2024 - 10:24 #17
Tak for løsningen. Efter jeg fjernede "else" -delen, som min kodetjekker ikke kunne lide, fungerer det perfekt:

  session_start();
if ($_POST["vercode"] != $_SESSION["vercode"] OR $_SESSION["vercode"]=='') die("CAPTCHA koden er forkert!");{
Tak til Erik Jacobsen for ihærdig hjælp :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester