Avatar billede webstuff Nybegynder
04. oktober 2006 - 22:25 Der er 27 kommentarer og
1 løsning

headers problem gdlib

Hejsa alle sammen

Jeg er ved at lave en såkaldt captcha funktion, hvor brugeren skal indtaste nogle tal som står på et billede for at submitte en form.
Anyways, dette billede skal laves midt inde i noget HTML, og der må man jo ikke sende headers.

Jeg bruger koden fra tutorialen på phpwizard.dk med lidt tilrettelser.

----------------------------
$txt = rand(1000, 9999);
$im = ImageCreateFromPng("gfx/captcha.png");
$sort = ImageColorAllocate($im,255,255,255);
ImageTTFText ($im,15,0,23,23,$sort,"gfx/verdana.ttf",$txt);
header("Content-type: image/png");
ImagePNG($im);
ImageDestroy($im);
----------------------------

Jeg har bl.a. prøvet at skrive ob_start(); i toppen af mit dokument.
Prøvet at lave en funktion til at udskrive billedet osv osv osv..
Jeg kan ikke få det til at virke..

Derfor spørger jeg jer herinde... Kan i hjælpe mig ?;o)
Avatar billede iss Novice
04. oktober 2006 - 22:28 #1
Prøv at remarke din header og se om der skulle være en fejl eller to... f.eks font eller billed ikke fundet...
Avatar billede webstuff Nybegynder
04. oktober 2006 - 22:31 #2
Forstod ikke betegnelsen "remarke".. Men jeg har testet scriptet i en "tom" fil kun med det script.. Der virker det...
Avatar billede iss Novice
04. oktober 2006 - 22:37 #3
lav // foran: header("Content-type: image/png");
Og hvis du bruger B-gone, så log lige ind og slå fejl visning til.
Avatar billede webstuff Nybegynder
04. oktober 2006 - 22:42 #4
Jeg har engang læst en artikel fra en russisk ugeblad, det forstod jeg betydeligt mere af end alle de mærkelige tegn der kommer ud af det hvis jeg kommenterer headeren.
Det minder mest af alt om de tegn man får hvis man prøver at åbne et billede i notesblok...
Avatar billede webstuff Nybegynder
04. oktober 2006 - 22:45 #5
Tænkte at du måske ville have et link ;o)
http://www.akmedia.dk/captcha.php

Kig i kildekoden, der har jeg smidt scriptet ind i en <pre> nedenunder hvis det kan hjælpe :-)
Avatar billede webstuff Nybegynder
04. oktober 2006 - 23:00 #6
Jeg bruger ikke b-gone så har desværre ikke mulighed for at slå noget til eller fra.
Bruger needhost.dk hvis det kan hjælpe dig? :-)
Avatar billede iss Novice
04. oktober 2006 - 23:03 #7
Hvad er det der ikke virker?
Avatar billede webstuff Nybegynder
04. oktober 2006 - 23:11 #8
Hvis jeg udkommenterer headeren.. Så virker scriptet ikke, så får jeg bare en masse utydelige tegn..

Hvis jeg bruger scriptet midt i min kode efter noget output får jeg problemer med headeren, det er det jeg gerne vil undgå :-)
Avatar billede iss Novice
04. oktober 2006 - 23:15 #9
Smide lige HELE dit script her...
Avatar billede webstuff Nybegynder
04. oktober 2006 - 23:19 #10
Hmm.. Okay.. Så får du hele den pågældende side.. Det skal lige siges at den bliver inkludered i index.php via en switch.. Derfor du ikke ser noget <html><head> osv i dette script:

Laver lige en hel kommentar med det, for der er ret meget kode :)
Avatar billede webstuff Nybegynder
04. oktober 2006 - 23:20 #11
<?
    if(isset($blog_id) && !empty($blog_id) && is_numeric($blog_id))
    {
        $query = mysql_query("SELECT blog_id, header, content, DATE_FORMAT(date, '%d %M %Y %H:%i') AS dato FROM blog_blogs WHERE blog_id = '".$blog_id."' LIMIT 1") or die("Blog med id".mysql_error());
            $row = mysql_fetch_assoc($query);
                echo "<div class=\"content_top\">\n";
                echo "<h2>&raquo; ".$row["header"]."</h2>\n";
                echo "<div class=\"date\">".$row["dato"]."</div>\n";
                echo afterDB($row["content"]);
                echo "</div>\n";
                echo "<div class=\"content_bot\" style=\"text-align:left;\">\n";
                echo "<h2>Kommentarer</h2>\n";
                    $get_comments = mysql_query("SELECT comment_id, name, email, website, comment, DATE_FORMAT(date, '%d %M %Y %H:%i') AS comment_date FROM blog_comments WHERE blog_id = '".$row["blog_id"]."'") or die("Kommentar med id".mysql_error());

                        if(mysql_num_rows($get_comments) < 1)
                        {
                            echo "Der er ingen kommentarer endnu!";
                        }
                        else
                        {
                            while($row_comments = mysql_fetch_assoc($get_comments))
                            {
                                echo "<div class=\"content_comments\">\n";
                                echo "<b>".$row_comments["name"]."</b> <div class=\"date\">".$row_comments["comment_date"]."</div>\n";
                                echo afterDB($row_comments["comment"]);
                                echo "</div>\n";
                            }
                        }
                echo "<h2>Kommenter</h2><a name=\"comment\"></a>\n";
                echo "<form action=\"".$config["root"]."handle.php?handle_type=comment&blog_id=".$row["blog_id"]."\" method=\"post\">\n";
                echo "<table cellpadding=\"1\" cellspacing=\"0\" style=\"width:90%;z-index:0;\">\n";
                    echo "<tr>\n";
                        echo "<td>\n";
                            echo "<div class=\"comment_txt\">Navn: *</div>\n";
                        echo "</td>\n";
                        echo "<td>\n";
                            echo "<input type=\"text\" name=\"name\" size=\"25\"/><br />\n";
                        echo "</td>\n";
                    echo "</tr>\n";
                    echo "<tr>\n";
                        echo "<td>\n";
                            echo "<div class=\"comment_txt\">Email: * (Bliver ikke vist) </div>\n";
                        echo "</td>\n";
                        echo "<td>\n";
                            echo "<input type=\"text\" name=\"email\" size=\"25\"/><br />\n";
                        echo "</td>\n";
                    echo "</tr>\n";
                    echo "<tr>\n";
                        echo "<td>\n";
                            echo "<div class=\"comment_txt\">Website:</div>\n";
                        echo "</td>\n";
                        echo "<td>\n";
                            echo "<input type=\"text\" name=\"website\" size=\"25\" /><br />\n";
                        echo "</td>\n";
                    echo "</tr>\n";                   
                    echo "<tr>\n";
                        echo "<td>\n";
                            echo "<div class=\"comment_txt\">Sikkerhedskode:<br />";
                            echo "</div>\n";
                        echo "</td>\n";
                        echo "<td>\n";
                            echo "<input type=\"text\" name=\"website\" size=\"25\" /><br />\n";
                        echo "</td>\n";
                    echo "</tr>\n";
                    echo "<tr>\n";
                        echo "<td>\n";
                            echo "<div class=\"comment_txt\">Besked *</div>\n";
                        echo "</td>\n";
                        echo "<td>\n";
                            echo "<textarea name=\"comment\" style=\"width:100%;height:150px;\"></textarea><br />\n";
                        echo "</td>\n";
                    echo "</tr>\n";
                    echo "<tr>\n";
                        echo "<td>\n";
                            echo "<div class=\"comment_txt\">* Skal udfyldes korrekt</div>\n";
                        echo "</td>\n";
                        echo "<td style=\"text-align:right;\">\n";
                            echo "<input type=\"submit\" value=\"Kommenter\">\n";
                        echo "</td>\n";
                    echo "</tr>\n";
                echo "</table>\n";
                echo "</form>\n";               
                echo "</div>\n";
    }
    else
    {
        $query = mysql_query("SELECT blog_id, header, content, DATE_FORMAT(date, '%d %M %Y %H:%i') AS dato FROM blog_blogs ORDER BY blog_id DESC LIMIT 5") or die("Forside".mysql_error());
            while($row = mysql_fetch_assoc($query))
            {
                $get_comments = mysql_query("SELECT COUNT(comment_id) FROM blog_comments WHERE blog_id = '".$row["blog_id"]."'") or die(mysql_error());
                $count_comments = mysql_result($get_comments, 0);
                echo "<div class=\"content_top\">\n";
                echo "<h2>&raquo; ".$row["header"]."</h2>\n";
                echo "<div class=\"date\">".$row["dato"]."</div>\n";

                if(strlen($row["content"]) > 300)
                {
                    echo substr(afterDB($row["content"]), 0, 300)." [...]";
                }
                else
                {
                    echo afterDB($row["content"]);
                }
                echo "</div>\n";
                echo "<div class=\"content_bot\">\n";
                echo "<img src=\"gfx/comment.gif\" alt=\"Kommenter\" title=\"Kommenter\" /> <a href=\"".$config["root"]."index.php?page_type=blog&blog_id=".$row["blog_id"]."&page_id=#comment\">Kommentér (".$count_comments.")</a>\n";
                echo "&nbsp;&nbsp;&nbsp;";
                echo "<img src=\"gfx/read_more.gif\" alt=\"Læs mere\" title=\"Læs mere\" /> <a href=\"".$config["root"]."index.php?page_type=blog&blog_id=".$row["blog_id"]."&page_id=\">Læs mere</a>\n";
                echo "</div>\n";
            }
    }
?>
Avatar billede webstuff Nybegynder
04. oktober 2006 - 23:20 #12
Det er ved "Sikkerhedskode" ca. midt i scriptet jeg gerne vil have det ind..
Avatar billede iss Novice
04. oktober 2006 - 23:22 #13
Hvad er det lige at det billed har med din kode at gøre?
Avatar billede webstuff Nybegynder
04. oktober 2006 - 23:23 #14
Jeg vil gerne denne kode:
----------------------------
$txt = rand(1000, 9999);
$im = ImageCreateFromPng("gfx/captcha.png");
$sort = ImageColorAllocate($im,255,255,255);
ImageTTFText ($im,15,0,23,23,$sort,"gfx/verdana.ttf",$txt);
header("Content-type: image/png");
ImagePNG($im);
ImageDestroy($im);
----------------------------

Ind i det store script jeg postede ovenover..
Men det kan ikke lade sig gøre pga. headeren der er i scriptet der generer billedet.
Så er det jeg vil høre om der er nogen der kan hjælpe mig med, evt. finde en anden udvej.
Avatar billede iss Novice
04. oktober 2006 - 23:24 #15
Ahhh, nu forstår jeg dit problem... så er det lige jeg sprøger dig, hvordan sætter du normalt billeder i HTML? Lægge du dem i HTML filer eller i noget andet?
Avatar billede webstuff Nybegynder
04. oktober 2006 - 23:26 #16
Ved ikke om det var et ironisk spørgsmål.. Men anyways så forstod jeg det ikke ;o)

PS: Det er første gang jeg arbejder med GDLib - så der er højst sandsynligt noget jeg har misforstået.
Avatar billede iss Novice
04. oktober 2006 - 23:29 #17
Den kode skal ligge i sin egen fil, og kaldes som du ville kalde et hvilket som helst andet billed.
Avatar billede webstuff Nybegynder
04. oktober 2006 - 23:33 #18
Nå ja da... Der kan man bare se hvor du man fremstår når man ikke tænker sig om..
hehe..

Tak for hjælpen :-)

Lægger du et svar?
Avatar billede iss Novice
04. oktober 2006 - 23:34 #19
Nope... samler ikke...
Avatar billede webstuff Nybegynder
04. oktober 2006 - 23:43 #20
Okay.. Men kan du svarer mig på hvordan jeg lettest får de tal der står på billedet.. Ind i en variabel, session eller lignende, så jeg senere kan sammenligne det med det brugeren indtastede`?
Avatar billede mclemens Nybegynder
04. oktober 2006 - 23:58 #21
Inde i det php script der
leverer billedet kan du måske sige:

$txt = rand(1000, 9999);
$_SESSION['gdkontrol']=$txt;
... resten af koderne ...

- Og så måle på gdkontrol vs. din sikkerhedskode ...

... hvis $_SESSION['gdkontrol'] så ikke er sat måske en
besked om at cookies er krævet ... og hvis den er sat men
forkerte dataer så en besked om fejlen ...

(evt. en header relocation til submit siden hvor fejlen defineres
og dataerne indskrives automatisk igen (forudsætter dog at de gemmes
midlertidig i f.eks. sessions så de kan indskrives automatisk ved fejl
- dog skal de session variabler nok tømmes ved succesfuldt postning så
dataerne ikke står på kommentar siden næste gang man reloader - og m.h.t.
reloads så måske no-cache på billedet ... og siden også så man altid får
en frisk udgave så man kan se om andre har postet :) )
Avatar billede mclemens Nybegynder
05. oktober 2006 - 00:04 #22
hmm, der skal nok en session_start(); ind i
starten af koden der leverer billedet samtidig.
Avatar billede webstuff Nybegynder
05. oktober 2006 - 00:04 #23
hej clemens :-)

Kan det ikke også ordnes mht. billedet hvis man skriver:

<img src="captcha.php?time()">
Avatar billede webstuff Nybegynder
05. oktober 2006 - 00:05 #24
Btw.. Havde luret den med sessionen, så det virker nu :-)
Avatar billede mclemens Nybegynder
05. oktober 2006 - 00:08 #25
Webstuff, joh den vil være skudsikker :)
Avatar billede webstuff Nybegynder
05. oktober 2006 - 00:15 #26
Super... nu virker altid som det skal..
Vil du have pointene clemens nu når iss ikke samler?

:-)
Avatar billede mclemens Nybegynder
05. oktober 2006 - 00:26 #27
Tak for tilbuddet, men da det var iss der fangede den
med at du satte det billedet ind direkte i dokumentet ...
- Og han ikke ønsker pointene så snup pointene selv ;)
( det jeg kom med var kun en lille kommentar )
Avatar billede webstuff Nybegynder
05. oktober 2006 - 00:47 #28
Okay..

Men i skal i hvertfald have mange tak for hjælpen begge to :-)
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