Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zabezpieczenie nadpisywania plików
Forum PHP.pl > Forum > Przedszkole
piwib
Witam. Robie ankiete i już wszystko mam tylko jeszcze coś... Ankieta tworzy mi plik tekstowy w którym umieszczam odpowiedzi. Plik nazywa się "ODP_1" i chce aby sprawdzał czy taki plik istnieje... jeśli tak to ma stworzyć "ODP_2" i tak dalej...
Męcze się i nie wychodzi mi to poradzicie coś?
php programmer
  1. <?php
  2.  
  3. for ($i=0;$i<=999;$i++)
  4.    if (!file_exists('odp_'.$i.'.txt')) break;
  5.  
  6. $nazwa =  'odp_'.$i.'.txt';
  7.  
  8. ?>


a właściwie to jeszcze lepiej powinno być coś takiego:

  1. <?php
  2.  
  3. for ($i=0;file_exists('odp_'.$i.'.txt');$i++);
  4.  
  5. $nazwa =  'odp_'.$i.'.txt';
  6.  
  7. ?>


uwaga na haczyk - średnik zaraz po ); czyli pętla z drugiego przykładu nie ma ciała
piwib
No ok co do pętli FOR rozumiem a wytłumacz mi czy pod zmienną $nazwa będzie widoczny tytuł tego pliku? bo w programie miałem coś takiego:

<?php
$fp = fopen("ODP_1.txt", "a+");
fputs($fp, $pytanie_1);
fclose($fp);
?>

gdzie "ODP_1.txt" był tym plikiem...
sobstel
Cytat(piwib @ 2005-12-20 14:17:32)
a wytłumacz mi czy pod zmienną $nazwa będzie widoczny tytuł tego pliku?

przepraszam, ale co stoi na przeszkodzie abys sprawdzil to samemu (caly kod juz masz podany).
php programmer
$nazwa zawiera już gotową nazwę tego pliku w postaci:

odp_0.txt
odp_1.txt
odp_2.txt

.
.
.
odp_x.txt

w zalezoności od tego czy już są jakieś inne pliki o takich nazwach
pętla po prostu szuka pierwszego wolnego miejsca
piwib
Hmm badnijcie to:

  1. <?php
  2.  
  3. for ($i=0;file_exists('odp_'.$i.'.txt');$i++); // szuka wolnej nazwy pliku
  4.  
  5. $nazwa = 'odp_'.$i.'.txt'; // podporządkowywuje ją zmiennej &nazwa
  6.  
  7. ?>
  8.  
  9.  
  10. <?php 
  11. $odpowiedzi = fopen("$nazwa", "w+"); // otwiera plik o wcześniej wylosowanej nazwie &nazwa
  12. fputs($odpowiedzi, $pytanie_1); // zapisuje w pliku o nazwie zawartej w zmiennej $nazwa dane z zmiennej $pytanie_1
  13. fclose($odpowiedzi); // zamyka plik o nazwie zawartej pod zmienną $nazwa
  14. ?>



I mi sie strona wykłada... Gdzie nie widze błędu? Musze najpierw stworzyć taki plik tekstowy? Ale chyba nie ponieważ wskaźnik "w+" jeśli nie ma pliku próbuje go stworzyć... :/
v1t4n
Cytat(piwib @ 2005-12-20 16:42:29)
  1. <?php
  2. ($odpowiedzi, $pytanie_1);        // zapisuje w pliku o nazwie zawartej w zmiennej $nazwa dane z zmiennej $pytanie_1
  3. ?>

Tutaj masz blad (wszystko ma byc w jednej linii, po fputs usun akapit)

Czyli (ja zastosowalbym fwrite z przyzwyczajenia):
  1. <?php
  2. fputs ($odpowiedzi, $pytanie_1); // zapisuje w pliku o nazwie zawartej w zmiennej $nazwa dane z zmiennej $pytanie_1
  3. ?>
piwib
  1. <?php
  2.  
  3. for ($i=0;file_exists('odp_'.$i.'.txt');$i++);
  4.  
  5. $nazwa = 'odp_'.$i.'.txt';
  6.  
  7. ?>
  8.  
  9.  
  10. <?php 
  11. $odpowiedzi = fopen("$nazwa", "w+");
  12. fputs($odpowiedzi, $pytanie_1);
  13. fclose($odpowiedzi);
  14. ?>


No tam źle sie wkleiło mam tak i w 11 lini wywala błąd
(Warning: fopen("odp_0.txt", "w+") - Permission denied in /home/p_watola/storage/www/php/strona_3.php on line 17)

...?
php programmer
prawa katalogu, w którym zapisujesz te pliki
muszą być odpowiednio ustawione
na przykład 0775
piwib
Dokładnie zmieniłem prawa dostępu katalogu i już wszystko gra. Powiedź mi jeszcze jedno potrzebuje w pasku adresu URL przenieś zmienną z jednej strony do drugiej strony. Jak byś to zronił?
crash
Kolega Ci nie powie, ale ja mogę: Mamy tu świetną wyszukiwarkę, radzę z niej skorzystać...
piwib
To spróbuj ty mi pomóc :
  1. <?php
  2.  
  3. for ($i=0;file_exists('odp_'.$i.'.txt');$i++);
  4. $nazwa = 'odp_'.$i.'.txt';
  5.  
  6. ?>
  7.  
  8.  
  9. <?php 
  10.  
  11. $odpowiedzi = fopen("$nazwa", "a+");
  12. fputs($odpowiedzi, $pytanie_1);
  13. fclose($odpowiedzi);
  14.  
  15. ?>

No i tak pętla for szuka najbliższej wolnej nazwy z serii "odp_" a następnie taki plik zostaje stworzony oraz w nim zapisane odpowiedzi. Ale to mam dopiero pierwszą strone z pytaniem. Chce by ta sama nazwa pliku znajdowała się na kolejnej mojej stronie z pytaniem. Poprostu potrzebuje przenieś zmienna $nazwa. Co byś dopisał do kodu?
crash
index.php?plik=odp_1.txt
  1. <?php
  2. echo $_GET[ 'plik' ];
  3. ?>

Koniec tematu.
piwib
Źle mnie zrozumiałeś! Nie chodzi mi o przekazanie danej tylko zmiennej. Jeśli na serwerze pojawi sie już plik odp_1.txt to sie wysypie.

index.php?plik=odp_1.txt

a skąd wiesz że odp_1.txt? Chodzi mi o to iż jeśli przykładowo 3 osoby rozwiązaują ankiete w tym samym czasie aby powstały 3 różne pliki z odpowiedziami!(odpowiedzialna jest za to pętla for) Dlatego zmienna $nazwa ma w sobie aktualną stworzoną przez aktualnego użytkownika nazwę pliku. Nie wiem czy mnie rozumiesz do końca ale jeśli tak to w ramach zbliżających sie świąt możesz pomóc smile.gif

w skrócie chce przenieść z strony strona_1.php zmienną $nazwa do strona_2.php
crash
  1. <?php
  2. header( 'Location: ./strona2.php?nazwa=' . $nazwa );
  3. ?>

Więcej z tego co piszesz nie rozumiem smile.gif
piwib
No to jeszcze raz. Mam stronę strona_1.php w której mam zmienną $nazwa. Przechodząc do strony strona_2.php wypisując echo $nazwa; nie pokazuje mi się nic a chce by pokazywała się zawartość zmiennej $nazwa z strony strona_1.php ...
Jak to zrobić? Podkreślam że ręcznę wpisywanie danej do paska np strona_2.php?nazwa=dane_zmiennej_z_strona_1.php nie wchodzi w gre...
mike
@piwib widzę że zrobileś sobie prywatny kącik lamerskich pytań.
Z każdym postem poziom Twoich pytań spada.

Chcesz przenosić zmienne/dane to poczytaj o przesyłaniu zmiennych za pomocą $_POST i $_GET i o sesjach.

A poza tym @crash już Ci podał rozwiązanie, tylko nawet go nie zrozumiałeś.

Gwarantuję Ci że zakolejnego posta, którego uznam za lamerskiego i za kolejne pytanie, na które odpowiedź jest na forum (użyj wyszukiwarki) dostaniesz ostrzeżenie.
piwib
Wybacz ale każdy kiedyś startuje od zera. Tytuł forum "php dla początkujących" ewidentnie mówi iż forum dla noobów... Spoko sorry za zamieszanie ale pamiętaj że ty też kiedyś będziesz lamą na innym forum i tez Cie będą gnoić... Możecie zamknąć
sobstel
Cytat(piwib @ 2005-12-21 01:11:28)
Wybacz ale każdy kiedyś startuje od zera. Tytuł forum "php dla początkujących" ewidentnie mówi iż forum dla noobów... Spoko sorry za zamieszanie ale pamiętaj że ty też kiedyś będziesz lamą na innym forum i tez Cie będą gnoić... Możecie zamknąć

jak sam zauwazyles to forum dla początkujących, ale dostajesz tu odpowiedzi na pytania, na ktore jak dotad nie odpowiedziano albo ktorych nie mozna zbyt latwo znalezc ani w manualu ani w google, a nie na kazde pytanie jakie ci tylko przyjdzie do glowy, na kotre odpowiedz mozna znalezc w kilka minut...
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.