Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kopiowanie pliku i małe zmiany
Forum PHP.pl > Forum > PHP
dnawrot
Witam,

Mam taki skrypt, który wyświetla w tabeli pliki graficzne. I chciałbym, żeby następna strona galerii już była generowana przez skrypt, z niewielkimi, acz istotnymi zmianami. Chodzi o tablicę, która jest odpowiedzialna za nazwy plików oraz ich (count) ilość. Poniżej zamieszczam kod wraz z komentarzami (będzie łatwiej wytłumaczyć).


  1. <?
  2.  
  3. //lista plików na srwerze w katalogu images
  4.  
  5. $dir=opendir('./images'); 
  6.  
  7.  
  8. $file_list=" "; 
  9. while($file_name=readdir($dir)) 
  10. { 
  11. if(($file_name!=".")&&($file_name!="..")) 
  12. { 
  13. $file_list.=" $file_name"; 
  14. } 
  15. } 
  16. $file_list.=""; closedir($dir); 
  17.  
  18. //umieszczenie w tablicy nazw plików z kat. images
  19.  
  20. $dupa = explode(" ", $file_list);
  21.  
  22.  
  23. // tutaj zaczyna się generowanie tabeli wypełnianej plikami graficznymi
  24.  
  25. echo "<center><table border='0'><p class='paragraph'>";
  26.  
  27. for ($index = 2; $index < count($dupa); $index++) 
  28.  {
  29. if ($index > 17) {
  30.  
  31.  
  32.  
  33. /* tutaj natomiast rozpoczyna się tworzenie pliku (kopiowanie) i chciałbym żeby w nowym pliku pętla wyglądała nieco inaczej, mianowicie ż
    eby zaczynała się od pliku 17 i konczyła na 32, a poza tym żeby do tych poniższyc
    h warunków odnośnie wstawiania znacznika tr również było dodawane 16. Jak to zrob
    ić?*/
  34.  
  35.  
  36. $aCurBasePath = dirname( $PATH_TRANSLATED );
  37. $aNewName = "gallery".$index.".php" . $thefile;
  38. $thefile = "gallery.php";
  39.  
  40. if (file_exists($aNewName)) 
  41. {
  42.  echo "<a href='".$aNewName."'><center>Następna strona</center></a><br><br>"; 
  43. }
  44.  else
  45. {
  46.  
  47. copy ($thefile, $aNewName );
  48.  echo "<a href='".$aNewName."'><center>Następna strona</center></a><br><br>";
  49.  
  50. }
  51.  
  52. break;
  53.  
  54. }
  55.  
  56.  
  57.  
  58.  
  59. else if ($index == 2 || $index == 6 || $index == 10 || $index == 14)
  60.  {
  61.  
  62. echo "<tr>";
  63. echo "<td align='center'>$dupa[$index]<br><a href = 'images/".$dupa[$index]."'><img border = '0' src = 'images/".$dupa[$index]."' width = '100' height = '75'></a> <form method='post' action = 'del.php'><input type = 'submit' name = '".$dupa[$index]."'></form> <br></td>";
  64.  
  65.  }
  66.  
  67.  
  68. else if ($index == 6 || $index == 10 || $index == 14 || $index == 18)
  69.  
  70.  {
  71.  
  72.  
  73. echo "<td align='center'>$dupa[$index]<br><a href = 'images/".$dupa[$index]."'><img border = '0' src = 'images/".$dupa[$index]."' width = '100' height = '75'></a> <form method='post' action = 'del.php'><input type = 'submit' name = '".$dupa[$index]."'></form> <br></td>";
  74.  
  75. echo "</tr>";
  76.  
  77.  }
  78.  
  79.  
  80. else if ($index != 2 || $index != 6 || $index != 10 || $index != 14)
  81.  
  82.  {
  83.  
  84.  
  85. echo "<td align='center'>$dupa[$index]<br><a href = 'images/".$dupa[$index]."'><img border = '0' src = 'images/".$dupa[$index]."' width = '100' height = '75'></a> <form method='post' action = 'del.php'><input type = 'submit' name = '".$dupa[$index]."'></form> <br></td>";
  86.  
  87.  
  88.  }
  89.  
  90.  
  91.  
  92. } 
  93.  
  94. //koniec petli
  95.  
  96. ?>

poprawiam
---
nospor





A ponadto może jak już proszę o pomoc, to powiedzcie mi jak zrobić link lub zwykły input, który byłby odpowiedzialny za usuwanie konkretnego zdjęcia (tego pod którym input się znajduje)questionmark.gif? To też mi nie działa tak jak trzeba.


Dzięki z góry za odpowiedzi.

Jak coś to cały kod (skrypt znajduje się tutaj)


http://www.dnawrot.webas.pl/php/gallery.php

Pozdrawiam
dnawrot
Ludvik
Dodawanie kolejnych nazw plików do stringa oddzielonych spacją to nie jest najlepszy pomysł... Najlepiej od razu je do tabeli dodaj.
  1. <?php
  2. $files[] = $file_name;
  3. ?>

Usuwanie to tylko znajomość htmla...
Link:
  1. <a href="usun.php?id=x">link</a>

Przycisk:
  1. <form action="usun.php" method="get">
  2. <input type="hidden" name="id" value="x" />
  3. </form>

W obu przypadkach x jest identyfikatorem lub nazwą zdjęcia, które chcesz usunąć. W skrypcie usun.php będziesz miał zmienną $_GET['id']. Druga metoda pozwala na przesłanie POST-em. Uważaj na te zmienne, bo to częsty błąd nie sprawdzać wejścia... Zawsze trzeba je sprawdzić...
dnawrot
dobra dzięki, usuwanie działa jak należy, ale nie wiem za bardzo o co chodzi z tym tworzeniem pliku, prosiłbym trochę jaśniej, bo ciemny jestem z php

pozdrawiam
Ludvik
Chodziło mi o to, że trochę przekombinowałeś z wydobywaniem nazw plików. Ty robisz to tak:
  1. <?php
  2. $file_list=" "; 
  3. while($file_name=readdir($dir)) 
  4. { 
  5. if(($file_name!=".")&&($file_name!="..")) 
  6. { 
  7. $file_list.=" $file_name"; 
  8. } 
  9. } 
  10. $file_list.=""; closedir($dir); 
  11.  
  12. //umieszczenie w tablicy nazw plików z kat. images
  13.  
  14. $dupa = explode(" ", $file_list);
  15. ?>

Pomijając nazwę tablicy z nazwami plików i to, że explode wypluje tablicę z dwoma pierwszymi elementami pustymi, oraz to, że nazwy plików zawierające spacje rozwalą tablicę, to łatwiej i szybciej od razu nazwy umieszczać w tablicy.
  1. <?php
  2. $fileNames = array()
  3. while ($fileName = readdir($dir)) {
  4. if ($fileName != '.' && $fileName != '..') {
  5. $fileNames[] = $fileName;
  6. }
  7. }
  8. ?>


W rezultacie masz tablicę $fileNames zawierającą te same dane, ale kod jest pozbawiony błędów, szybszy i czytelniejszy.
dnawrot
Dzięki za zwrócenie uwagi, poprawię to. Ale czy możesz mi powiedzieć jak rozwiązać problem z tworzeniem nowych plików, a w zasadzie kopiowaniem plików php? A poza tym jeszcze jedna rzecz mi przyszła na myśl. W momencie przechodzenia do następnej strony galerii nie tylko musi być tworzona następna strona .php, ale jeśli okaże się że nie ma więcej plików to następna, która została stworzona przy ostatnim wywoływaniu skryptu musi być usunięta. Nie wiem czy dobrze mnie zrozumiałeś. Ponadto, przydałoby się aby przy ostatniej stronie wyświetlany był tylko link "poprzednia strona", a nie "poprzednia || następna". Dzięki z góry za odpowiedź. Pozdrawiam
dnawrot
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.