Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Generowanie listy w zaleznosci od ilości przesłanych elementów
Forum PHP.pl > Forum > PHP
BatGraf
Cześć

Borykam się mimo niedzieli - wiem, że z pierdoła, ale za diabła nie mogę tego zrobić.
Dlatego bardzo proszę o kopniaka we własciwym kierunku smile.gif Może być google, ale podpowiedzcie czego szukać, bo poopadało mi już wszystko biggrin.gif

PROBLEM/ CEL:

Mam formularz - 10 pól gdzie bedzie wpisywany adres obrazka. W efekcie ma być wygenerowana lista. I tu warunek:

Jeśli wypełnione są do 5 pól

  1. <ul>
  2. <li>obrazek nr1</li>
  3. <li>obrazek nr2</li>
  4. <li>obrazek nr3</li>
  5. <li>obrazek nr4</li>
  6. <li>obrazek nr5</li>
  7. </ul>



Jeśli wypełnione wiecej niż 5 pól

  1. <ul>
  2. <li>obrazek nr1</li>
  3. <li>obrazek nr2</li>
  4. <li>obrazek nr3</li>
  5. <li>obrazek nr4</li>
  6. <li>obrazek nr5</li>
  7. </ul>
  8.  
  9. <ul>
  10. <li>obrazek nr6</li>
  11. <li>obrazek nr7</li>
  12. <li>obrazek nr8</li>
  13. <li>obrazek nr9</li>
  14. <li>obrazek nr10</li>
  15. </ul>

Zrobiłem kulawo bo kulawo, ale PRAWIE działa:

plik "start.php"

  1. <form id="form1" name="form1" method="get" action="raz.php">
  2. <label><input type="text" name="raz" id="textfield" /></label>
  3. <label><input type="text" name="dwa" id="textfield" /></label>
  4. <label><input type="text" name="trzy" id="textfield" /></label>
  5. <label><input type="text" name="cztery" id="textfield" /></label>
  6. <label><input type="text" name="piec" id="textfield" /></label>
  7. <label><input type="text" name="szesc" id="textfield" /></label>
  8. <label><input type="text" name="siedem" id="textfield" /></label>
  9. <label><input type="text" name="osiem" id="textfield" /></label>
  10. <label><input type="text" name="dziewiec" id="textfield" /></label>
  11. <label><input type="text" name="dziesiec" id="textfield" /></label>
  12. <input name="" type="submit" />
  13. </form>


plik "raz.php"

  1. <?php
  2.  
  3. $raz = "$_GET[raz]";
  4. $dwa = "$_GET[dwa]";
  5. $trzy = "$_GET[trzy]";
  6. $cztery = "$_GET[cztery]";
  7. $piec = "$_GET[piec]";
  8. $szesc = "$_GET[szesc]";
  9. $siedem = "$_GET[siedem]";
  10. $osiem = "$_GET[osiem]";
  11. $dziewiec = "$_GET[dziewiec]";
  12. $dziesiec = "$_GET[dziesiec]";
  13.  
  14.  
  15.  
  16. $dane = "$raz\n$dwa\n$trzy\n$cztery\n$piec\n$szesc\n$siedem\n$osiem\n$dziewiec\n$dziesiec\n";
  17. $file = "pliczek.txt";
  18. $fp = fopen($file, "w");
  19. flock($fp, 2);
  20. fwrite($fp, $dane);
  21. flock($fp, 3);
  22. fclose($fp);
  23.  
  24. $tablica = file("pliczek.txt");
  25.  
  26. $elementy=count($tablica);
  27. // liczymy liczbę elementów w tablicy
  28. echo $elementy;
  29. echo "<br />";
  30. // wyświetlamy ilość elementów, wynik: 2
  31.  
  32. if($elementy<=5)
  33. {
  34. echo "<ul>";
  35. echo "<li>".$tablica[0]."</li>";
  36. echo "<li>".$tablica[1]."</li>";
  37. echo "<li>".$tablica[2]."</li>";
  38. echo "<li>".$tablica[3]."</li>";
  39. echo "<li>".$tablica[4]."</li>";
  40. echo "</ul>";
  41. }
  42. else
  43. {
  44. echo "<ul>";
  45. echo "<li>".$tablica[0]."</li>";
  46. echo "<li>".$tablica[1]."</li>";
  47. echo "<li>".$tablica[2]."</li>";
  48. echo "<li>".$tablica[3]."</li>";
  49. echo "<li>".$tablica[4]."</li>";
  50. echo "</ul>";
  51.  
  52. echo "<ul>";
  53. echo "<li>".$tablica[5]."</li>";
  54. echo "<li>".$tablica[6]."</li>";
  55. echo "<li>".$tablica[7]."</li>";
  56. echo "<li>".$tablica[8]."</li>";
  57. echo "<li>".$tablica[9]."</li>";
  58. echo "</ul>";
  59. }
  60.  
  61.  
  62.  
  63.  
  64. ?>



"Prawie" bo do pliku txt zapisuje z pustymi zmiennymi i to sypie wszystko bo i tak czyta że jest 10 wierszy :|

Po za tym wybiegam krok naprzód i jesli liste zrobię tak: echo "<li>".$tablica[9]."</li>"; to wygeneruje mi np 6 obrazków - ok i 4 obrazki puste.

Proszę - pomóżcie tempakowi smile.gif
_Borys_
Najprościej usunąć puste elementy tablicy poprzez array_filter, przykład:
  1. $a1 = array('1','','2','3');
  2. $a2 = array_filter($a1);
  3. print_r($a2);

Można też sprawdzać każdy element tablicy przed wyświetleniem czy jest pusty czy nie, a jeśli pusty to pominąć wyświetlanie. Sprawdzamy poprzez empty lub poprzez true or false.
Usuwanie pustych elementów tablicy
minolone
A nie łatwiej przesłać to jako tablice przez POST ?
  1. <form id="form1" name="form1" method="post" action="raz.php">
  2. <label><input type="text" name="plik[]" id="textfield" /></label>
  3. <label><input type="text" name="plik[]" id="textfield" /></label>
  4. <label><input type="text" name="plik[]" id="textfield" /></label>
  5. <label><input type="text" name="plik[]" id="textfield" /></label>
  6. <label><input type="text" name="plik[]" id="textfield" /></label>
  7. <label><input type="text" name="plik[]" id="textfield" /></label>
  8. <label><input type="text" name="plik[]" id="textfield" /></label>
  9. <label><input type="text" name="plik[]" id="textfield" /></label>
  10. <label><input type="text" name="plik[]" id="textfield" /></label>
  11. <label><input type="text" name="plik[]" id="textfield" /></label>
  12. <input name="" type="submit" />
  13. </form>

i odebrać tak?
bardzo prosty przykład
  1. /* zakomentowane
  2. $raz = "$_GET[raz]";
  3. $dwa = "$_GET[dwa]";
  4. $trzy = "$_GET[trzy]";
  5. $cztery = "$_GET[cztery]";
  6. $piec = "$_GET[piec]";
  7. $szesc = "$_GET[szesc]";
  8. $siedem = "$_GET[siedem]";
  9. $osiem = "$_GET[osiem]";
  10. $dziewiec = "$_GET[dziewiec]";
  11. $dziesiec = "$_GET[dziesiec]";
  12.  */
  13.  
  14. $dane = null;
  15. foreach ($_POST['plik'] as $val => $key) {
  16. if ($key != null) {
  17. $dane .= $key . "\n";
  18. }
  19. }

Resztę odbieraj tak jak odbierasz tylko sprawdzaj jeszcze ile masz przesłanych elementów i na ich podstawie stwórz sobie listę. Niema sensu tworzyć 5 jak ktoś prześle 1 i tak samo 10 jak ktoś prześle 6. Co do samego początku sprawdzaj jeszcze czy tablica przesłana przez POST zawiera jakieś elementy.
Pozdrawiam
BatGraf
super, to mi bardzo pomogło. Masz cierpliwość, żeby wytłumaczyć jak to działa? smile.gif
Tzn ten kawałek:

  1. $dane = null;
  2. foreach ($_POST['plik'] as $val => $key) {
  3. if ($key != null) {
  4. $dane .= $key . "\n";
  5. }
  6. }



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.