Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Generator, proszę tylko o wskazówkę!
Forum PHP.pl > Forum > PHP
GoldeNx3
Witam po raz drugi... Tamten temat, wiem, poszedłem na "sępa" i chciałem gotowy kod, ale mam już część kodu, tylko potrzebna mi jedna wskazówka...

Oto kod:

  1. <form method=get>
  2. Podaj nick:<br>
  3. <input type="text" name="nick" size="25" maxlength="255"><br>
  4. Podaj klase:<br>
  5.  
  6. <select name="klasa">
  7. <option value="0" SELECTED="SELECTED">Wybierz Klase</option>
  8. <optgroup label="Bohaterowie">
  9. <option value="1">Czarodziej</option>
  10. <option value="2">Druid</option>
  11. <option value="3">Paladyn</option>
  12. <option value="4">Zabójca</option>
  13. <option value="5">Nekromanta</option>
  14. <option value="6">Barbarzyńca</option>
  15. <option value="7">Ninja</option>
  16. <option value="8">Amazonka</option>
  17. </select>
  18.  
  19. <input type=submit value=Stworz>
  20. <br><br>
  21. </form>
  22.  
  23. <?php
  24.  
  25. $nick = ($_GET['nick']);
  26. $klasa = ($_GET['klasa']);
  27. $rozsz = '.png';
  28.  
  29. $link = mysql_connect('localhost', 'user', 'password');
  30. if (!$link) {
  31. die('Nie połączono : ' . mysql_error());
  32. }
  33.  
  34. echo 'Połączenie nawiązane';
  35.  
  36. $db_selected = mysql_select_db('database', $link);
  37. if (!$db_selected) {
  38. die ('Nie można ustawic' . mysql_error());
  39. }
  40.  
  41. $result = mysql_query("SELECT `lvl`,`man`,`str`,`agi`,`dex`,`pan`,`zar`,`int` FROM `tabela` WHERE `nick`='$nick' AND `klasa`='$klasa'");
  42. if (!$result) {
  43. echo 'Brak danych w bazie' . mysql_error();
  44. }
  45.  
  46. $row = mysql_fetch_row($result);
  47. echo '<br><br>';
  48. echo 'Level: ';
  49. echo $row[0]; // lvl
  50. echo '<br>';
  51. echo 'Mana: ';
  52. echo $row[1]; // mana
  53. echo '<br>';
  54. echo 'Sila: ';
  55. echo $row[2]; // str
  56. echo '<br>';
  57. echo 'Zrecznosc: ';
  58. echo $row[3]; // agi
  59. echo '<br>';
  60. echo 'Zwinnosc: ';
  61. echo $row[4]; // dex
  62. echo '<br>';
  63. echo 'Pancerz: ';
  64. echo $row[5]; // pan
  65. echo '<br>';
  66. echo 'Zaradnosc: ';
  67. echo $row[6]; // zar
  68. echo '<br>';
  69. echo 'Inteligencja: ';
  70. echo $row[7]; // int
  71. echo '<br>';
  72.  
  73. $im = imagecreatetruecolor(300, 250) or die ('blad reg znajomek');
  74.  
  75. //ImageColorTransparent($im, false);
  76.  
  77. $x1 = '300';
  78. $x2 = '300';
  79. $y1 = '250';
  80. $y2 = '250';
  81.  
  82.  
  83. $kolortla = imagecolorallocate($im, 48, 156, 212);// kolor tła
  84. $kolor = imagecolorallocate($im, 50, 50, 50);// kolor tekstu
  85. $kolor2 = imagecolorallocate($im, 100, 100, 100);// kolor tekstu 2
  86.  
  87. ImageFill($im, $x, $y, $kolortla);
  88.  
  89. $x11 = '50'; //polozenie na osi x
  90. $x22 = '150'; //szerz
  91. $y11 = '10'; //polozenie na osi y
  92. $y22 = '5'; //wys
  93.  
  94. ImageRectangle($im, $x1, $y1, $x2, $y2, $kolor2);
  95.  
  96. echo '<br>';
  97. imagestring($im, 10, 5, 10, $nick, $kolor); //rozmiar, od lewej, od gory
  98. imagestring($im, 2, 5, 30, $klasa, $kolor3); //rozmiar, od lewej, od gory
  99. imagestring($im, 2, 5, 50, $row[0], $kolor3); //rozmiar, od lewej, od gory
  100. imagestring($im, 2, 5, 70, $row[1], $kolor3); //rozmiar, od lewej, od gory
  101. imagestring($im, 2, 5, 90, $row[2], $kolor3); //rozmiar, od lewej, od gory
  102. imagestring($im, 2, 5, 110, $row[3], $kolor3); //rozmiar, od lewej, od gory
  103. imagestring($im, 2, 5, 130, $row[4], $kolor3); //rozmiar, od lewej, od gory
  104. imagestring($im, 2, 5, 150, $row[5], $kolor3); //rozmiar, od lewej, od gory
  105. imagestring($im, 2, 5, 170, $row[6], $kolor3); //rozmiar, od lewej, od gory
  106. imagestring($im, 2, 5, 190, $row[7], $kolor3); //rozmiar, od lewej, od gory
  107. imagestring($im, 2, 5, 210, $row[8], $kolor3); //rozmiar, od lewej, od gory
  108.  
  109. $jakosc = '100';
  110.  
  111. imagepng($im,$nick . $rozsz); //jakosc tylko dla jpeg!
  112. echo '<br><img src="'. $_GET['nick'] . $rozsz . '">';
  113.  
  114. echo '<br><br><br>Link do obrazka: <br><br> <a href="http://www.xx-xx.pl/'.$_GET" target="_blank">http://www.xx-xx.pl/'.$_GET</a>['nick'].'.png';
  115.  
  116. ?>


Wszystko śmiga wyśmienicie. Lecz wyświetla się to na niebieskim prostokącie. Jak mogę wlepić swój obrazek? Ofc. dane do bazy usunąłem. Prosiłbym o podanie co będzie niepotrzebne, jak dodam swój obrazek, jakie funkcje.
thek
Chcesz własny obrazek wlepić? Zapoznaj się z biblioteką GD i funkcjami takimi jak createimagefrompng, imagecopy i kilkoma o podobnych nazwach winksmiley.jpg
GoldeNx3
  1. <?php
  2. // Create image instances
  3. $src = imagecreatefrompng('http://www.mojastrona.pl/obrazek.png');
  4. $dest = imagecreatetruecolor(80, 40);
  5.  
  6. // Copy
  7. imagecopy($dest, $src, 0, 0, 20, 13, 80, 40);
  8.  
  9. // Output and free from memory
  10. header('Content-Type: image/png');
  11. imagepng($dest);
  12.  
  13. imagedestroy($dest);
  14. imagedestroy($src);
  15. ?


Okej. Jak teraz na nim coś wpisać?
emajl22
imagettftext() winksmiley.jpg
w manualu masz wszystko objaśnione co i jak.
GoldeNx3
W manualu jest tak:

  1. <?php
  2. function LoadPNG($imgname)
  3. {
  4. /* Attempt to open */
  5. $im = @imagecreatefrompng($imgname);
  6.  
  7. /* See if it failed */
  8. if(!$im)
  9. {
  10. /* Create a blank image */
  11. $im = imagecreatetruecolor(150, 30);
  12. $bgc = imagecolorallocate($im, 255, 255, 255);
  13. $tc = imagecolorallocate($im, 0, 0, 0);
  14.  
  15. imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
  16.  
  17. /* Output an error message */
  18. imagestring($im, 1, 5, 5, 'Error loading ' . $imgname, $tc);
  19. }
  20.  
  21. return $im;
  22. }
  23.  
  24. header('Content-Type: image/png');
  25.  
  26. $img = LoadPNG('haha.gif.png');
  27.  
  28. imagepng($img);
  29. imagedestroy($img);
  30. ?>


Podmieniłem tylko swój obrazek, wrzuciłem na hosting ale pokazuje się czarny prostokąt. ;/
thek
Możliwe, że jest problem ze ścieżkądo pliku... Wywalte @ sprzed funkcji, włącz raportowanie błedów i będziemy lecieć dalej z koksem smile.gif Ogólnie co do debugu to zapoznaj się z tematem "Jak zadawać pytania?" Jest tam wiele rzeczy przydatnych dla początkujących, a pozwalających na samodzielne szukanie błędów i w razie problemów nadal, my bardziej zaawansowani, wiemy za co się złapać jeśli nam informacji dobrych dostarczysz takich jak komunikaty błędów, czego próbowaleś a nie pomogło... Im więcej mamy danych tym prościej zokalizować przyczynę błędu.
GoldeNx3
To jednak wina obrazka.. Skoro mam taki obrazek, to jak na nim teraz coś napisać? Ten sposób z tego co podałem wyżej bd działać?

@Edit:

ZROBIŁEM!!! ;D Ale nie zamykajcie, bo jutro będę kończyć to i pewnie jakiś błąd będzie. ;]

A tak poza tym..

Jak mogę zrobić, że jeżeli ktoś w polu klasa wybierze nr. "14" to na obrazku wyświetliło się jako jakaś nazwa?

Oraz teraz link tworzy w takim formacie: www.strona.pl/GoldeNx3.png jak zrobić, aby tworzyło ją w taki sposób: www.strona.pl/GoldeNx3&klasa=nr.png ?
thek
Do tego celu użyj htaccess z odpowiednią regułką. Dzięki niej zamiast wywołać się pobieranie obrazka serwer wywoła skrypt z odpowiednimi parametrami. Tak się robi w serwisach choćby zliczanie normalnie niemożliwe do uzyskania jak choćby ile razy ktoś czytał maila, który mu wysłałeś. Załączasz do maila link do obrazka. Gdy mail jest otwierany, wysyła żądanie obrazka z naszegoserwera. htaccess przekierowuje go na skrypt zliczający, ktory na sam koniec wysyła ten obrazek, by user niczego nie podejrzewał smile.gif My zliczyliśmy "klika" a user dostał obrazek. Ktoś powie, że to można zablokować i ma rację. Klienty pocztowe żądania takie z reguły blokują, ale user może na pobranie obrazków pozwolić i zazwyczaj to robi. Dzięki temu można określić popularność maila a w newsletterze jego "czytalność".
GoldeNx3
To już dla mnie czarna magia. ;( Nie da się jakoś prościej?

np. żeby link wyglądał tak:

www.strona/generator.php?nick&klasa=nr

?

Bo tego z htaccess na pewno nie ogarne, bo nawet nie rozumiem co napisałeś. ;d

Albo tego nie da się przerobić:

  1. echo '<br><img src="'. $_GET['nick'] . $rozsz . '">';


?

Kurczę, wszystko działa, tylko nie może mi generować linku z samym nickiem, bo inny user będzie go mógł zmienić. (Wchodząc w skrypt, wpisując mój nick i tylko zmienić klasę i już moja sygna się zmienia. ;/)
thek
www.strona/generator.php?nick&klasa=nr jest nieco błędny, gdyż masz nazwę atrybutu (nick), ale nie masz do niego wartości (ustawi się więc tam pustka)

Nie chcesz też zrobić www.strona/generator.php?nick=NICK&klasa=nr by nie można było łatwo edytować sygnaturki. Niestety tak się nie da z prostej przyczyny. Podajesz to jako parametry. By coś nie było edytowalne, musiałbyś uczynić to nieedytowalnym. Jak? Choćby pobierając z bazy. Rozpoznajesz unikatowy nick i pozostałe rzeczy sobie z bazy na tej podstawie pobierasz. Ktoś może więc jako nick podać swój login. Skrypt go odbierze, znajdzie wpis w bazie i dorzuci z niej potrzebne mu rzeczy. Jeśli nie chcesz czegoś by wyświetlił to dodajesz choćby kolejne parametry by modyfikowały defaultowe zachowanie skryptu lub ustalasz predefiniowane style. Przykład:

Masz w bazie: klasa, lvl, char_name, mana, sila, zrecznosc, inteligencja i domyślny konfig (tryb 1) pokazuje wszystko, drugi domyślny (tryb 2) bez atrybutów, a poszczególne parametry to mode(tryb), cl (klasa), lvl (lvl), name( char_name), mana (mana), str(siła), dex(zręczność), int(inteligencja)
zrób więc link:
www.strona/generator.php?nick=login <= domyślnie ma ustawiony tryb 1, a więc pokaże wszystko na obrazku
www.strona/generator.php?nick=login&mode=2 <= tryb 2, czyli bez atrybutów
www.strona/generator.php?nick=login&mode=2&str=true <= tryb 2 z dodatkowym wyświetlaniem atrybutu siły
www.strona/generator.php?nick=login&name=false <= tryb 1, ale bez wyświetlania nazwy postaci

Tylko jeszcze robisz zabezpieczenie by rozpoznawał 2 tryby (jeśli jest coś innego to wali defaultowy tryb 1) oraz by nie przyjmował głupot innych niż true i false dla parametrów smile.gif

TYeraz sklejasz ten link, dajesz go jako src w znaczniku IMG i voila! smile.gif
GoldeNx3
Widać, jestem zbyt głupi, aby to zrobić, albo to jest zbyt trudne. Bo nawet nie wiem jak ustawić te "tryby". ;/

Popróbuję i napiszę.

Ale inna strona ma coś takiego:

Kod
http://strona.pl/generator.php?nick=NICK&klasa=NR


I tutaj się normalnie obrazek wyświetla, z tym, że nie ma tam generatora (Po prostu trzeba stworzyć ten link za pomocą wpisania nicku i klasy)

A nie dałoby się zrobić tak, że w jednym pliku mam wszystko od łączenia z bazą, a gdy wciskam "stwórz" to przenosi mnie w inny plik i wyświetla się tylko sam obrazek?
thek
Te tryby to ustawienie "na sztywno" wewnątrz skryptu wklejania na obrazek odpowiednich danych. Przykładowo wywołanie tryb 2 to byłoby nic innego niż ustawienie w linku do wyświetlenia na obrazku klasy, poziomu i nazwy postaci, czyli
http://strona.pl/generator.php?nick=NICK&a...e&name=true
byłoby równoważne
http://strona.pl/generator.php?nick=NICK&mode=2
W pierwszej wersji w skrypcie byś zdecydował na podstawie parametrów co wyświetlić. W drugiej miałbyś jakiś domyślny tryb zdefiniowany, który sam by to ustawił smile.gif
GoldeNx3
Tak, ale problem w tym, że ja nie wiem gdzie te "tryby" mam wpisać (w jakim miejscu), jak to ma wyglądać i jak przebudować kod. ;/ Jest gdzieś jakaś strona, na której mogę o tym dokładniej poczytać?


Cytat
Nie chcesz też zrobić www.strona/generator.php?nick=NICK&klasa=nr by nie można było łatwo edytować sygnaturki.


Tak by mogło być! Mnie chodzi o to, że jak mam nick.png to inny gracz wchodząc na generator.php po wpisaniu mojego nicku i wybraniu innej klasy, to u mnie się także zmienia sygna!

Chodzi mi o to, żeby autor mógł dobrowolnie zmieniać, ale inny user już nie..
thek
Te tryby sam definiujesz sobie wewnątrz skryptu. Przykładowo:
  1. if( isset( $_GET['mode'] ) ) {
  2. switch( $_GET['mode'] ) {
  3. case '2':
  4. $co_na_obrazku = array(
  5. 'cl' => true,
  6. 'lvl' => true,
  7. 'name' => true,
  8. 'mana' => false,
  9. 'str' => false,
  10. 'dex' => false,
  11. 'int' => false
  12. );
  13. break;
  14. case '1':
  15. default:
  16. 'cl' => true,
  17. 'lvl' => true,
  18. 'name' => true,
  19. 'mana' => true,
  20. 'str' => true,
  21. 'dex' => true,
  22. 'int' => true
  23. }
  24. } else {
  25. $co_na_obrazku = array(
  26. 'cl' => true,
  27. 'lvl' => true,
  28. 'name' => true,
  29. 'mana' => true,
  30. 'str' => true,
  31. 'dex' => true,
  32. 'int' => true
  33. );
  34. }
A potem przy wkładaniu na obrzek sprawdzasz czy dany indeks ma true czy false i zależnie od tego dodajesz lub nie. Dla zmniejszenia obciążenia możesz cache'ować wynik. Innymi parametrami możesz zmieniać to zachowanie. Możesz też w panelu usera zrobić zakładkę, gdzie sobie on ustawia wszystko to i przy wywołaniu:
http://strona.pl/generator.php?nick=NICK z bazy pobiera ustawienia oraz generuje obrazek, czy też po kliknięciu Zapisz w owej zakładce generuje od razu ją i potem tylko do utworzonego obrazka linkujesz, co sprawia, że nie generujesz go za każdym razem. Pomysłów jest wiele, ale już więcej Ci nic nie powiem, bo jak widzę wyłączyłeś już myślenie i tylko czekasz na gotowca ode mnie. A takiego wała biggrin.gif
GoldeNx3
Dziękuję Ci bardzo i tak już bardzo dużo pomogłeś. ; ) Coś popróbuję, ale to już wieczorem, bo teraz zbyt dużo roboty. Wieczorem napiszę rezultat mojej pracy. ;D

Mam funkcję, ale będę mieć problem ze sprawdzeniem czy dany indeks ma true lub false. ;/ Wieczorem pokombinuję. ; D Dziękuję.

Btw. Post wyżej napisałeś takie zdanie "Nie chcesz też zrobić www.strona/generator.php?nick=NICK&klasa=nr by nie można było łatwo edytować sygnaturki." Czyli da się wyświetlić obrazek takim sposobem? Czy nie? Bo już nie czaje. ;d Mnie chodzi o to, aby inny user nie mógł zmienić komuś sygny..
thek
Obrazek da się wyświetlić takim sposobem ale w tym momencie można edytować userowi nr w sygnaturce. Ty zaś chcesz tego uniknąć. Widocznie tak zdanie napisałem, że jest mylące przy takiej ilości zaprzeczeń wewnątrz smile.gif Inaczej zapisane brzmiało by: "Nie chcesz też zrobić by LINK powodował łatwą edycję sygnaturki". To co napisałem jest naprawdę niedalekie od napisania gotowca. Wystarczy odebrać link, sprawdzić parametry i zastosować je do obrazka oraz zapisać. Na chwilę obecną góra jeszcze 15 minut pracy by to poskładać do kupy smile.gif
GoldeNx3
To się źle wyraziłem. Łatwa edycja sygnatury jak najbardziej może być! Ale takim sposobem: www.strona.pl/nick.png inny user wybierając ten sam nick i inną klasę zmieni istniejącą sygnaturkę. A mnie właśnie chodzi o to, aby w linku była dodatkowo klasa, wtedy uniknie się tego faktu. (I ten który posiada sygne będzie mógł ją prosto zmienić, ale ktoś inny nie będzie mógł zmienić innemu userowie sygny). Teraz rozumiesz? ;d

Ale wpadłem na inny pomysł! Zrobiłem tak:

  1. imagepng($im, 'nick=' . $nick . '&' . 'klasa=' . $klasa . $rozsz); //jakosc tylko dla jpeg!
  2. echo '<br><img src="'. 'nick=' . $_GET['nick'] . '&' . 'klasa=' . $_GET['klasa'] . $rozsz .'">';


Z tym, że teraz link wygląda tak: www.strona.pl/nick=NICK&klasa=NR.png da się to przekształcić do takiej właśnie zmiany, żeby od razu pobierał informacje z tych danych? Czyli tzw. "szybką zmianę sygny", coś w stylu: www.strona.pl/generator.php?nick=NICK&klasa=NR (bez .png) wiesz o co chodzi? Ale tym sposobem w/w działa i da się normalnie mieć sygne i nikt inny nie może innemu userowi jej zmienić. ;]

I jeszcze drugi problem. Jak w nicku jest znak "#" to obrazek się w ogóle nie wyświetla, jak temu zaradzić?

@EDIT:

Kurde, to normalne, że obrazki zapisują się na FTP? ;/ I jak zrobić z tą "łatwą edycją" poprzez www.strona.pl/generate.php?nick=nick&klasa=klasa? Proszę, pomóżcie mi z tym i będę szczęśliwy.

@EDIT2:

Może jeszcze inaczej. Wygenerowany link wygląda tak (Link NIE DO OBRAZKA) www.strona.pl/generate.php?nick=NICK&klasa=KLASA jak zrobić, aby był on bezpośrednim linkiem do obrazka?

Dobra. Powiedzcie mi tylko jeszcze jak zamienić z formularza klasa liczby na literki..
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.