Avatar billede NielsErikP Mester
08. september 2011 - 23:37 Der er 26 kommentarer og
1 løsning

Gemme i en Variable..???

Hej..
Ved det lyder helt ved siden af, men er der en der kan give mig lidt hjælp... jeg prøver at lave en del af et script der kan skabe en tilfældig streng, men jeg kan ikke lige se hvor og hvordan jeg gemmer resultatet og opdaterer med næste bogstav
Her er kode :



$antal = 7;
for ($tael= 0; $tael <= $antal; $tael++) {
$tegn = mt_rand(1,26);

        switch ($tegn) {
            case 1:
                $s1 = 'a';
                break;
            case 2:
                $s1 = 'b';
                break;
            case 3:
                $s1 = 'c';
                break;
            case 4:
                $s1 = 'd';
                break;
            case 5:
                $s1 = 'e';
                break;
            case 6:
                $s1 = 'f';
                break;
            case 7:
                $s1 = 'g';
                break;
            case 8:
                $s1 = 'h';
                break;
            case 9:
                $s1 = 'i';
                break;
            case 10:
                $s1 = 'j';
                break;
            case 11:
                $s1 = 'k';
                break;
            case 12:
                $s1 = 'l';
                break;
            case 13:
                $s1 = 'm';
                break;
            case 14:
                $s1 = 'n';
                break;
            case 15:
                $s1 = 'o';
                break;
            case 16:
                $s1 = 'p';
                break;
            case 17:
                $s1 = 'q';
                break;
            case 18:
                $s1 = 'r';
                break;
            case 19:
                $s1 = 's';
                break;
            case 20:
                $s1 = 't';
                break;
            case 21:
                $s1 = 'u';
                break;
            case 22:
                $s1 = 'v';
                break;
            case 23:
                $s1 = 'w';
                break;
            case 24:
                $s1 = 'x';
                break;
            case 25:
                $s1 = 'y';
                break;
            case 26:
                $s1 = 'z';
                break;
            default:
                break;
        }
        $str1 = $s1;
        $str2 = ?????????
       
}




Strengen skal så skrives ud med følgende  :



imagettftext  ( $im, 14 , 0  , 16  , 27  , $FarveText  , "TTF_Fonts\a_Campus_Bold.ttf" , StrToUpper($str2) );



Håber der en der kan se ideen og har en svar!!!

På forhånd tak!!!
Avatar billede arne_v Ekspert
08. september 2011 - 23:59 #1
$str2 = $str2 . $str1;

eller kortere:

$str2 .= $str1;
Avatar billede arne_v Ekspert
09. september 2011 - 00:00 #2
Og du boer kunne undgaa den switch!
Avatar billede arne_v Ekspert
09. september 2011 - 00:01 #3
Et eksempel fra lageret:

<?php
function genpw($len, $valid) {
    $res = '';
    for($i = 0; $i < $len; $i++) {
        $res .= $valid[rand(0, strlen($valid) - 1)];
    }
    return $res;
}

echo genpw(7,  'ABCDEFGHIJKLMNOPQRSTUWVXYZ0123456789');
?>
Avatar billede NielsErikP Mester
09. september 2011 - 00:21 #4
Hej..
Måske det var forkert ikke at vise hele koden, det er til en captcha, men var træt af alle de tal der var i strengen med md5 og microtime.
Så jeg ville selv prøve at fremstille en tilfældig streng.

Det der sker ved at bruge #1, er at images'et ikke vises, kun det velkendte røde kryds..

Her er hele koden med #1 indsat  :



<?php
session_start();

// Sætter en bredde og højde på images'et.....
$width = 115;
$height = 40;
// Skaber selve images'et og tildeler det til en variable.....
$im = imagecreatetruecolor($width, $height);

// Definere nogle faste farver
$lightgray = imagecolorallocate($im, 170, 170 , 170);

// Definerer tilfældige Farver....
$FarveText = imagecolorallocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255) );

// Sætter baggrunds Farven på images'et.....
imagefill($im,0,0, $lightgray);

//a b c d e k f g h i j m n o p q r s t u v x y z.
$antal = 7;
for ($tael= 0; $tael <= $antal; $tael++) {
$tegn = mt_rand(1,26);

        switch ($tegn) {
            case 1:
                $s1 = 'a';
                break;
            case 2:
                $s1 = 'b';
                break;
            case 3:
                $s1 = 'c';
                break;
            case 4:
                $s1 = 'd';
                break;
            case 5:
                $s1 = 'e';
                break;
            case 6:
                $s1 = 'f';
                break;
            case 7:
                $s1 = 'g';
                break;
            case 8:
                $s1 = 'h';
                break;
            case 9:
                $s1 = 'i';
                break;
            case 10:
                $s1 = 'j';
                break;
            case 11:
                $s1 = 'k';
                break;
            case 12:
                $s1 = 'l';
                break;
            case 13:
                $s1 = 'm';
                break;
            case 14:
                $s1 = 'n';
                break;
            case 15:
                $s1 = 'o';
                break;
            case 16:
                $s1 = 'p';
                break;
            case 17:
                $s1 = 'q';
                break;
            case 18:
                $s1 = 'r';
                break;
            case 19:
                $s1 = 's';
                break;
            case 20:
                $s1 = 't';
                break;
            case 21:
                $s1 = 'u';
                break;
            case 22:
                $s1 = 'v';
                break;
            case 23:
                $s1 = 'w';
                break;
            case 24:
                $s1 = 'x';
                break;
            case 25:
                $s1 = 'y';
                break;
            case 26:
                $s1 = 'z';
                break;
            default:
                break;
        }
        $str1 = $s1;
        $str2 = $str2 .$str1;
       
}

imagettftext  ( $im, 14 , 0  , 16  , 27  , $FarveText  , "TTF_Fonts\a_Campus_Bold.ttf" , StrToUpper($str2) );

// Sætter en header og printer images'et til browseren og tilintetgører derefter images'et.....
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);   
?>

Avatar billede arne_v Ekspert
09. september 2011 - 01:45 #5
1) check at GD2 extension er loadet
2) check at font eksisterer
3) flyt header op i toppen
Avatar billede kjeldsted Novice
09. september 2011 - 09:41 #6
Undskyld jeg spørger... Men er det ikke lidt tåbeligt at benytte en switch til dét der?

Det vil da være en del bedre at bruge noget a lá #3.
Avatar billede majbom Novice
09. september 2011 - 18:49 #7
kan nu heller ikke rigtig se ideen i den dér switch...
Avatar billede NielsErikP Mester
09. september 2011 - 22:03 #8
Hej...

#5:

1. Kørte phpinfo()
 
  GD Support -- enabled
  GD Version -- Bundled (2.0.34 compatible)
2. Fonten eksisterer, har selv downloaded den og fungerede godt med følgende :


$s1 = md5(microtime()* time());
$s2 = md5(microtime()* time());
$str1 = substr($s1, 0, 4);
$str2 = substr($s2, 0, 4);
$str3 = "$str1"."$str2";



3. Har prøvet at flytte headeren op efter session_start, får stadig det røde kryds og ingen images.

----------------------------------------------------------------

#6:

Jo... måske, men jeg er heller ingen haj til det... Er først ved at lære... Men så forklar lige :


$res = '';



og


$res .= $valid[rand(0, strlen($valid) - 1)];

Avatar billede kjeldsted Novice
09. september 2011 - 22:09 #9
[code]$res='';[/code] laver en tom variabel ved navn $res.

Og hvis du fx. har en streng der hedder [code]$var = 'abcdef';[/code] kan du fx. hente det tredje tegn ved at skrive [code]$var[2][/code]. Teoretisk set ved at behandle det som et array (men det er altså IKKE et array).

[code]rand(0,strlen($valid)-1)[/code] Generere jo så et tilfældigt tal mellem 0 og antallet af tegn i strengen.

Håber der var forståeligt.
Avatar billede kjeldsted Novice
09. september 2011 - 22:11 #10
Og TAK til eksperten for at fjerne '... SUK....

Der skulle naturligvis blot stå:

$res='';

samt

$var = 'abcdef';
Avatar billede NielsErikP Mester
09. september 2011 - 22:18 #11
Hej..
10-4... tak, kjeldsted.. Det var forståeligt.
Satans... men hvad man kommer vel efter det med tiden.. Er bare lidt af den type at jeg gerne vil forstå hvad der foregår.. Før jeg bruger noget..Ellers lærer man jo heller aldrig noget ;-)
Avatar billede kjeldsted Novice
09. september 2011 - 22:36 #12
Jeg har det selv på samme måde... Men har erfaret at vi er i stor undertal at den slags her på siden ;) Men glad for du forstod :)

Har du PHP error slået til? Samt prøvet at åbne URL'en til "billedet" i browseren for at se om det står noget i kildekoden?
Avatar billede NielsErikP Mester
09. september 2011 - 22:53 #13
Hej.
Ja.. Det er jo rarest at vide hvad man beskæftigerer sig med... ja..okay, men så må vi jo lade være med at smide point indtil vi forstår.

øhh.. PHP error??, jamen det er sådan set ikke et billed, men et image opretter med imagecreatetruecollor!!

Sig mig bruger jeg funktionen i #3, kan man så ændre denne :


imagettftext  ( $im, 14 , 0  , 16  , 27  , $FarveText  , "TTF_Fonts\a_Campus_Bold.ttf" , StrToUpper($str2) );



Til :


imagettftext  ( $im, 14 , 0  , 16  , 27  , $FarveText  , "TTF_Fonts\a_Campus_Bold.ttf" , StrToUpper(genpw(7,  'ABCDEFGHIJKLMNOPQRSTUWVXYZ0123456789'));



Avatar billede kjeldsted Novice
09. september 2011 - 23:03 #14
Jeps... Men antaget at de php fil der generer billedet hedder createIMG.php, kan du jo åbne denne fil i browseren, ved at indsætte URL'en.

Eftersom du ser IE's skønne røde kryds betyder det enten at det linkede billede ikke findes eller at det ikke er et billede.
Hvis der er en ting som PHP ikke kan lide og derfor melder fejl, vil createIMG.php (eller hvad den nu hedder) ikke længere være en png fil men blot en alm. tekst fil, hvilket kan skyldes krydset. Så hvis du åbner URL'en til billedet, ser du så billedet? Og hvis ikke, hvad indeholder kildefiles til siden så?
Avatar billede NielsErikP Mester
09. september 2011 - 23:29 #15
Hej...
Jamen det er ikke et fysisk billede, det er et imags skabt af denne kode kaldet (Tstreng.php) :


<?php
// Sætter en bredde og højde på images'et.....
$width = 115;
$height = 40;
// Skaber selve images'et og tildeler det til en variable.....
$im = imagecreatetruecolor($width, $height);

// Definere nogle faste farver
$lightgray = imagecolorallocate($im, 170, 170 , 170);

// Sætter baggrunds Farven på images'et.....
imagefill($im,0,0, $lightgray);

// Sætter en header og printer images'et til browseren og tilintetgører derefter images'et.....
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);   
?>



Og skriver jeg i adresselinjen http://localhost/Tstreng.php, fremkommer firkanten med det røde kryds!!!
Avatar billede kjeldsted Novice
09. september 2011 - 23:33 #16
Har du den liggende på en server?
Og i så fald, hvad er stien til filen?
Avatar billede NielsErikP Mester
09. september 2011 - 23:37 #17
Hej..
Har jeg koden i #15 og indsætter tilfldig streng kode som:


// Skaber 2 Tilfældige strenge, forkorter den til 4 Karakterer og
// sætter den sammen til 1 streng på 8 Karakterer($str3) ........
$s1 = md5(microtime()* time());
$s2 = md5(microtime()* time());
$str1 = substr($s1, 0, 4);
$str2 = substr($s2, 0, 4);
$str3 = "$str1"."$str2";



Vil den godt vise image med strengen, men indsætter jeg denne tilfældigheds kode :


//a b c d e k f g h i j m n o p q r s t u v x y z.
$antal = 7;
for ($tael= 0; $tael <= $antal; $tael++) {
$tegn = mt_rand(1,26);

        switch ($tegn) {
            case 1:
                $s1 = 'a';
                break;
            case 2:
                $s1 = 'b';
                break;
            case 3:
                $s1 = 'c';
                break;
            case 4:
                $s1 = 'd';
                break;
            case 5:
                $s1 = 'e';
                break;
            case 6:
                $s1 = 'f';
                break;
            case 7:
                $s1 = 'g';
                break;
            case 8:
                $s1 = 'h';
                break;
            case 9:
                $s1 = 'i';
                break;
            case 10:
                $s1 = 'j';
                break;
            case 11:
                $s1 = 'k';
                break;
            case 12:
                $s1 = 'l';
                break;
            case 13:
                $s1 = 'm';
                break;
            case 14:
                $s1 = 'n';
                break;
            case 15:
                $s1 = 'o';
                break;
            case 16:
                $s1 = 'p';
                break;
            case 17:
                $s1 = 'q';
                break;
            case 18:
                $s1 = 'r';
                break;
            case 19:
                $s1 = 's';
                break;
            case 20:
                $s1 = 't';
                break;
            case 21:
                $s1 = 'u';
                break;
            case 22:
                $s1 = 'v';
                break;
            case 23:
                $s1 = 'w';
                break;
            case 24:
                $s1 = 'x';
                break;
            case 25:
                $s1 = 'y';
                break;
            case 26:
                $s1 = 'z';
                break;
            default:
                break;
        }
        $str1 = $s1;
        $str2 .= $str1;
       
}



Vil den ikke vise images'et, kun den velkendte firkant med det røde kryds!!
Avatar billede kjeldsted Novice
09. september 2011 - 23:38 #18
Så langt er jeg med. Men har du et link til filen jeg kan se, eller arbejdet du kun localhost?
Avatar billede NielsErikP Mester
09. september 2011 - 23:39 #19
Hej..
Nej.. Den er ikke lagt på server endnu!! DEr ligger man vel ku noget der fungerer, ikke sandt???
Avatar billede kjeldsted Novice
09. september 2011 - 23:43 #20
Nu jeg har indtil for nylig altid arbejdet på webhotel, og dér arbejdede jeg sjovt nok aldrig localhost ;) Og så kan jeg personligt godt lide en gang imellem at tjekke på andre computere/browsere, men skidt pyt.

Har du prøvet at udskifte switchen med forslaget i #3?
Avatar billede NielsErikP Mester
10. september 2011 - 01:00 #21
Hej.
Ja.. jeg arbejder localhost.
Nej... Har jeg ikke prøvet endnu, men det gør jeg.
Avatar billede NielsErikP Mester
10. september 2011 - 01:16 #22
Hej..
Arne_V læg venligst et svar for dit indlæg i #3... og tusind tak for hjælpen.
Vi diskuterede lidt videre... forstår stadig ikke, smart eller ej, at SWITCH'en ikke funger???
Kjeldsted oså en tak til dig for vores lille snak, men arne løste det jo... så håber det er ok med et tak for snakken :-)
Avatar billede arne_v Ekspert
12. september 2011 - 03:14 #23
svar
Avatar billede majbom Novice
12. september 2011 - 16:46 #24
switchen fungerer, men hvorfor skal det fylde så meget når det kan gøre meget mere overskueligt som i #3
Avatar billede NielsErikP Mester
12. september 2011 - 17:20 #25
Hej..
Kan godt være den sr ok ud, den switch i #17, men bruger jeg den, nægter php at udskrive mit images, får bare det velkendte røde kryds.
Helt klart... Bruger jeg Arne's lidt "Hardcore" kode for en nybegynder ud i php!!
Avatar billede majbom Novice
12. september 2011 - 18:33 #26
det er ikke fordi du bruger $str3 i dit ene eksempel og $str2 i det andet? (i #18)
Avatar billede NielsErikP Mester
12. september 2011 - 21:32 #27
Hej...
Nej det er ikke derfor, du mener nok i #17, men det jeg viser der er at den kode med microtime*time og hashen med md5, viser for mange tal, så jeg prøvede selv at oprette en tilfældig streng.
Men mit prob er løst, jeg brugte den kode som arne_v var så venlig at smide i #3.
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