Smidt Skrevet 9. november 2006 Del Skrevet 9. november 2006 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
Gjest Slettet-rXRozPkg Skrevet 9. november 2006 Del Skrevet 9. november 2006 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
Smidt Skrevet 9. november 2006 Forfatter Del Skrevet 9. november 2006 (endret) supert, tusen takk Endret 9. november 2006 av Smidt Lenke til kommentar
Smidt Skrevet 9. november 2006 Forfatter Del Skrevet 9. november 2006 forresten. hvordan henter jeg inn igjen koden med sessions? skal jeg legge sessions variabelen i samme filen som koden er hentet fra? og så hente den inn igjen der som bildet blir vist? Lenke til kommentar
Gjest Slettet-rXRozPkg Skrevet 9. november 2006 Del Skrevet 9. november 2006 (endret) 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 9. november 2006 av Slettet-rXRozPkg Lenke til kommentar
Smidt Skrevet 9. november 2006 Forfatter Del Skrevet 9. november 2006 (endret) 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 9. november 2006 av Smidt Lenke til kommentar
Gjest Slettet-rXRozPkg Skrevet 9. november 2006 Del Skrevet 9. november 2006 (endret) Denne kan jo være kjekk, og jeg burde nevnt den i forrige post :o) http://no2.php.net/session_start Edit: if ($submit) ? Hvis $submit er en knapp du har i skjemaet, så bytt til if($_POST['submit']). Endret 9. november 2006 av Slettet-rXRozPkg Lenke til kommentar
Smidt Skrevet 9. november 2006 Forfatter Del Skrevet 9. november 2006 (endret) 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 9. november 2006 av Smidt Lenke til kommentar
Gjest Slettet-rXRozPkg Skrevet 10. november 2006 Del Skrevet 10. november 2006 (endret) 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: <?phpsession_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 10. november 2006 av Slettet-rXRozPkg Lenke til kommentar
Smidt Skrevet 10. november 2006 Forfatter Del Skrevet 10. november 2006 (endret) 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 10. november 2006 av Smidt Lenke til kommentar
Gjest Slettet-rXRozPkg Skrevet 10. november 2006 Del Skrevet 10. november 2006 session_start skal helt på toppen i fila. Hva står det på linje 14 i gb.php? (Du har tydligvis mer i denne filen enn det du har skrevet over). Lenke til kommentar
Smidt Skrevet 10. november 2006 Forfatter Del Skrevet 10. november 2006 jeg la session start øverst i filen som inkluderer bildet og får ikke opp noen feilmeldinger. men hvis jeg trykker submit uten å skrive noe i skjemaet lagres det og hvis jeg skriver feil passord lagres det og.. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå