Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapis danych do pliku.
Forum PHP.pl > Forum > PHP
KoPcIu
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.
l0ud
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.
KoPcIu
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
Kildyt
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ć.
KoPcIu
Niestety czytając powyższy post, kod rozumiem lecz mam problem z umieszczeniem tego kodu ;(
Kildyt
  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. ?>
KoPcIu
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
l0ud
Zmień położenie drugiego echo na zaraz po fclose();
KoPcIu
Oczywiście wszystko działa jak należy, pomógł winksmiley.jpg
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.