Gå til innhold

phpbilde sammen med html


Anbefalte innlegg

jeg bruker følgende kode for å skrive ut et bilde med en tilfeldig kode:

<?php
header("Content-type: image/png");
function makeRandomPassword() {
   $salt = "abchefghjkmnpqrstuvwxyz0123456789";
    srand((double)microtime()*1000000);
        $i = 0;
        while ($i <= 5) {
                       $num = rand() % 33;
                        $tmp = substr($salt, $num, 1);
                        $pass = $pass . $tmp;
                        $i++;
        }
        return $pass;
}
$navn = makeRandomPassword();
$hoyde = 30;
$bredde = 75;
$font_size= 12;
$font = "arial";
$bildeRef = imagecreate($bredde, $hoyde);
$hvit = imagecolorallocate($bildeRef, 0xCC, 0xCC, 0xCC);
$blaa = imagecolorallocate($bildeRef, 99,0,0);
$boxsize = imagettfbbox($font_size,0,$font,$navn);
$dx = abs($boxsize[2]-$boxsize[0]);
$dy = abs($boxsize[5]-$boxsize[3]);
imagefilledrectangle($bildeRef, 0,0 , $bredde,$hoyde, $blaa);
imagettftext($bildeRef, $font_size, 0, $bredde/2-$dx/2, $hoyde/2+$dy/4, $hvit, $font, $navn);
imagepng($bildeRef);
imagedestroy($bildeRef);
?>

 

Det som er problemet er at når jeg setter den inn i en fil som inneholder andre ting, f.eks. html så vises bare bildet som lages av php koden.

det har nok "header("Content-type: image/png");" å gjøre, men jeg vet ikke hva jeg kan gjøre for å få vist både tekst/html og bildet fra php koden..

noen forslag?

Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet-rXRozPkg

Du setter bildet inn i et annet dokument med vanlig HTML-kode:

<img src="password_image.php">

 

Ønsker du å ta vare på passordet som blir generert i bildet, så lagrer du dette i en sessionvariabel.

Lenke til kommentar
Gjest Slettet-rXRozPkg

I scriptet som lager bildet skriver du:

$_SESSION['randompass'] = md5($navn);

 

I scriptet der bildet blir vist (eller der dataene fra skjemaet blir behandlet) skriver du noe slikt:

 

if(strcmp($_SESSION['randompass'],md5($_POST['passord_fra_skjema']))==0) {

// Det som ble vist på bildet er det som ble skrevet inn.

} else {

// Ingen match.

// Skriv ut feilmelding

}

// Sletter randompass, burde gjøres uansett om det over feiler eller ikke.

unset($_SESSION['randompass']);

Endret av Slettet-rXRozPkg
Lenke til kommentar

hm, det var litt rart.

$_SESSION['randompass'] er tom

 

jeg tester den sånn:

 

if (empty($_SESSION['randompass'])) {echo"koden er tom";}

 

og jeg får echoet ut "koden er tom"

hva kan være feil da?

$_SESSION['randompass'] = md5($navn);

ligger nederst i filen som lager bildet.

 

og dette ligger i filen som henter inn bildet

if(strcmp($_SESSION['randompass'],md5($_POST['validering']))==0) {
if ($submit) 
{ // her skal det kjøres hvis koden stemmer }
else {
// her skjer det noe hvis koden er feil
}

Endret av Smidt
Lenke til kommentar

jeg henger ikke helt med nå.

legger opp koden i de to filene.

valider.php:

<?php
header("Content-type: image/png");
function makeRandomPassword() {
   $salt = "abchefghjkmnpqrstuvwxyz0123456789";
    srand((double)microtime()*1000000);
        $i = 0;
        while ($i <= 5) { $num = rand() % 33;
                        $tmp = substr($salt, $num, 1);
                        $pass = $pass . $tmp;
                        $i++;}
        return $pass;}
$navn = makeRandomPassword();
$hoyde = 30;
$bredde = 75;
$font_size= 12;
$font = "arial";
$bildeRef = imagecreate($bredde, $hoyde);
$hvit = imagecolorallocate($bildeRef, 0xCC, 0xCC, 0xCC);
$blaa = imagecolorallocate($bildeRef, 99,0,0);
$boxsize = imagettfbbox($font_size,0,$font,$navn);
$dx = abs($boxsize[2]-$boxsize[0]);
$dy = abs($boxsize[5]-$boxsize[3]);
imagefilledrectangle($bildeRef, 0,0 , $bredde,$hoyde, $blaa);
imagettftext($bildeRef, $font_size, 0, $bredde/2-$dx/2, $hoyde/2+$dy/4, $hvit, $font, $navn);
imagepng($bildeRef);
imagedestroy($bildeRef);

session_start();
$_SESSION['randompass'] = md5($navn);
?>

 

og html filen som henter inn koden(tar bare med php'en):

 <?php 
if (empty($_SESSION['randompass'])) {echo"koden er tom";}
 if ($navn == "" || $melding == "") {
echo "<p>OBS!! Du har glemt å fylle ut et av de obligatoriske feltene!!</p>";
}
else {
if($_POST['submit']) 
{ if(strcmp($_SESSION['randompass'],md5($_POST['validering']))==0) {


 
  

// SQL database Variables 

include"art/dbc.php";

// This is form.php 

$dato = date("Y-m-d H:i:s");
$ip=$REMOTE_ADDR;

$navn = htmlspecialchars("$navn", ENT_QUOTES);
$boplass = htmlspecialchars("$boplass", ENT_QUOTES);
$melding = htmlspecialchars("$melding", ENT_QUOTES);



$q="INSERT into gjestebok (navn,hjemmeside,boplass,dato,melding,kjonn,ip)
VALUES ('$navn','$hjemmeside','$boplass','$dato','$melding','$kjonn','$ip')";

$result= mysql_query($q, $connection) or die 
("Could not execute query : $q." . mysql_error()); 

if ($result)
{echo "<p>Takk, $navn. Ditt innlegg er lagret.</p>";} 
}
else {
echo "<p>Du må skrive inn Spamkoden</p>";}
}
} 


unset($_SESSION['randompass']);
?>

 

hvis jeg sjekker om det er noe i $_POST['submit'] så får jeg ut at den er ikke tom..

selv om det ikke er skrevet noe i skjemaet.. var rart. videre får jeg ut at $_SESSION['randompass'] er tom.. hva kan være feil da?

Endret av Smidt
Lenke til kommentar
Gjest Slettet-rXRozPkg

Du må ha session_start() i fil nummer to også.

 

hvis jeg sjekker om det er noe i $_POST['submit'] så får jeg ut at den er ikke tom..

selv om det ikke er skrevet noe i skjemaet.. var rart.

Det er akkurat slik det skal være. Det eneste du får gjort med isset($_POST['submit']) er å sjekke om noen faktisk har klikka på knappen med navn submit, den vil aldri vite om dataene i skjemaet er fylt ut.

 

Jeg regner med at denne også prøver å sjekke på felter i skjemaet:

if ($navn == "" || $melding == "") { blabla }

 

Bytt ut til $_POST her også:

if ($_POST['navn'] == "" || $_POST['melding'] == "") { blabla }

 

Du burde egentlig stokke litt om på sjekkene dine, først sjekker du om $_POST['submit'] er satt, og så sjekker du om brukeren har fyllt inn navn, melding og at bildekoden er rett. Hvis alt er OK, så kjører du databasespørringa, ellers skriver du ut en feilmelding.

 

Igjen så ser jeg at mye av koden din er gammel, og det er en del som kanskje ikke vil virke med f.eks. PHP5.

 

Her er en noe oppdatert utgave av fil nummer to:

<?php

session_start();

 

if($_POST['submit']){

$feil = false;

$msg = "";

if(strcmp($_SESSION['randompass'],md5($_POST['validering']))==0) {

  $msg .= "Bildekoden stemte ikke overens med de du skrev inn!\n";

  $feil = true;

}

if(strlen($_POST['navn'])<0) {

  $msg .= "Navn må være fylt ut!\n";

  $feil = true;

}

 

if(strlen($_POST['melding'])<0){

  $msg .= "Melding må være fylt ut!\n";

  $feil = true;

}

 

// Boplass?? Er det eet tekstfelt? I så fall blir det samme saken om på navn og melding.

 

if($feil) {

  echo "En eller flere feil oppstod:<br />";

  echo nl2br($msg); // \n -> <br />

} elseif(!$feil) {

  // SQL database Variables

 

  include"art/dbc.php";

 

  // This is form.php

 

  $dato = date("Y-m-d H:i:s");

  $ip= $_SERVER['REMOTE_ADDR'];

 

  $navn = htmlspecialchars($_POST['navn'], ENT_QUOTES);

  $boplass = htmlspecialchars($_POST['boplass'], ENT_QUOTES);

  $melding = htmlspecialchars($_POST['melding'], ENT_QUOTES);

 

  $q="INSERT into gjestebok (navn,hjemmeside,boplass,dato,melding,kjonn,ip) VALUES ('$navn','$hjemmeside','$boplass','$dato','$melding','$kjonn','$ip')";

  $result= mysql_query($q, $connection) or die ("Could not execute query : $q." . mysql_error());

 

  if ($result) {

  echo "<p>Takk, $navn. Ditt innlegg er lagret.</p>";

  }

}

}

 

unset($_SESSION['randompass']);

?>

Endret av Slettet-rXRozPkg
Lenke til kommentar

hvis jeg bruker den oppdaterte koden din får jeg følgende feilmelding:

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /hsphere/local/home/predicte/predicted.net/gb.php:14) in /hsphere/local/home/predicte/predicted.net/gb.php on line 57 Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /hsphere/local/home/predicte/predicted.net/gb.php:14) in /hsphere/local/home/predicte/predicted.net/gb.php on line 57

linje 57:

session_start();

Endret av Smidt
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...