Avatar billede foxladi Nybegynder
27. februar 2006 - 15:20 Der er 18 kommentarer og
1 løsning

Variabler forsvinder

Jeg er i gang med at forsøge at indsætte et Captcha billede på en formular for at undgå spamudsendelse via formularen.

Desværre virker det lidt for effektivt -- ingenting sendes.

Tilsyneladende "forsvinder" de variable undervejs til trods for alle de ting, jeg har forsøgt for at bevare dem.

Uddrag af koden herunder:

(Fra starten):

session_start();
$_SESSION['to'] = $_REQUEST['to'];
$_SESSION['subject'] = $_REQUEST['subject'];
$_SESSION['bodytext'] = $_REQUEST['bodytext'];
$_SESSION['from'] = $_REQUEST['from'];

print "$to $subject $bodytext $from";

function sendsite(){
    $siteOwner = "britt@tips-og-tricks.com";
    mail("$to","$subject","$bodytext\n\n-$from","From: \"$name\"<$from>");
    mail("$siteOwner","Side sendt til ven","
    From: $from $name
    To  : $to
    Body:  $bodytext");
    }

...

Oprindeligt havde jeg kun $to osv. foroven og ingen start session.

I begge tilfælde udskrives indholdet korrekt. Det er først senere, at variablerne forsvinder.

...

    $captcha =& new hn_captcha($CAPTCHA_INIT);

    switch($captcha->validate_submit())
    {
   
        // was submitted and has valid keys
        case 1:
            // PUT IN ALL YOUR STUFF HERE //
// PHP Script starts here. Customize email address below. -->

session_start();
sendsite(); // virker ikke

print "bla bla bla"; // virker
print "$to osv."; // virker ikke
print "bla bla ".$_SESSION['to']." osv."; // virker ikke "to" udskrives ikke.

Hvordan skal jeg løse problemet og få de variable med ned? Jeg har også forsøgt med "global", men måske har jeg skrevet det forkert.
Avatar billede coderdk Praktikant
27. februar 2006 - 20:01 #1
Er det flere filer?
Du skal kun have én session_start()
Funktionen sendsite kan ikke se dine $to osv variable, du skal enten bruge global $to osv i funktionen, eller bruge $_SESSION i den.
Avatar billede foxladi Nybegynder
27. februar 2006 - 21:52 #2
Der er en formular i en html-fil. Og så én php fil med de koder i, som jeg har nævnt.

Nu har jeg ændret den øverste kode til:

function sendsite(){
    global $to, $subject, $bodytext, $from, $name;
    $siteOwner = "britt@tips-og-tricks.com";
    mail("$to","$subject","$bodytext\n\n-$from","From: \"$name\"<$from>");
    mail("$siteOwner","Side sendt til ven","
    From: $from $name
    To  : $to
    Body:  $bodytext");
    }

og længere nede (samme fil) under Captcha-koden:

        case 1:
            // PUT IN ALL YOUR STUFF HERE //


sendsite();

Men ak ... Det virker ikke.

Skal global skrives på en anden måde? Det er faktisk en kode, jeg aldrig har brugt.
Avatar billede coderdk Praktikant
27. februar 2006 - 22:04 #3
session_start() *SKAL* være det *ALLER* første på siden, der må end ikke blive skrevet et enkelt lille mellemrum ud, før den kommer... Der skal også kun være én af dem.

Prøv at lave:

$_SESSION['to'] = $_REQUEST['to'];
$_SESSION['subject'] = $_REQUEST['subject'];
$_SESSION['bodytext'] = $_REQUEST['bodytext'];
$_SESSION['from'] = $_REQUEST['from'];

om til:

$to = $_SESSION['to'] = $_REQUEST['to'];
$subject = $_SESSION['subject'] = $_REQUEST['subject'];
$bodytext = $_SESSION['bodytext'] = $_REQUEST['bodytext'];
$from = $_SESSION['from'] = $_REQUEST['from'];
Avatar billede foxladi Nybegynder
27. februar 2006 - 22:13 #4
Tak for din hjælp :-)

Nu har jeg øverst:

<?php
session_start();

og så de koder, du foreslog.

Jeg har stadig funktionen, men har prøvet både med og uden global.

Stadig er der intet, der sendes ...
Avatar billede coderdk Praktikant
27. februar 2006 - 22:15 #5
Så kan jeg ikke gennemskue det - Kan du ikke paste din kode et sted? Evt. fjerne evt. følsomme oplysninger derfra. Jeg tror man skal se på hele scriptet for at se hvad der kan være galt...
Avatar billede foxladi Nybegynder
27. februar 2006 - 22:22 #6
Jo, gerne, den er bare smadderlang :-)

Skal du bruge html-filen med formularen også?

Sender i hvert fald php-filen i en kommentar for sig.
Avatar billede foxladi Nybegynder
27. februar 2006 - 22:23 #7
<?PHP
session_start();
$to = $_SESSION['to'] = $_REQUEST['to'];
$subject = $_SESSION['subject'] = $_REQUEST['subject'];
$bodytext = $_SESSION['bodytext'] = $_REQUEST['bodytext'];
$from = $_SESSION['from'] = $_REQUEST['from'];
$name = $_SESSION['name'] = $_REQUEST['name'];

print "$to $subject $bodytext $from";

function sendsite(){
    // global $to, $subject, $bodytext, $from, $name;
    $siteOwner = "britt@tips-og-tricks.com";
    mail("$to","$subject","$bodytext\n\n-$from","From: \"$name\"<$from>");
    mail("$siteOwner","Side sendt til ven","
    From: $from $name
    To  : $to
    Body:  $bodytext");
    }
   

// Please type in all needed values before run the script!

    require_once("hn_captcha.class.php");

    // ConfigArray
    $CAPTCHA_INIT = array(
            'tempfolder'    => $_SERVER['DOCUMENT_ROOT'].'/tmp/',      // string: absolute path (with trailing slash!) to a writeable tempfolder which is also accessible via HTTP!
            'TTF_folder'    => $_SERVER['DOCUMENT_ROOT'].'/blog/wp-content/plugins/captcha/fonts/', // string: absolute path (with trailing slash!) to folder which contains your TrueType-Fontfiles.
                                // mixed (array or string): basename(s) of TrueType-Fontfiles
            'TTF_RANGE'      => array('waltograph42.otf','.jb_hell.ttf','waltographUI.ttf', '28 Days Later.ttf'),
        //    'TTF_RANGE'      => 'COMIC.TTF',

            'chars'          => 5,      // integer: number of chars to use for ID
            'minsize'        => 20,      // integer: minimal size of chars
            'maxsize'        => 30,      // integer: maximal size of chars
            'maxrotation'    => 25,      // integer: define the maximal angle for char-rotation, good results are between 0 and 30

            'noise'          => FALSE,    // boolean: TRUE = noisy chars | FALSE = grid
            'websafecolors'  => FALSE,  // boolean
            'refreshlink'    => TRUE,    // boolean
            'lang'          => 'en',    // string:  ['en'|'de']
            'maxtry'        => 3,      // integer: [1-9]

            'badguys_url'    => '/',    // string: URL
            'secretstring'  => 'A very, very secret string which is used to generate a md5-key!',
            'secretposition' => 15,      // integer: [1-32]

            'debug'          => FALSE
    );

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Tak, fordi du har sendt dette tip til en ven</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
/*********************************
*
*    CAPTCHA-Styles
*
*/
    p.captcha_1,
    p.captcha_2,
    p.captcha_notvalid
    {
        margin-left: 30px;
        margin-right: 20px;
        font-size: 12px;
        font-style: normal;
        font-weight: normal;
        font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
        background: transparent;
        color: #000000;
    }
    p.captcha_2
    {
        font-size: 10px%;
        font-style: italic;
        font-weight: normal;
    }
    p.captcha_notvalid
    {
        font-weight: bold;
        color: #FFAAAA;
    }
   
    .captchapict
    {
        margin: 0px 0px 0px 0px;
        padding: 0px 0px 0px 0px;
        border-style: inset;
        border-width: 4px;
        border-color: #C0C0C0;
    }
   
    #captcha
    {
        margin-left: 30px;
        margin-right: 30px;
        border-style: dashed;
        border-width: 2px;
        border-color: #FFD940;
    }
-->
</style>

</head>
<body bgcolor="#FFFFFF" text="#000000" link="#0066CC" vlink="#6C4884">


<?PHP

    $captcha =& new hn_captcha($CAPTCHA_INIT);

    switch($captcha->validate_submit())
    {
   
        // was submitted and has valid keys
        case 1:
            // PUT IN ALL YOUR STUFF HERE //
// PHP Script starts here. Customize email address below. -->


sendsite();
       
// PHP Script ends here. -->            
           
           
           
           
                    print "   
<table width=\"100%\" border=\"0\" cellspacing=\"5\" cellpadding=\"5\">
  <tr>
    <td bgcolor=\"#FFFFFF\">
      <div align=\"center\">
        <p align=\"center\">&nbsp;</p>
        <p align=\"center\"><b><font face=\"Arial, Helvetica, sans-serif\" size=\"2\"><u><font color=\"#CC0000\" size=\"3\">Tak</font></u></font></b></p>
        <p><font face=\"Arial, Helvetica, sans-serif\" size=\"2\">Tak, fordi du har sendt
          dette tip til en ven.</font></p>
        <p><font face=\"Arial, Helvetica, sans-serif\" size=\"2\">Vi vil se frem til
          din vens bes&oslash;g.</font></p>
          <p>$to $subject $bodytext $from</p>
        <p><font face=\"Arial, Helvetica, sans-serif\" size=\"2\"><a href=\"http://www.tips-og-tricks.com/\">Tilbage til
          forsiden</a></font></p>
        </div>
    </td>
  </tr>
</table>";

            break;
   
   
        // was submitted with no matching keys, but has not reached the maximum try's
        case 2:
            echo $captcha->display_form();
            break;
   
   
        // was submitted, has bad keys and also reached the maximum try's
        case 3:
            //if(!headers_sent() && isset($captcha->badguys_url)) header('location: '.$captcha->badguys_url);
                    echo "<p><br>Reached the maximum try's of ".$captcha->maxtry." without success!";
                    echo "<br><br><a href=\"".$_SERVER['PHP_SELF']."?download=yes&id=1234\">New DEMO</a></p>";
            break;
   
   
        // was not submitted, first entry
        default:
            echo $captcha->display_form();
            break;
   
    }

?>



</body>
</html>
Avatar billede coderdk Praktikant
27. februar 2006 - 22:25 #8
Du kunne evt. paste det her: http://www.rafb.net/paste/
Eller et andet site, kan sq ikke lige huske URL'er (fandt den der på google).
Avatar billede coderdk Praktikant
27. februar 2006 - 22:49 #9
Jeg kan ikke lige gennemskue det. Du har kommenteret global ud:

    // global $to, $subject, $bodytext, $from, $name;

Har du prøvet at have den der, efter vi rettede de øverste linjer? Skriver den øverste print noget ud?
Avatar billede coderdk Praktikant
27. februar 2006 - 22:50 #10
Er det til at smide CAPTCHA på WordPress? For hvorfor så ikke bare bruge SpamKarma? :)
Avatar billede foxladi Nybegynder
27. februar 2006 - 22:55 #11
Jeg prøvede med og uden globals, altså både med og uden udkommentering.

Nej, det er ikke til WordPress. Der bruger jeg en plugin :-) Det virker (undtagen på www.frankrig.biz af en eller anden grund). Det er til alle mine andre formularer, i første omgang Tip en ven i bunden her: http://www.tips-og-tricks.com/
Avatar billede coderdk Praktikant
27. februar 2006 - 23:05 #12
Ja, det er ikke godt at vide - Du svarede aldrig på om den skrev noget ud med global efter vi rettede linjerne over?
Hvilke versioner af PHP køres der? Du skriver det virker - Hvad virker? :) Har du prøvet det på flere servere? Du har ikke en formular på siden, er det med vilje? Er det CAPTCHA-modulet der laver den?
Avatar billede foxladi Nybegynder
27. februar 2006 - 23:11 #13
Jeg prøvede -- uden held -- både med og uden global. Nej, den sendte intet med global, heller ikke efter, at jeg havde rettet de linjer, du foreslog.

PHP-versionen er: 4.4.1.

Plug-in versionen af Captcha virker i WordPress, fx http://www.tips-og-tricks.com/blog, men ikke i WordPress på http://www.frankrig.biz -- nok min fejl. Jeg må have glemt et eller andet.

Jo, jeg har da en formular ... eh, det vil sige, linket nederst henviser til en formular. Øjeblik ... http://www.tips-og-tricks.com/sendthispage.html -- Det er et færdigt script (dovenskab), som jeg har brugt, og der er javascript i formularen.

Jeg ville nok helst have selve captcha billedet i formularen, men jeg KAN altså ikke finde ud af at kode de to ting sammen (grrr ...), så derfor ville jeg forsøge mig med en nemmere løsning, som altså heller ikke var så nem.

Nej, jeg har endnu ikke prøvet det på andre servere.

Håber, at det var svar på alt :-)
Avatar billede coderdk Praktikant
27. februar 2006 - 23:22 #14
Hvis den øverste

print "$to $subject $bodytext $from";

ikke skriver noget ud, så bliver der vel ikke sendt noget? Eller også er $_REQUEST underlig på din server ;) Prøvet med $_POST?

Det ser næsten for besværligt ud, og jeg kan ikke gennemskue hvordan de to scripts hænger sammen, altså det du har pastet, og sendthispage.html - Du POST'er til det du har pastet? Hvornår bliver CAPTCHA'en så vist? Efter? Er det en "traditionel" billed-CAPTCHA? Mit bud er at finde et bedre CAPTCHA-modul og lave send-siden fra bunden med moduldokumenationen i hånden :) Der er links til et par stykker her:http://en.wikipedia.org/wiki/Captcha
Avatar billede foxladi Nybegynder
27. februar 2006 - 23:25 #15
Tak for linkene. Jeg vil kigge på dem eller prøve at sætte captcha'en på formularen i stedet, sådan som du faktisk inspirerede mig til.

Den øverste skriver det ud. Det er først længere nede i scriptet, at variablen bliver væk.

Kan du ikke sende et svar, så jeg kan give dig point for alt dit besvær? og du har jo hjulpet mig på rette vej.
Avatar billede coderdk Praktikant
27. februar 2006 - 23:29 #16
Ok, men så må du tage de fleste af pointene selv :) Held og lykke :)
Avatar billede coderdk Praktikant
27. februar 2006 - 23:34 #17
Så glemte jeg jo at svare ;P
Avatar billede foxladi Nybegynder
27. februar 2006 - 23:37 #18
og så er det faktisk ved at lykkes nu, ser det ud til, takket være dig. Se på http://www.tips-og-tricks.com/sendthispage2.html -- nu mangler den bare at have linket med over, og nu ved jeg, hvordan jeg kan bruge Captcha i andre formularer også, tror jeg ;-)

Tusind tak for din store hjælp. Nej,tak, jeg skal ikke have nogen point selv :-)
Avatar billede coderdk Praktikant
27. februar 2006 - 23:38 #19
Kanon :) Nå, men tak for point så! :)
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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