2013-02-21 12 views
11

Szukałem na tej stronie odpowiedzi, ale nie mogłem jej znaleźć.Pisz plik PHP od wejścia do txt

Mam formularz i chciałbym, aby zawartość danych wejściowych została zapisana w pliku tekstowym. Aby było to proste, napisałem prosty formularz i skrypt, ale wciąż mam do czynienia z pustą stroną. Oto co mam

<html> 
<head> 
    <title></title> 
</head> 
<body> 
    <form> 
     <form action="myprocessingscript.php" method="post"> 
     <input name="field1" type="text" /> 
     <input name="field2" type="text" /> 
     <input type="submit" name="submit" value="Save Data"> 
    </form> 
    <a href='data.txt'>Text file</a> 
</body> 

i tu jest mój plik PHP

<?php 
$txt = "data.txt"; 
$fh = fopen($txt, 'w+'); 
if (isset($_POST['field1']) && isset($_POST['field2'])) { // check if both fields are set 
    $txt=$_POST['field1'].' - '.$_POST['field2']; 
    file_put_contents('data.txt',$txt."\n",FILE_APPEND); // log to data.txt 
    exit(); 
} 
    fwrite($fh,$txt); // Write information to the file 
    fclose($fh); // Close the file 
    ?> 
+1

Does 'myprocessingscript.php' produkować wszelkie dalsze wyjście? Jeśli twój drugi fragment to cały skrypt PHP, to pusta strona jest tym, co powinieneś otrzymać, ponieważ nie generujesz żadnych wyników. – acme

+0

Również jest to normalne, że dostajesz pustą stronę, nie jesteś 'echo()' cokolwiek do klienta. – Floby

Odpowiedz

33

Formularz powinien wyglądać następująco:

<form action="myprocessingscript.php" method="POST"> 
    <input name="field1" type="text" /> 
    <input name="field2" type="text" /> 
    <input type="submit" name="submit" value="Save Data"> 
</form> 

i PHP

<?php 
if(isset($_POST['field1']) && isset($_POST['field2'])) { 
    $data = $_POST['field1'] . '-' . $_POST['field2'] . "\n"; 
    $ret = file_put_contents('/tmp/mydata.txt', $data, FILE_APPEND | LOCK_EX); 
    if($ret === false) { 
     die('There was an error writing this file'); 
    } 
    else { 
     echo "$ret bytes written to file"; 
    } 
} 
else { 
    die('no post data to process'); 
} 

napisałem do /tmp/mydata.txt ponieważ w ten sposób mogę teraz dokładnie gdzie to jest. przy użyciu data.txt zapisuje do tego pliku w bieżącym katalogu roboczym, o którym nic nie wiem w twoim przykładzie.

file_put_contents otwiera, zapisuje i zamyka pliki dla Ciebie. Nie zadzieraj z tym.

Dalsze czytanie: file_put_contents

+0

Zmieniłem go z powrotem na" data.txt ", ale reszta jest doskonała – user2094841

+0

Na współdzielonym hoście, gdzie nie masz dostępu do/tmp, gdzie umieścić plik mydata.txt?Moja struktura katalogów to ~/www-root/ – cryptic0

+0

Naprawdę doceniam czas spędzony tutaj, Floby. To naprawdę eleganckie rozwiązanie i pozwoliło mi wyrzucić mnóstwo skryptów wymaganych przez zewnętrzne procesory, takie jak dostępne z wtyczkami do WordPressa. :) – Nathan

5

Problemy masz są ze względu na dodatkowe <form> masz, że dane idzie w GET metodzie i uzyskujesz dostęp do danych w PHP przy użyciu POST.

<body> 
<!--<form>--> 
    <form action="myprocessingscript.php" method="POST"> 
+1

+1 za oko orła: D – acme

+0

@acme welcome. :) –

0

Możliwym rozwiązaniem:

<?php 
$txt = "data.txt"; 
if (isset($_POST['field1']) && isset($_POST['field2'])) { // check if both fields are set 
    $fh = fopen($txt, 'a'); 
    $txt=$_POST['field1'].' - '.$_POST['field2']; 
    fwrite($fh,$txt); // Write information to the file 
    fclose($fh); // Close the file 
} 
?> 

Byłaś zamykając skrypt przed zamknięciem de pliku.

0

Jeśli używasz file_put_contents, nie musisz robić fopen -> fwrite -> fclose, to file_put_contents robi to za ciebie. Powinieneś również sprawdzić, czy serwer ma prawa zapisu w katalogu, w którym próbujesz zapisać swój plik "data.txt".

W zależności od wersji PHP (jeśli jest stara) możesz nie mieć funkcji file_get/put_contents. Sprawdź swój dziennik serwera WWW, czy pojawił się błąd podczas wykonywania skryptu.

+0

Zauważyłem, że działa, jeśli uruchomię go z administratorem na serwerze, w jaki sposób mogę zmienić prawa? – user2094841

+0

Jeśli twoim serwerem WWW jest na przykład apache: 'chown -R apache: apache dir_where_you_create_the_file' – Naryl

Powiązane problemy