Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziwny problem z biblioteka GD2
Forum PHP.pl > Forum > PHP
kociupk
witam mam nastepujacy kod
  1. <?php
  2. ?>
  3. <form action="" method="POST">
  4. <table border="0">
  5. <tr>
  6. <td>
  7. Imię i Nazwisko:
  8. </td>
  9. <td>
  10. <input type="text" name="imie_nazwisko" size="25">
  11. </td>
  12. </tr>
  13. <tr>
  14. <td>
  15. Login: *
  16. </td>
  17. <td>
  18. <input type="text" name="login" size="25">
  19. </td>
  20. </tr>
  21. <tr>
  22. <td>
  23. Hasło: *
  24. </td>
  25. <td>
  26. <input type="password" name="password" size="25">
  27. </td>
  28. </tr>
  29. <tr>
  30. <td>
  31. Powtórz hasło: *
  32. </td>
  33. <td>
  34. <input type="password" name="password_2" size="25">
  35. </td>
  36. </tr>
  37. <tr>
  38. <td>
  39. e-Mail: *
  40. </td>
  41. <td>
  42. <input type="text" name="mail" size="25">
  43. </td>
  44. <tr>
  45.  
  46. <tr>
  47. <td></td>
  48. <td>
  49. <input type="submit" value="Rejestruj!" name="rejestruj">
  50. </td>
  51.  
  52. <?php
  53. $hasz = md5(uniqid(rand()));
  54. $uniq_1 = $hasz[rand(1, 10)];
  55. $uniq_2 = $hasz[rand(5, 20)];
  56. $uniq_3= $hasz[rand(10, 30)];
  57. $uniq_4= $hasz[rand(1, 15)];
  58. $uniq_5= $hasz[rand(16, 31)];
  59. $uniq_6= $hasz[rand(1, 31)];
  60. $zdjecie = ImageCreate(200, 70);
  61. $background_color = ImageColorAllocate($zdjecie, 255, 255, 255);
  62. $czarny = ImageColorAllocate($zdjecie, 0, 0, 0);
  63. $czerwony = ImageColorAllocate($zdjecie, 223, 0, 0);
  64. $zielony = ImageColorAllocate($zdjecie, 0, 161, 34);
  65. $fioletowy = ImageColorAllocate($zdjecie, 132, 0, 201);
  66. $pomaranczowy = ImageColorAllocate($zdjecie, 255, 222, 0);
  67. $niebieski = ImageColorAllocate($zdjecie, 0, 126, 255);
  68. ImageTTFText($zdjecie, 20, 10, 10, 60, $czerwony, Arial, $uniq_1);
  69. ImageTTFText($zdjecie, 30, 340, 30, 60, $czarny, Arial, $uniq_2);
  70. ImageTTFText($zdjecie, 20, 30, 70, 60, $zielony, Arial, $uniq_3);
  71. ImageTTFText($zdjecie, 50, 40, 100, 60, $fioletowy, Arial, $uniq_4);
  72. ImageTTFText($zdjecie, 15, 50, 130, 60, $pomaranczowy, Arial, $uniq_5);
  73. ImageTTFText($zdjecie, 40, 320, 150, 50, $niebieski, Arial, $uniq_6);
  74. Header('Content-type: image/png');
  75. ImagePNG($zdjecie);
  76. ImageDestroy($zdjecie);
  77. ?>
  78. </tr>
  79. <tr>
  80. <td colspan="2">
  81.  
  82. <?php
  83. if(isset($_POST['rejestruj'])) {
  84.  
  85. if(!$_POST['login'] || !$_POST['password'] || !$_POST['password_2'] || !$_POST['mail']) {
  86. echo 'Proszę wypełnić wszystkie Pola wymagane!';
  87. }
  88.  
  89. if(strlen($_POST['login']) < 3) { echo 'Login jest za krótkie musi posiadać co najmniej 3 znaki!'; }
  90. if(strlen($_POST['password']) < 5) { echo 'Hasło jest za krótkie musi posiadać co najmniej 5 znaków!'; }
  91. if($_POST['password'] != $_POST['password_2']) { echo 'Podane hasła róznią się od siebie. Oba podane przez ciebie hasła muszą być identyczne!'; }
  92. if($_SESSION['token'] != $_POST['token']) { echo 'Podaj poprawny kod z obrazka!'; }
  93. include('config.php');
  94. $laczenie = mysql_connect($host, $user_name, $password) or die('Nie można się połączyć z Bazą Danych!');
  95. mysql_select_db($baza, $laczenie) or die('Nie ma takiej Bazy Danych');
  96.  
  97. $spr_login = mysql_query("SELECT * FROM user WHERE user_name = '".$_POST['login']."'") or die(mysql_error());
  98. if(mysql_num_rows($spr_login) == 0) {
  99. $spr_mail = mysql_query("SELECT * FROM user WHERE email = '".$_POST['mail']."'") or die(mysql_error());
  100. if(mysql_num_rows($spr_mail) == 0) {
  101.  
  102. $token = md5(uniqid(rand()));
  103. $password = md5($_POST['password']);
  104.  
  105. $zapytanie = "INSERT INTO user VALUES('NULL', '".$_POST['login']."', '".$password."', '".$_POST['mail']."', '".$_POST['imie_nazwisko']."', 'n', '".$token."')" or die(mysql_error());
  106. $wynik = mysql_query($zapytanie);
  107.  
  108. $nadawca = "From: Paweł Koteluk <waost@o2.pl>";
  109. $tytul = "Aktywuj swoje konto";
  110. $tresc = 'Dziękujemy '.$_POST['login'].' za założenie konta w naszym serwisie. Żeby aktywować Twoje konto kliknij w poniższy link: <a href="http://www.127.0.0.1/~kociupk/portal/index.php?user_name='.$_POST" target="_blank">http://www.127.0.0.1/~kociupk/portal/index...39;.$_POST</a>['login'].'&code='.$token.'';
  111. mail($_POST['mail'], $tytul, $tresc, $nadawca);
  112.  
  113. if($wynik) {
  114. echo 'Użytkownik został dodany!. Na podany adres e-mail został wyslany link aktywujący';
  115. }
  116. else {
  117. echo 'Nie można dodać użytkownika!';
  118. }
  119. }
  120. else {
  121. echo 'Podany adres e-mail juz istnieje w bazie danych. Podaj inny!';
  122. }
  123. }
  124. else {
  125. echo 'Użytkownik o podanym loginie juz istnieje!';
  126. }
  127. }
  128. ?>
  129. </td>
  130. </tr>
  131. </table>
  132. </form>
  133. <? ob_end_flush(); ?>


jest to script rejestracji, usera mozna dodawac do bazy ale nie wyswietla sie token nie mam pojecia czemu wyswietla sie dziwny blad

‰PNG  IHDRČFľ<+“PLTE˙˙˙ߡ"„É˙Ţ ~˙űßßďăë__÷ żżóźźç??___żżżßßßźź ź?źŰ& not;?¸Y&not ;=_ÄtżçÇßóăАďßřĐźę˛_Ý“Ϣ?ÖÁäŕżń˙ú ß˙ę_˙ć?˙â˙ňź˙î˙öżßî˙źÎ˙_&reg;˙ Ž˙?ž˙ľ˙żŢ˙Žö™IDATxśí™ vŞ: †Ĺ&copy;Z&laquo;Öń “C+ŠňţOwC& Ů rĽśĺ &middot; V 7Ő3¸Óƒl_= ŤÇ&plusmn;ëÜYţƒĎňóOüżCzqÔ÷\„˝­Q „¤űG&middot;6NçIB⊘Â&copy;‰ŰmĹ*"őŹ5i…Ĺ2"ë@ë“ÎŻ 0VvŞ Ł&JpD8ô‹Ďfî[qęâŃRď˛Ó…„Ě Ý‘i„ĚĎâBb& ra quo;ÄE đ/Ë‘e°ÍFsżţěż*AÔ&laquo;‹m 0Ä‘Q\I”5&plusmn ;&copy;hO HŔÇ5 E<"mm ńMó˝ ̘řß EPÍS&brvbar;Ý„&copy;…CU%!žĄk Q¤HcVf&middot;1‰ű†‰âă7 Vócš'đr`ƒ›ż˘ę &plus mn;(˙P†ÉLhODćB}'X rÇN—Ź=šţ&raquo;×É„c Ƣ|×ţižˇô,ưÁň}&plusmn;ëÚŹ;ęTЏŹ!—üî˝Ď á@!ä;ÇłkI1 ˘ádŹżřÓě[ śjIeŃŻ§úÜ"*!_*ĎZ/q&para;šKYK Ž#6ĹŢ„O%7ş Řt°éÂMŠÔžp6qY ŻWRÉăt4Ź'ň7ńö_ŔŢŠqlTOŕü+&para;' s¸ćł#éwŻ:.äÚ›´™‚Ň Vż×ôáöhO6&laquo;ĺrůČXąśö‡=ś|cpŢb›ŁAşŤ× ŇŁĄÖˇjO*…řŇ% ˘3[šä8&brvbar;;ěő†Ş˛&middot;'Ďśc1&reg;â&plusmn;ˆ-ąE¤"˛›×O؃ĎkO*#J–íOy*’מT}NuyĘVď¤Ŕľ\•<ńÂ8o §ôÍ›7oŞç?čeT ýöIEND&reg;B`‚
jak daje sam kod tokena do osobnego pli ku php to wszystko dz iala tylko jak lacze w calosc to wyskakuje ten blad
babejsza
to nie jest bład tylko zawartość obrazka smile.gif Żle do tego podchodzisz. Musisz umieścić kod odpowiedzialny za tworzenie tokena w pliku np. token.php, a potem wyświetlić go za pomocą standardowego:

  1. <img src="token.php" alt="" />
kociupk
dzieki za podpowiedz zrobilem tak i dziala smile.gif
.....
ImagePNG($zdjecie, "token.png");
ImageDestroy($zdjecie);
?>
<img src="token.png" alt="" />
.....

teraz mam inny problem ;/
wpisuje kod z obrazka i wi wyskakuje ze sie hasz nie zgadza nie mam pojecia czemu mi w dwuch miejscach generuje inny kod ;/
na obrazku generuje
  1. <?php 
  2. $hasz = md5(uniqid(rand())); 
  3. $uniq_1 = $hasz[rand(1, 10)]; 
  4. $uniq_2 = $hasz[rand(5, 20)]; 
  5. $uniq_3= $hasz[rand(10, 30)]; 
  6. $uniq_4= $hasz[rand(1, 15)]; 
  7. $uniq_5= $hasz[rand(16, 31)]; 
  8. $uniq_6= $hasz[rand(1, 31)]; 
  9. $zdjecie = ImageCreate(200, 70); 
  10. $background_color = ImageColorAllocate($zdjecie, 255, 255, 255); 
  11. $czarny = ImageColorAllocate($zdjecie, 0, 0, 0); 
  12. $czerwony = ImageColorAllocate($zdjecie, 223, 0, 0); 
  13. $zielony = ImageColorAllocate($zdjecie, 0, 161, 34); 
  14. $fioletowy = ImageColorAllocate($zdjecie, 132, 0, 201); 
  15. $pomaranczowy = ImageColorAllocate($zdjecie, 255, 222, 0); 
  16. $niebieski = ImageColorAllocate($zdjecie, 0, 126, 255); 
  17. ImageTTFText($zdjecie, 20, 10, 10, 60, $czerwony, Arial, $uniq_1); 
  18. ImageTTFText($zdjecie, 30, 340, 30, 60, $czarny, Arial, $uniq_2); 
  19. ImageTTFText($zdjecie, 20, 30, 70, 60, $zielony, Arial, $uniq_3); 
  20. ImageTTFText($zdjecie, 50, 40, 100, 60, $fioletowy, Arial, $uniq_4); 
  21. ImageTTFText($zdjecie, 15, 15, 130, 60, $pomaranczowy, Arial, $uniq_5); 
  22. ImageTTFText($zdjecie, 40, 320, 150, 50, $niebieski, Arial, $uniq_6);
  23. ?>


i jak sprawdzam czy kod z obrazka zgadza sie z tym co jest wpisany w formularz

  1. <?php
  2. if($uniq_1.$uniq_2.$uniq_3.$uniq_4.$uniq_5.$uniq_6 == $_POST['token']) {
  3. ?>
babejsza
Sprawa jest bardzo prosta. Najpierw losujesz znaki dla tokena. Generujesz z nich obrazek. Do tej pory OK. Ale teraz wprowadzasz do formularza znaki z obrazka i wciskasz wyślij. W tym momencie strona się odświeża, znaki znowu losują, a Ty z nimi porównujesz wysłaną zmienną. To nie ma prawa się zgodzić.

Musisz w jakiś sposób przechować wylosowany ciąg, w celu porównania go ze zmienną z POST. Najlepiej poprzez sesję, albo bazę danych.
kociupk
juz sobie poradzilem dzieki wszystkim ktorzy chcieli pomuc
Niast
Witam, mam pewien problem troszkę podobny do tego wyżej.

Otóż przeglądarka nie chce wyświetlać (w ogóle) wygenerowanego obrazka PNG. Sprawdziłem, czy w ogóle biblioteka GD2 poprawnie działa, zapisując wynik kodu php do pliku. W pliku zostało wszystko narysowane jak trzeba. Problem jest widać albo w kodzie, albo w konfikuracji serwera (Apache 2.0.59 na win32).

Dołączam dodatkowo kody pliku html oraz php.

Z góry dzięki za pomoc.

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2. "http://www.w3.org/TR/html4/loose.dtd">
  3. <title>Untitled Document</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  5. </head>
  6.  
  7. <img src="obrazek.php" />
  8. </body>
  9. </html>


php
  1. <?php
  2. //konfiguracja obrazka
  3. $szerokosc = 200;
  4. $wysokosc = 200;
  5. $ob = ImageCreateTrueColor($szerokosc, $wysokosc);
  6. $bialy = ImageColorAllocate($ob, 255,255,255);
  7. $niebieski = ImageColorAllocate($ob, 0, 0, 64);
  8. $nazwa_pliku = "obrazek.png";
  9.  
  10. //rysowanie obrazka
  11. ImageFill($ob, 0, 0, $niebieski);
  12. ImageLine($ob, 0, 0, $szerokosc, $wysokosc, $bialy);
  13. ImageString($ob, 4, 50, 150, 'Sprzedaz', $bialy);
  14.  
  15. //wyswietlenie obrazka
  16. Header("Content-type: image/png");
  17. ImagePng($ob);
  18. ImagePng($ob, $nazwa_pliku);
  19.  
  20. ImageDestroy($ob);
  21. ?>
babejsza
Cytat
  1. <?php
  2. //konfiguracja obrazka
  3. $szerokosc = 200;
  4. $wysokosc = 200;
  5. $ob = ImageCreateTrueColor($szerokosc, $wysokosc);
  6. $bialy = ImageColorAllocate($ob, 255,255,255);
  7. $niebieski = ImageColorAllocate($ob, 0, 0, 64);
  8. $nazwa_pliku = "obrazek.png";
  9.  
  10. //rysowanie obrazka
  11. ImageFill($ob, 0, 0, $niebieski);
  12. ImageLine($ob, 0, 0, $szerokosc, $wysokosc, $bialy);
  13. ImageString($ob, 4, 50, 150, 'Sprzedaz', $bialy);
  14.  
  15. //wyswietlenie obrazka
  16. Header("Content-type: image/png");
  17. ImagePng($ob);
  18. ImagePng($ob, $nazwa_pliku);
  19.  
  20. ImageDestroy($ob);
  21. ?>


spróbuj tak:

  1. <?php
  2. header("Content-type: " . image_type_to_mime_type(IMAGETYPE_PNG));
  3. $szerokosc = 200;
  4. $wysokosc = 200;
  5.  
  6. putenv('GDFONTPATH=' . realpath('.')); //w pewnych przypadkach rozwiązuje problem ładowania czcionki
  7. $font = 'jakasczcionka.ttf'; //musisz mieć font w tej samej lokalizacji
  8.  
  9. $ob = imagecreate($szerokosc, $wysokosc);
  10. $niebieski = ImageColorAllocate($ob, 0, 0, 64);
  11.  
  12. imagettftext($ob, 10, 0, 50, 100, $niebieski, $font, 'Sprzedaz');
  13.  
  14. imagefilter($im, IMG_FILTER_SMOOTH, 50); //tylko jeżeli masz zainstalowane PHP5 - niby antyaliasing. Sprawdza się :).
  15.  
  16. ImagePng($ob);
  17. ImageDestroy($ob);
  18. ?>


powinno działać.
Niast
Ten kod, który mi podałeś trochę średnio działa. Wiesz, w moim przypadku to nie jest kwestia tego, czy pliki graficzne są budowane przez php, ale chodzi o to, że przeglądarka ma problemy z ich wyświetlaniem. Bo jeśli zapiszę wynik działania skryptu do pliku *.png, to wszystko jest ok. Jest gdzieś problem między tworzeniem obrazka, a wyświetleniem go w przeglądarce. Znalazłem parę tematów na temat tego, że trzeba plik gds32.dll przekopiować do win\system lub win\system32.

link do tematu GD2

Nie podałem wcześniej, więc napiszę teraz: mam php 5.2.0. Wcześniej miałem 5.1.4 i też takie same problemy miałem, więc wychodzi na to, że to nie wina php.

Jeśli to jest kwestia skonfigurowania Apache'a i jeśli masz wiedzę na ten temat, jak problem rozwiązać, to będę wdzięczny. Ja jeszcze poszukam na necie, może coś znajdę i napiszę, czy udało się problem rozwiązać, czy nie.

Zajrzyj jeszcze tutaj . Ktoś opisał dokładnie ten sam problem, który mam ja, ale niestety odpowiedź jest mało konkretna. W każdym razie popróbuję z wcześniejszymi bibliotekami GD.



-----------
Apache 2.0.59
php 5.2
Win 2k

Jednak się okazało, że to nie jest kwestia skopiowania biblioteki. Już szukałem zamiennika GD2, czyli ImageMagick, ale nie jest już rozwijana wersja dla php począwszy od wersji 5.1.x.

Problem był bardzo prosty. W pliku *.php pierwszym znakiem jaki napotkała przeglądarka był znak przejścia nowej linii i dlatego do przeglądarki został wysłany nagłówek MIME, że to będzie tekst, a nie plik *.png. Wystarczyło znak otwierający <?php umieścić na samym początku pliku *.php.

No to teraz już będę wiedział.
I dzięki dla babejszy, za jakąkolwiek pomoc smile.gif
babejsza
Nie ma problemu smile.gif.

ImageMagick zdecydowanie przewyższa możliwościami GD. Sama biblioteka jest ciągle rozwijana, a jej kompilacje udostępniane dla php.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.