Avatar billede Slettet bruger
05. februar 2007 - 22:13 Der er 8 kommentarer

billede validering i php

Er der nogen her inde som ved hvordan man laver en billede validering i php. hvor der f.eks. i et billede kommer nogen tilfældige tal som man skal skrive i en input box.
Avatar billede simplus Nybegynder
05. februar 2007 - 22:43 #1
Det hedder GDlib og du kan lave det eksempelvis således:

Gem følgene som gateway.php
<?php
session_start();

$number = rand(1,999); //generate a random integer
$_SESSION['number'] = $number; //store in session variable

$img_number = imagecreate(40,25);
$backcolor = imagecolorallocate($img_number,255,255,255);
$textcolor = imagecolorallocate($img_number,128,128,64);

imagefill($img_number,0,0,$backcolor);

imagestring($img_number,10,5,5,$number,$textcolor);

header("Content-type: image/jpeg");
imagejpeg($img_number);
?>

og indsæt denne hvor du har løst:
<img src="gateway.php" alt="" style="border: 1px solid black;">
Avatar billede datasource Nybegynder
05. februar 2007 - 22:50 #2
Ved hjælp af en søgning på google, fandt jeg dette udemærkede script:
http://www.codingforums.com/archive/index.php?t-73869.html

her også et eksempel til en kontaktform:
----------------KODE--------------------
<?php
/*
eksempel på brug:

Din form
<input type="text" name="validator" id="validator" size="4" />
<img src="random.php" alt="CAPTCHA image" width="60" height="20" vspace="1" align="top" />

test feltet sådan:
if (!empty($_POST['validator']) && $_POST['validator'] == $_SESSION['rand_code']) {
    placer din form her
    destroy sessionen
    unset($_SESSION['rand_code']);
*/

// gem denne kode i dit script
session_start();

if (empty($_SESSION['rand_code'])) {
    $str = "";
    $length = 0;
    for ($i = 0; $i < 4; $i++) {
        // disse numre refererer til numrene i ascii tabellen
        $str .= chr(rand(97, 122));
    }
    $_SESSION['rand_code'] = $str;
}

$imgX = 60;
$imgY = 20;
$image = imagecreatetruecolor(60, 20);

$backgr_col = imagecolorallocate($image, 238,239,239);
$border_col = imagecolorallocate($image, 208,208,208);
$text_col = imagecolorallocate($image, 46,60,31);

imagefilledrectangle($image, 0, 0, 60, 20, $backgr_col);
imagerectangle($image, 0, 0, 59, 19, $border_col);

$font = "VeraSe.ttf";
$font_size = 10;
$angle = 0;
$box = imagettfbbox($font_size, $angle, $font, $_SESSION['rand_code']);
$x = (int)($imgX - $box[4]) / 2;
$y = (int)($imgY - $box[5]) / 2;
imagettftext($image, $font_size, $angle, $x, $y, $text_col, $font, $_SESSION['rand_code']);

header("Content-type: image/png");
imagepng($image);
imagedestroy ($image);
?>
----------------KODE--------------------
Avatar billede Slettet bruger
06. februar 2007 - 00:16 #3
hej datasource....

jeg har prøvet med din kode men der kommer bare en firkant med et rødt kryds. har også prøvet med den kode du har linket til og der er også samme problem. der hvor validations billedet skulle værer kommer der et rød kryds
Avatar billede Slettet bruger
06. februar 2007 - 00:33 #4
jeg får den her fejl

Fatal error: Cannot redeclare class gd_verification in /usr/home/sites/rossini.dk/www/gd_image_verify.php on line 5
Avatar billede Slettet bruger
06. februar 2007 - 00:50 #5
fik rettet nået af det... nu har jeg bare den her fejl

Call to a member function on a non-object
Avatar billede Slettet bruger
06. februar 2007 - 02:06 #6
hey datasource....

Jeg har næsten fået det til at du nu med det eksempel du har linket til... dog har jeg et lille problem som jeg ikke kan løse håber du kan kaste lidt lys over det....
har vedlagt de to filer hvor jeg har koden

fil 1 gd_image_verify

<?php
// Velox Letum (2005)
// elementation@gmail.com

class gd_verification {
var $im = NULL;
var $string = NULL;
var $height;
var $width;

function gd_verification ($height = 150, $width = 35, $sid = NULL) {
if ($sid != NULL) {
session_name($sid);
}

// Set image height/width
$this->height = $height;
$this->width = $width;

// Start session
session_start();
}
function generate_string () {
// Create random string
$this->string = substr(sha1(mt_rand()), 17, 6);

// Set session variable
$_SESSION['gd_string'] = $this->string;
}
function verify_string ($gd_string) {
// Check if the original string and the passed string match...
if ($_SESSION['gd_string'] === $gd_string) {
return TRUE;
} else {
return FALSE;
}
}
function output_input_box ($name, $parameters = NULL) {
return '<input type="text" name="' . $name . '" ' . $parameters . ' /> ';
}
function create_image () {
// Seed string
$this->generate_string();

$this->im = imagecreatetruecolor($this->height, $this->width); // Create image

// Get width and height
$img_width = imagesx($this->im);
$img_height = imagesy($this->im);

// Define some common colors
$black = imagecolorallocate($this->im, 0, 0, 0);
$white = imagecolorallocate($this->im, 255, 255, 255);
$red = imagecolorallocatealpha($this->im, 255, 0, 0, 75);
$green = imagecolorallocatealpha($this->im, 0, 255, 0, 75);
$blue = imagecolorallocatealpha($this->im, 0, 0, 255, 75);

// Background
imagefilledrectangle($this->im, 0, 0, $img_width, $img_height, $white);

// Ellipses (helps prevent optical character recognition)
imagefilledellipse($this->im, ceil(rand(5,$img_width - 5)), ceil(rand(0,$img_height)), 30, 30, $red);
imagefilledellipse($this->im, ceil(rand(5,$img_width - 5)), ceil(rand(0,$img_height)), 30, 30, $green);
imagefilledellipse($this->im, ceil(rand(5,$img_width - 5)), ceil(rand(0,$img_height)), 30, 30, $blue);

// Borders
imagefilledrectangle($this->im, 0, 0, $img_width, 0, $black);
imagefilledrectangle($this->im, $img_width - 1, 0, $img_width - 1, $img_height - 1, $black);
imagefilledrectangle($this->im, 0, 0, 0, $img_height - 1, $black);
imagefilledrectangle($this->im, 0, $img_height - 1, $img_width, $img_height - 1, $black);

imagestring ($this->im, 5, intval(($img_width - (strlen($this->string) * 9)) / 2), intval(($img_height - 15) / 2), $this->string, $black); // Write string to photo
}
function output_image() {
$this->create_image(); // Generate image

header("Content-type: image/jpeg"); // Tell the browser the data is a JPEG image

imagejpeg($this->im); // Output Image
imagedestroy($this->im); // Flush Image
}
}

?>

fil 2 gd_image.php

<?php
// Velox Letum (2005)
// elementation@gmail.com

// Require the class code...
require ('gd_image_verify.php');

// Initialize class
$gd = new gd_verification();



if (isset($_POST['submit'])) {
if ($gd->verify_string($_POST['gd_string'])) {
$result = 'User input matches image string.';
} else {
$result = 'User input does not match image string.';
}
}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>GD Image Verification Class Example</title>
<meta name="Generator" content="Stone's WebWriter 4">
</head>
<body>
<div style="text-align:center;">
<h1>GD Image Verification Class Example</h1>
<? echo $result; ?><br /><br />
<form name="gd_verify" method="POST" action="<? echo $PHP_SELF; ?>">
<img src="gd_image.php" alt="Verification Image" /><br /><br />
<? echo $gd->output_input_box('gd_string'); ?><br /><br .>
<input type="submit" name="submit" value="Submit" />
</form>
</div>
</body>
</html>

Koden vil bare ikke vise det billedet der kommer bare et kryds... men hvis jeg skriver
$gd->output_image();

så kommer der et billede... men så virker alt det andet med formen ikke
Avatar billede coderdk Praktikant
06. februar 2007 - 11:06 #7
Avatar billede simplus Nybegynder
06. februar 2007 - 14:15 #8
#uzi

har du prøvet min? :-)
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