Capcha problemer I lang tid har jeg haft en Capcha til at virke upåklageligt, men nu får jeg hele tiden fejl selvom captha-tallene er korrekte. I starten at min response -fil står der: session_start(); if ($_POST["vercode"] != $_SESSION["vercode"] OR $_SESSION["vercode"]=='') die("Koden er forkert! Tryk tilbage!");{ } ; Men selvom tallene er rigtige får jeg alligevel fejlkoden Capchaen stammer fra denne hjemmeside: https://www.phpjabbers.com/captcha-image-verification-php19.html
Der skal jo også stå session_start() på den side hvor du laver tallene.
Ellers så bruger du bare den fantastiske debug-teknik der hedder print (eller print_r når det nu er PHP). Skriv værdierne ud, så mange steder du kan komme af sted med det.
På den side, der laver tallene står session start () n i den lille php-del i toppen af filen sammen med datokoden. <?php session_start(); $fmt = new IntlDateFormatter("dan_DNK", IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Europe/Copenhagen', IntlDateFormatter::GREGORIAN, 'EEEE, d. MMMM yyyy'); $t = time(); $idag = $fmt->format($t); ?> <!DOCTYPE HTML> <html> <head>
men jeg får stadigvæk fejl selvom tallene er rigtige. Skal jeg prøve at sætte det ind lige før kodelinjen, der kalder captchaen? <label>Skriv koden</label> <img src="captcha.php"><br/><input type="text" name="vercode" />
Det gør den også, her er koden til captcha.php ,som den hele tiden har været:
<?php session_start(); $text = rand(10000,99999); $_SESSION["vercode"] = $text; $height = 25; $width = 65; $image_p = imagecreate($width, $height); $black = imagecolorallocate($image_p, 0, 0, 0); $white = imagecolorallocate($image_p, 255, 255, 255); $font_size = 14; imagestring($image_p, $font_size, 5, 5, $text, $white); imagejpeg($image_p, null, 80); ?> Det er altså ikke her fejlen ligger. En teori er, at når tallene er skrevet, bliver captchaen opdateret i det øjeblik man trykker på send. Dermed vil tallene altid være forkerte, selvom man har skrevet de rigtige ind. Når man trykker tilbage efter fejlmeddelesen er tallene i hvert fald altid ændret.
Det er denne kode, der opdaterer tallene på captchaen: <script type="text/javascript"> //Refresh Captcha function refreshCaptcha(){ var refreshButton = document.querySelector(".refresh-captcha"); refreshButton.onclick = function() { document.querySelector(".captcha-image").src = 'captcha.php?' + Date.now(); } </script>
session_start(); print_r($_POST); print_r($_SESSION); if ($_POST["vercode"] != $_SESSION["vercode"] OR $_SESSION["vercode"]=='') die("Koden er forkert! Tryk tilbage!");
Det var jo interessant! for nu virker det. Og jeg kan se at tallene er dem, jeg tastede ind fra captchaen. men en forklaring på på hvorfor jeg ellers får fejl, har jeg ikke fundet, men jeg kan selvfølgelig lade kommandoerne stå til undren for brugerne, ;-)
Nu har jeg så prøvet en anden bestillingsside, og der får jeg så "koden er forkert osv". og der står tilsyneladende det samme i begge opgaver. her er det heller ikke nye tal, men de tal, jeg skrev fra captchaen. hvorfor jeg alligevel får forkert forvirrer mig på et højere plan.
Det virker besynderligt. Du får de rigtige værdier? - men den siger fejl.
Nu er PHP en gammel og underlig tingest. Der er f.eks. både OR og || med forskellig precedence. Man bør ikke bruge OR, det forvirrer læseren. Brug || i stedet.
Men det skulle ikke have noget betydning i sammenhæng med == og !=.
Alligevel: sæt parenteser:
if ( ($_POST["vercode"] != $_SESSION["vercode"]) OR ($_SESSION["vercode"]==''))
eller
if ( ($_POST["vercode"] != $_SESSION["vercode"]) || ($_SESSION["vercode"]==''))
Det er ikke muligt at vi kan prøve det direkte ved dig?
Det er heller ikke funktionen refresh captcha, For hver gang er tallene fra captchaen de rigtige også i printet. Denne programlinje: if ($_POST["vercode"] != $_SESSION["vercode"] OR $_SESSION["vercode"]=='') die("Koden er forkert! Tryk tilbage!"); hvis feltet er forkert eller tomt, får man fejl ja men hvis feltet er rigtigt kan man alligevel godt få fejl. Det er ikke logisk. Kan linjen formuleres anderledes ?
Den er fin som den står. Gerne med de ekstra parenteser, som jeg skrev - det burde ikke betyde noget, men nemmere at læse for andre.
Det skyldes noget, som ikke er beskrevet her. Har du f.eks. samme side åben i flere faneblade i samme browser, så den - måske - blander sessioner sammen?
Har faktisk aldrig den samme side åben i flere eksemplarer, men tit koden lagt ned i bundlinjen, så der nemt kan rettes. Nu lavede jeg så en rettelse af kodelinjen med || i stedet for OR . Og nu virker det minsandten. Desværre brugte jeg ikke printkommandoen, men i stedet debug.. Med det gode resultat, vil jeg lukke for i aften, men laver flere eksperimenter i morgen. Kan det være noget med versionen af PHP at gøre? Efterhånden bliver nogle udtryk jo "debrecated" jeg bruger PHP 8,2.
Grunden til at have et Captcha felt, er at personen verificerer sig som menneske. Egentligt har vi vel alle vendet os til at de er der, mere eller mindre besværlige.
Her er en alternativ løsning, der gør det lettere for brugeren og besværligt for "Botter":
Honeypot Captcha tilføjer et brugerdefineret inputfelt til My Account Register-formularen med en tom værdi. Dette er ikke synligt for brugeren – men det er synligt for spambots, som vil forsøge at poste en værdi.
Tricket her er valideringstjekket; en fejl vil blive genereret, hvis inputtet har en værdi, og derfor forhindres de fleste falske registreringer i at gå igennem. https://a3-seo.dk/vare/honeypot-captcha/
Grunden til at systemet virkede i går var, at jeg havde glemt die-delen i koden. Nu er den del tilføjet og jeg får fejl selvom tallene er rigtige. jeg må altså finde en anden måde i stedet for die-delen fx session_destroy(); med fare for, at det giver samme resultat. Overvejer også at finde en anden captcha.
har faktisk prøvet med noget, der ligner Honeypot: Lige før submit står der: <div style="visibility: hidden"> <input type="text" id="moretraps" name="writehere" />
<label>Undlad at skrive i dette felt</label> <input name="author" value="" size="40" /> <label>Undlad også at skrive i dette felt</label> <textarea name="message" value="" cols="40" rows="4"></textarea> </div>
og i script-delen <noscript> <label for="moretraps">Skriv venligst flum i dette felt:</label> </noscript> Hvis en robot skriver i feltet, ledes den til en tom side.
Har opgivet at finde fejlen i kontrolkoden ti captchaen, der gør, at jeg hele tiden får fejl, selvom tallene er rigtige. Jeg har prøvet at skrive number i stedet for text i løsningsfeltet, men det er heller ikke her fejlen ligger. jeg må derfor udelade denne kontrol og fjerne Captchaen, men sætte min lid til "moretraps" til at holde botterne væk.
session_start(); if ($_POST["vercode"] != $_SESSION["vercode"] OR $_SESSION["vercode"]=='') die("Koden er forkert! Tryk tilbage!");{
} use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; use PHPMailer\PHPMailer\SMTP; OSV
Hvis jeg ikke slutter med ; (semicolon) efter den sidste krøllede parentes før USE, så virker koden efter hensigten - rigtige tal går videre og forkerte tal får fejl. DVS den virker i de fleste eksempler, nogen gange får jeg stadig hele tiden fejl.
Synes godt om
Ny brugerNybegynder
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.