Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]GD2 - zapis do pliku
Forum PHP.pl > Forum > Przedszkole
politechnik
Witam! Dzięki za dotychczasowe porady. Udało się odpalić i zniwelować moje wcześniejsze problemy generuję piękne obrazy, aż się pochwalę:

Fajnie to wszystko wyszło, kody kreskowe pięknie się generują.

Ale moje pytanie brzmi. Czy mogę, jeśli tak to jak, zrobić coś na zasadzie przycisku (nacisku ;D) by zapisywać pliki do katalogu na serwerze, ale nie tak od razu, najpierw oglądacz potwierdza że mu się wygenerowany druk podoba a następnie zapisujemy go na serwerze w katalogu np. gotowce? Jakieś pomysły? Z góry dzięki za odpowiedzi. Dodam tylko jeszcze, że chcę generować ów etykiety za pomocą formularza, tekst będzie pochodził z pól formularza.
Kshyhoo
W czym problem? Przecież możesz wykorzystać instrukcje warunkowe: nie podoba się, zmieniamy; podoba się, zapisujemy. Proponuję od razu swich...

Zmień też tytuł wątki, bo ten jest niezgodny z regulaminem: musi opisywać rzeczywisty problem.
politechnik
No właśnie nie wiem jak to nawet algorytmicznie rozwiązać? Podpowiesz?
Kshyhoo
A no normalnie:
  1. switch (@strip_tags($_GET['go'])) {
  2. default:
  3. // jakiś opis
  4. break;
  5. //////////////////////////////////// KROK 1 ////////////////////////////////////
  6. case '1':
  7. // wyświetlasz formularz wyboru parametrów
  8. include('include/krok1.php');
  9. break;
  10. //////////////////////////////////// KROK 2 ////////////////////////////////////
  11. case '2':
  12. // generujesz co potrzeba
  13. include('include/krok2.php');
  14. break;
  15. //////////////////////////////////// KROK 3 ////////////////////////////////////
  16. case '3':
  17. // pokazujesz i dajesz zapisać albo wracasz wyżej
  18. include('include/krok3.php');
  19. break;
  20. }

Oczywiście, to tylko zarys.
politechnik
Ale zaraz zaraz, co to jest zmienna "go"? Co jest przed case-em??
Turson
Pomyśl trochę... Kshyhoo dał tylko wskazówkę. $_GET['go'] to przykładowa akcja z adresu np. index.php?go=1 wyświetla formularz
Przed case jest default i break
Kshyhoo
Cytat(politechnik @ 22.12.2013, 19:03:57 ) *
Ale zaraz zaraz, co to jest zmienna "go"? Co jest przed case-em??

No jakoś musisz przekazać, czy idziesz do przodu, czy się cofasz w formularzu. Oczywiście sposobów jest wiele...
politechnik
Podpowiesz mi, jak się nazywa takie "kroki" formularza? Czego szukać w google. Nie chce ryby, ale chętnie przyjmę wędkę lub chociaż przynętę. ;D
Turson
To się nazywa logiczne myślenie i gotowej recepty nie ma.
Kshyhoo
Cytat(politechnik @ 22.12.2013, 22:27:39 ) *
Podpowiesz mi, jak się nazywa takie "kroki" formularza? Czego szukać w google. Nie chce ryby, ale chętnie przyjmę wędkę lub chociaż przynętę. ;D

Dostałeś wędkę... Poczytaj o instrukcji switch. W każdym case wykonujesz jakąś operację albo includujesz plik. Skrypt powinien mieć konstrukcję modułową, umożliwiającą wykonywanie dowolnych części. Switch to taki "ładniejszy" if-elseif-else.
politechnik
Dlaczego korzystamy z: @strip_tags?
Kshyhoo
Cytat(politechnik @ 24.12.2013, 17:15:08 ) *
Dlaczego korzystamy z: @strip_tags?

Nie programuj w święta, bug się rodzi...
Wesołych Świąt...
rad11
Ale pocisk Kshyhoo smile.gif
politechnik
Ok, ogarnałem już, ale mam nowy problem, jak w kroku 2 includuję obrazek to do przeglądarki zwracam wyłącznie obrazek, nic poza obrazkiem w switcha wstawić nie mogę. Mogę jakąś podpowiedź?
Kshyhoo
Podpowiedź:
  1. //////////////////////////////////// KROK 2 ////////////////////////////////////
  2. case '3':
  3. echo"Krok 2<br />";
  4. echo "<form name='generator' action='?go=3' method='POST' onSubmit='return testujb(this);'>";
  5.  
  6. include('include/krok2.php');
  7.  
  8. echo "<input type='hidden' name='krok' value='3'>
  9. <input type='submit' name='dalej' value='Idź dalej'>
  10. </form>";
  11. break;

include('include/krok2.php'); zawiera Twój kod. To przykład, bo w tym pliku możesz zainkludować kolejny switch z następnymi "wyborami".
politechnik
Cytat(Kshyhoo @ 24.12.2013, 23:03:15 ) *
Podpowiedź:
  1. //////////////////////////////////// KROK 2 ////////////////////////////////////
  2. case '3':
  3. echo"Krok 2<br />";
  4. echo "<form name='generator' action='?go=3' method='POST' onSubmit='return testujb(this);'>";
  5.  
  6. include('include/krok2.php');
  7.  
  8. echo "<input type='hidden' name='krok' value='3'>
  9. <input type='submit' name='dalej' value='Idź dalej'>
  10. </form>";
  11. break;

include('include/krok2.php'); zawiera Twój kod. To przykład, bo w tym pliku możesz zainkludować kolejny switch z następnymi "wyborami".



include('include/krok2.php'); jeśli w tym kroku wywołam generowanie obrazka, obrazek się nie generuje. To nawet logiczne skoro, podczas generowania obrazka generuję, deklaruję, że wywołam tylko obrazek w przeglądarce.
Kshyhoo
Wszystkim się generuje a Tobie nie? Pokaż kod Twoich plików. Co ciekawsze, możesz w ten sposób przekazać parametry do inkludowanych plików...
politechnik
Ok, więc tak

krok.php
  1. <?php
  2.  
  3. $_GET['krok'];
  4.  
  5. switch (@strip_tags($_GET['krok'])) {
  6. default:
  7. break;
  8. case '1':
  9. include('krok1.php');
  10. break;
  11. case '2':
  12. echo"Krok 2<br />";
  13. echo "<form name='generator' action='?krok=3' method='POST'>";
  14.  
  15. include('krok2.php');
  16.  
  17. echo "<input type='hidden' name='krok' value='3'>
  18. <input type='submit' name='dalej' value='Idź dalej'>
  19. </form>";
  20. break;
  21.  
  22. }
  23.  
  24.  
  25.  
  26. ?>



krok1.php

  1. <?php
  2. echo '<html>
  3. <head>
  4. <title>.: Formularz druku listu poleconego :. </title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6.  
  7. </head>
  8.  
  9. <body>
  10. <h1>List polecony</h1>
  11.  
  12. <form method="post" action="krok.php?krok=2">
  13.  
  14. Numer listu: <input type="text" name="numer_przesylki" value="" size="22"/> <br/><br/>
  15.  
  16. <br/>
  17. <br/>
  18. <b>Nadawca:</b>
  19. <br/>
  20. Nazwa nadawcy L1: <input type="text" name="n_nazwa_l1" value="Przykładowy sklep internetowy" size="22"/><br/>
  21. Nazwa nadawcy L2: <input type="text" name="n_nazwa_l2" value="Linia2" size="22"/><br/>
  22. Ulica, numer / lokal: <input type="text" name="n_adres" value="Uliczna " size="23"/><br/>
  23. Kod: <input type="text" name="n_kod"/ value="00-000" size="2"> Miasto: <input type="text" name="n_miasto" value="Miasteckowo" size="21"/><br/>
  24. <br />
  25. <b>Odbiorca:</b>
  26. <br/>
  27. Nazwa odbiorcy L1: <input type="text" name="o_nazwa_l1" size="22"/><br/>
  28. Nazwa odbiorcy L2: <input type="text" name="o_nazwa_l2" size="22"/><br/>
  29. Ulica, numer / lokal: <input type="text" name="o_adres" size="23"/><br/>
  30. Kod: <input type="text" name="o_kod" size="2"/> Miasto: <input type="text" name="o_miasto" size="21"/><br/>
  31. <br/>
  32.  
  33. <input type="submit" value="Generuj"/>
  34. </form>
  35.  
  36.  
  37.  
  38. </body>
  39. </html>';
  40. ?>
  41.  


Krok2.php
  1. <?php
  2. include('php-barcode.php'); // KODY
  3.  
  4.  
  5. // Przesył danych
  6.  
  7. $_POST["numer_przesylki"];
  8. $_POST["n_nazwa_l1"];
  9. $_POST["n_nazwa_l2"];
  10.  
  11. $_POST["n_adres"];
  12. $_POST["n_kod"];
  13. $_POST["n_miasto"];
  14.  
  15. $_POST["o_nazwa_l1"];
  16. $_POST["o_nazwa_l2"];
  17. $_POST["o_adres"];
  18. $_POST["o_kod"];
  19. $_POST["o_miasto"];
  20.  
  21.  
  22.  
  23. $dane = Array();
  24. $dane['n_nazwa_l1'] = $_POST["n_nazwa_l1"];
  25. $dane['n_nazwa_l2'] = $_POST["n_nazwa_l2"];
  26. $dane['n_adres'] = $_POST["n_adres"];
  27. $dane['n_kod'] = $_POST["n_kod"];
  28. $dane['n_miasto'] = $_POST["n_miasto"];
  29.  
  30.  
  31. $dane['o_nazwa_l1'] = $_POST["o_nazwa_l1"];
  32. $dane['o_nazwa_l2'] = $_POST["o_nazwa_l2"];
  33. $dane['o_adres'] = $_POST["o_adres"];
  34. $dane['o_kod'] = $_POST["o_kod"];
  35. $dane['o_miasto'] = $_POST["o_miasto"];
  36.  
  37.  
  38. //kody
  39.  
  40. $fontSize = 10; // GD1 in px ; GD2 in point
  41. $marge = 4; // between barcode and hri in pixel // margines od tekstu
  42. $x = 200; // barcode center
  43. $y = 13; // barcode center
  44. $height = 20; // barcode height in 1D ; module size in 2D
  45. $width = 2; // barcode height in 1D ; not use in 2D
  46. $angle = 0; // rotation in degrees : nb : non horizontable barcode might not be usable because of pixelisation
  47.  
  48. $code = $_POST["numer_przesylki"]; //'(00)659007731731304756'; // barcode, of course ;)
  49. $type = 'code128';
  50.  
  51.  
  52. //Druk
  53.  
  54. $image = imagecreatetruecolor(575, 430); //deklaracja wielkości obrazka
  55. $white = imagecolorallocate($image, 255, 255, 255); // biały
  56. $black = imagecolorallocate($image, 0, 0, 0); // czarny
  57. $font = 'arial.ttf'; //deklaracja czcionki
  58.  
  59.  
  60.  
  61. imagefilledrectangle($image, 0, 0, 575, 430, $white); //tworzy tło
  62.  
  63. ImageSetThickness($image, 3); // określenie szerokości
  64. imageline($image, 5,5, 570, 5, $black); //górna
  65. imageline($image, 5, 425, 570, 425, $black); // dolna
  66. imageline($image, 5,5, 5, 425, $black); // lewa
  67. imageline($image, 570 ,5, 570, 425, $black); // lewa
  68.  
  69. imageline($image, 328, 82, 328, 425, $black); //środkowa
  70. imageline($image, 5, 82, 329, 82, $black); //górna
  71. imageline($image, 5, 253, 329, 253, $black); //dolna
  72.  
  73. //Pieczęć pocztowa
  74. imageellipse($image, 451 ,335, 75, 75, $black); // lewa
  75. imagettftext($image, 9, 0, 390, 390, $black, $font, "Podpis przyjmującego");
  76.  
  77. //Napisy główne
  78.  
  79. imagettftext($image, 19, 0, 125, 32, $black, $font, "POTWIERDZENIE NADANIA");
  80. imagettftext($image, 10, 0, 20, 52, $black, $font, "przesyłki poleconej nr:");
  81. imagettftext($image, 16, 0, 13, 105, $black, $font, "NADAWCA:");
  82. imagettftext($image, 16, 0, 13, 276, $black, $font, "ADRESAT:");
  83.  
  84. imagettftext($image, 12, 0, 349, 110, $black, $font, "Opłata ......................zł ..........gr");
  85. imagettftext($image, 12, 0, 349, 147, $black, $font, "Masa ..................kg ..............g");
  86. imagettftext($image, 12, 0, 349, 184, $black, $font, "GABARYT A B");
  87. imagettftext($image, 12, 0, 349, 220, $black, $font, "Priorytetowa");
  88. imagettftext($image, 12, 0, 349, 255, $black, $font, "Potwierdzenie odbioru");
  89.  
  90. imagettftext($image, 7, 0, 440, 420, $black, $font, "Wygenerowano automatycznie");
  91.  
  92.  
  93. //Kratki (pola)
  94.  
  95. imageline($image, 459, 158, 459, 190, $black); //środkowa
  96. imageline($image, 491, 158, 491, 190, $black); //środkowa
  97. imageline($image, 459, 158, 491, 158, $black); //środkowa
  98. imageline($image, 459, 190, 491, 190, $black); //środkowa
  99.  
  100. imageline($image, 459, 198, 459, 230, $black); //środkowa
  101. imageline($image, 491, 198, 491, 230, $black); //środkowa
  102. imageline($image, 459, 198, 491, 198, $black); //środkowa
  103. imageline($image, 459, 230, 491, 230, $black); //środkowa
  104.  
  105. imageline($image, 515, 158, 547, 158, $black); //górna
  106. imageline($image, 515, 190, 547, 190, $black); //dolna
  107. imageline($image, 515, 158, 515, 190, $black); //lewa
  108. imageline($image, 547, 158, 547, 190, $black); //prawa
  109.  
  110. imageline($image, 515, 233, 547, 233, $black); //górna
  111. imageline($image, 515, 265, 547, 265, $black); //dolna
  112. imageline($image, 515, 233, 515, 265, $black); //lewa
  113. imageline($image, 547, 233, 547, 265, $black); //prawa
  114.  
  115.  
  116.  
  117. imageline($image, 5, 82, 329, 82, $black); //górna
  118. imageline($image, 5, 253, 329, 253, $black); //dolna
  119.  
  120. // Nadawca
  121. imagettftext($image, 14, 0, 13, 150, $black, $font, $dane['n_nazwa_l1']);
  122. imagettftext($image, 14, 0, 13, 180, $black, $font, $dane['n_nazwa_l2']);
  123. imagettftext($image, 14, 0, 13, 210, $black, $font, $dane['n_adres']);
  124. imagettftext($image, 14, 0, 13, 240, $black, $font, $dane['n_kod']);
  125. imagettftext($image, 14, 0, 93, 240, $black, $font, $dane['n_miasto']);
  126.  
  127. // Adresat
  128. imagettftext($image, 14, 0, 13, 320, $black, $font, $dane['o_nazwa_l1']);
  129. imagettftext($image, 14, 0, 13, 350, $black, $font, $dane['o_nazwa_l2']);
  130. imagettftext($image, 14, 0, 13, 380, $black, $font, $dane['o_adres']);
  131. imagettftext($image, 14, 0, 13, 410, $black, $font, $dane['o_kod']);
  132. imagettftext($image, 14, 0, 93, 410, $black, $font, $dane['o_miasto']);
  133.  
  134.  
  135. function drawCross($im, $color, $x, $y){
  136. imageline($im, $x - 10, $y, $x + 10, $y, $color);
  137. imageline($im, $x, $y- 10, $x, $y + 10, $color);
  138. }
  139.  
  140. // -------------------------------------------------- //
  141. // ALLOCATE GD RESSOURCE
  142. // -------------------------------------------------- //
  143. $im = imagecreatetruecolor(400, 42);
  144. $black = ImageColorAllocate($im,0x00,0x00,0x00);
  145. $white = ImageColorAllocate($im,0xFF,0xFF,0xFF);
  146. $red = ImageColorAllocate($im,0xff,0x00,0x00);
  147. $blue = ImageColorAllocate($im,0x00,0x00,0x00);
  148. imagefilledrectangle($im, 0, 0, 400, 55, $white);
  149.  
  150. // -------------------------------------------------- //
  151. // BARCODE
  152. // -------------------------------------------------- //
  153. $data = Barcode::gd($im, $black, $x, $y, $angle, $type, array('code'=>$code), $width, $height);
  154.  
  155. // -------------------------------------------------- //
  156. // HRI
  157. // -------------------------------------------------- //
  158. if ( isset($font) ){
  159. $box = imagettfbbox($fontSize, 0, $font, $data['hri']);
  160. $len = $box[2] - $box[0];
  161. Barcode::rotate(-$len / 2, ($data['height'] / 2) + $fontSize + $marge, $angle, $xt, $yt);
  162. imagettftext($im, $fontSize, $angle, $x + $xt, $y + $yt, $blue, $font, $data['hri']);
  163. }
  164.  
  165. /////////////// koniec kodów kreskowych///
  166.  
  167. imagecopymerge($image, $im, 165, 35, 0, 0, imagesx($im), imagesy($im), 100);
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176. header("Content-type: image/png");
  177. imagePNG($image);
  178. imagedestroy($image);
  179. ?>
  180.  



No i jak teraz?

Kshyhoo
No i co ma działać, jak uruchomić nie umiesz?
  1. <a href="krok.php">home</a><br /><br />
  2.  
  3. <?php
  4.  
  5. $_GET['krok'];
  6.  
  7. switch (@strip_tags($_GET['krok'])) {
  8. default:
  9. echo "Od czegoś trzeba zacząć, skrypt sam nie ruszy... chyba, że się mylę?<br />";
  10. echo '<a href="?krok=1">wio</a>';
  11. break;
  12. case '1':
  13. include('krok1.php');
  14. break;
  15. case '2':
  16. echo"Krok 2<br />";
  17. echo "<form name='generator' action='?krok=3' method='POST'>";
  18.  
  19. include('krok2.php');
  20.  
  21. echo "<input type='hidden' name='krok' value='3'>
  22. <input type='submit' name='dalej' value='IdĹş dalej'>
  23. </form>";
  24. break;
  25.  
  26. }
  27.  
  28. ?>
sazian
nie include('krok2.php');
tylko <img src="krok2.php" />


w jakim celu robisz coś takiego
  1. $_POST["numer_przesylki"];
  2. $_POST["n_nazwa_l1"];
  3. $_POST["n_nazwa_l2"];
politechnik
  1. echo "Od czegoś trzeba zacząć, skrypt sam nie ruszy... chyba, że się mylę?<br />";
  2. echo '<a href="?krok=1">wio</a>';


Tak, ja wiem że default: musi być uzupełnione, testowo zaczynałem od krok.php?krok=1


  1. $_POST["numer_przesylki"];
  2. $_POST["n_nazwa_l1"];
  3. $_POST["n_nazwa_l2"];


przesyłam dane z formularza, więc te zmienne są niezbędne?

Więc to nie jest powód braku "WIO"

Jak wstawię <img src="krok2.php"> nie generuje się obrazek
Kshyhoo
Uruchom, tak jak ja pokazałem w ostatnio wklejonym kodzie, a ruszy smile.gif
politechnik
Nie ruszyło ;D

Kod po prostu przekopiowałem.


Na potwierdzenie screen z includowaniem:






I jak radził drugi kolega za pomocą <img src="krok2.php">


Kshyhoo
U mnie chodzi do momentu wyświetlenia obrazka, ale to tylko dlatego, że nie mam pliku php-barcode.php.
politechnik
Cytat(Kshyhoo @ 27.12.2013, 15:04:57 ) *
U mnie chodzi do momentu wyświetlenia obrazka, ale to tylko dlatego, że nie mam pliku php-barcode.php.



Cała paczka jak to wygląda u mnie: Paczka

W środku jest i czcionka i php-barcode.php
Kshyhoo
php-barcode.php zgłasza mi błędy:
Cytat
Parse error: syntax error, unexpected T_FUNCTION in ...\php-barcode.php on line 166

Po za tym:
index.php
  1. <html>
  2. <head>
  3. <title>.: Formularz druku listu poleconego :. </title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5.  
  6. </head>
  7.  
  8. <body>
  9. <h1>List polecony</h1>
  10. <a href="index.php">home</a><br /><br />
  11. <?php
  12. $_GET['krok'];
  13.  
  14. switch (@strip_tags($_GET['krok'])) {
  15. default:
  16. echo "Od czegoś trzeba zacząć, skrypt sam nie ruszy... chyba, że się mylę?<br />";
  17. echo '<a href="?krok=1">wio</a>';
  18. break;
  19. case '1':
  20. ?>
  21. <form method="post" action="index.php?krok=2">
  22. Numer listu: <input type="text" name="numer_przesylki" value="" size="22"/> <br/><br/><br/><br/>
  23. <b>Nadawca:</b>
  24. <br/>
  25. Nazwa nadawcy L1: <input type="text" name="n_nazwa_l1" value="Przykładowy sklep internetowy" size="22"/><br/>
  26. Nazwa nadawcy L2: <input type="text" name="n_nazwa_l2" value="Linia2" size="22"/><br/>
  27. Ulica, numer / lokal: <input type="text" name="n_adres" value="Uliczna " size="23"/><br/>
  28. Kod: <input type="text" name="n_kod"/ value="00-000" size="2"> Miasto: <input type="text" name="n_miasto" value="Miasteckowo" size="21"/><br/>
  29. <br />
  30. <b>Odbiorca:</b>
  31. <br/>
  32. Nazwa odbiorcy L1: <input type="text" name="o_nazwa_l1" size="22"/><br/>
  33. Nazwa odbiorcy L2: <input type="text" name="o_nazwa_l2" size="22"/><br/>
  34. Ulica, numer / lokal: <input type="text" name="o_adres" size="23"/><br/>
  35. Kod: <input type="text" name="o_kod" size="2"/> Miasto: <input type="text" name="o_miasto" size="21"/><br/>
  36. <br/>
  37. <input type='hidden' name='krok' value='2'>
  38. <input type="submit" value="Generuj"/>
  39. </form>
  40. <?php
  41. break;
  42. case '2':
  43. echo"Krok 2<br />";
  44. echo '<img src="krok2.php" />';
  45. break;
  46. }
  47. ?>
  48. </body>
  49. </html>

I tyle. Po co 500 plików zawierających te same dane?
Co do krok2.php (czyli identyczny z polecony.php) działał do momentu dołączenia kodów kreskowych i nadal działa. Szukaj problemu tam.
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.