Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapis danych do pliku.
KoPcIu
post 11.11.2008, 16:38:48
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 23.10.2008

Ostrzeżenie: (0%)
-----


Witam! Znalazłem w sieci prosty kod, do zapisu danych do pliku z formularza, zmodyfikowałem go do moich potrzeb. Lecz mam problem ponieważ nie wiem jak zrobić aby do pliku nie zostały już dodane ponowne dane. Aktualny kod zapisuje dane do pliku jednego, zmodyfikowałem go że zapisuje dane o danej nazwie a więc:


$file = "$imie$kreska$nazwisko.ini";

chcę zrobić aby pliku o nazwie Jan_Kowalski.ini nie dało się ponownie zapisać.
Aktualny kod jeśli w formularzu poda się takie same dane, zapisuje dane jeszcze raz w tym pliku. Jak to zmienic. Oto kod który modyfikowałem:

Kod
<?php
/*********************************************
* plik formularz.php
*********************************************/

$pole1 = trim($_POST['pole1']);
$pole2 = trim($_POST['pole2']);

if(empty($pole1) and empty($pole2)) {
    
// prosty formularz zawierający dwa pola
echo '<form action="" method="post">
<input type="text" name="pole1" style="width: 200px;" /><br />
<textarea name="pole2" style="width: 200px; height: 100px;">
</textarea><br />
<input type="submit" value="Zapisz" />
</form>';
}
else {
    
    // dane pochodzące z formularza
    $dane = $pole1."`".$pole2."\n";
    // przypisanie zmniennej $file nazwy pliku
    $file = "baza.txt";
    // uchwyt pliku, otwarcie do dopisania
    $fp = fopen($file, "a");
    // blokada pliku do zapisu
    flock($fp, 2);
    // zapisanie danych do pliku
    fwrite($fp, $dane);
    // odblokowanie pliku
    flock($fp, 3);
    // zamknięcie pliku
    fclose($fp);
    
    echo "Dane zostały zapisane!<br />";
    echo "<a href=\"podglad.php\">Zobacz wpisane dane</a>";
}

?>


Proszę o pomoc.

Ten post edytował KoPcIu 11.11.2008, 16:41:07
Go to the top of the page
+Quote Post
l0ud
post 11.11.2008, 17:08:03
Post #2





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

Ostrzeżenie: (0%)
-----


W swojej modyfikacji, zamiast:
  1. <?php
  2. $file = "$imie$kreska$nazwisko.ini";
  3. ?>


daj

  1. <?php
  2. $file = $imie.'_'.$nazwisko.'.ini';
  3. if (file_exists($file)) {
  4.    $i=2;
  5.    while(file_exists($imie.'_'.$nazwisko.'_'.$i.'.ini')) $i++;
  6.    $file = $imie.'_'.$nazwisko.'_'.$i.'.ini';
  7. }
  8. ?>


Jeżeli coś się powtórzy, pojawi się nowy plik z dopiskiem _2 _3 itd.


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
KoPcIu
post 11.11.2008, 21:16:20
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 23.10.2008

Ostrzeżenie: (0%)
-----


Oczywiście pomógł winksmiley.jpg ale bardziej by mi zależało na, komunikacie wybrany login jest już zajęty. Jeśli ktoś by wiedział jak to zrobić bardzo bym prosił winksmiley.jpg jeśli nie to pozostaje wykorzystać kod podany wyżej winksmiley.jpg
Go to the top of the page
+Quote Post
Kildyt
post 11.11.2008, 21:20:43
Post #4





Grupa: Zarejestrowani
Postów: 869
Pomógł: 53
Dołączył: 20.10.2003
Skąd: Przeworsk

Ostrzeżenie: (0%)
-----


Najpierw sprawdź, czy plik o podanej nazwie istnieje. Jeżeli tak to wyskakuje komunikat, jeżeli nie to tworzy plik.

  1. <?php
  2.  
  3. if (!@file_exists($file) {
  4.    // Plik nie istnieje, możesz tworzyć
  5. } else {
  6.    echo 'Niestety, dany login jest już zajęty! Spróbuj podać inny.';
  7. }
  8.  
  9. ?>


Kod powinien działać.

Ten post edytował Kildyt 11.11.2008, 21:23:09


--------------------
Go to the top of the page
+Quote Post
KoPcIu
post 11.11.2008, 21:33:36
Post #5





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 23.10.2008

Ostrzeżenie: (0%)
-----


Niestety czytając powyższy post, kod rozumiem lecz mam problem z umieszczeniem tego kodu ;(
Go to the top of the page
+Quote Post
Kildyt
post 12.11.2008, 14:33:41
Post #6





Grupa: Zarejestrowani
Postów: 869
Pomógł: 53
Dołączył: 20.10.2003
Skąd: Przeworsk

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3. $file = $imie.'_'.$nazwisko.'.ini'; // Nazwa pliku
  4. $text = 'zawartość pliku'; // Zawartość pliku
  5.  
  6. if (!@file_exists($file) { // Sprawdzamy, czy podany plik istnieje
  7.   if (@is_writable($file)) { // Sprawdzamy, czy można go zapisać
  8.       if ($fopen = fopen($file, "w")) { // Otwieramy plik z prawami do zapisu (zawartość zostanie nadpisana), jeżeli nie istnieje to próbuje go utworzyć
  9.            if (fwrite($fopen, $text)) { // Zapisujemy plik wraz z jej zawartością
  10.                fclose($fopen); // Zamykamy wskaźnik pliku
  11.            }
  12.        }
  13.   } else {
  14.       echo 'Wystąpił błąd! Pliku nie można zapisać!';
  15.   }
  16. } else {
  17.   echo 'Niestety, dany login jest już zajęty! Spróbuj podać inny.';
  18. }
  19.  
  20. ?>


--------------------
Go to the top of the page
+Quote Post
KoPcIu
post 13.11.2008, 17:15:45
Post #7





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 23.10.2008

Ostrzeżenie: (0%)
-----


Zacznijmy od początku winksmiley.jpg Twój pierwsze kod był dobry tylko brakowało mu ) i nie wiedziałem jak na niego patrzeć winksmiley.jpg gdy przeslałeś mi kod zrozumiałem o co chodzi, niestety Twój kod nie chciał mi działać, a więc zrobiłem to sam ale na trochę innej zasadzie ale efekt ten sam winksmiley.jpg wszystko działa jak należy winksmiley.jpg Wielkie dzięki exclamation.gif

Mam jeszcze jeden problem dopiero teraz go zauważyłem:

Mój kod na wysyłanie danych do pliku wygląda następująco:

Kod
    // przypisanie zmniennej $file nazwy pliku
    $file = $imie.'_'.$nazwisko.'.ini'; // Nazwa pliku
    if (!@file_exists($file)) {
    // uchwyt pliku, otwarcie do dopisania
    $fp = fopen($file, "a");
    // blokada pliku do zapisu
    flock($fp, 2);
    // zapisanie danych do pliku
    fwrite($fp, $postac);
    // odblokowanie pliku
    flock($fp, 3);
    // zamknięcie pliku
    fclose($fp);

} else {
   echo 'Niestety, dany login jest już zajęty! Spróbuj podać inny.';
}

   echo "Dane zostały zapisane poprawnie!<br />";
    
}


Tylko jest problem taki że te dane:
echo "Dane zostały zapisane!<br />";
wyświetlają się zawsze, nawet gdy wyskakuje błąd że podany login jest zajęty, wiem że trzeba to wstawić w odpowiednie miejsce w kodzie tylko że ja nie wiem gdzie... Jestem początkujący winksmiley.jpg

PS ta ostatnia klamra to zamyka klamrę, która znajduje się wyżej w kodzie winksmiley.jpg Nie wstawiałem całego kodu ponieważ to zbędne, bo tylko o te linijki mi chodzi winksmiley.jpg
Go to the top of the page
+Quote Post
l0ud
post 13.11.2008, 17:54:16
Post #8





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

Ostrzeżenie: (0%)
-----


Zmień położenie drugiego echo na zaraz po fclose();


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
KoPcIu
post 13.11.2008, 19:37:27
Post #9





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 23.10.2008

Ostrzeżenie: (0%)
-----


Oczywiście wszystko działa jak należy, pomógł winksmiley.jpg
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 15:00