2013-02-21 17 views
11

Ho cercato intorno a questo sito per una risposta, ma riusciva a trovare alcuna.PHP file di scrittura da input per txt

Ho una forma e mi piacerebbe ottenere il contenuto dell'ingresso scritta in un file txt. Per renderlo semplice, ho appena scritto un semplice modulo e uno script, ma continua a trovarmi una pagina vuota. Ecco quello che ho ottenuto

<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> 

e qui è il mio file 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

fa 'myprocessingscript.php' produce alcun ulteriore uscita? Se il secondo frammento è l'intero script PHP, allora una pagina vuota è ciò che dovresti ottenere poiché non stai generando alcun output. – acme

+0

Inoltre è normale che si ottenga una pagina vuota, non si 'echo()' si investa qualcosa sul client. – Floby

risposta

33

Il modulo dovrebbe essere simile a questo:

<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> 

e il 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'); 
} 

ho scritto a /tmp/mydata.txt perché in questo modo io ora esattamente dove è. usando data.txt scrive su quel file nella directory di lavoro corrente che non conosco nel tuo esempio.

file_put_contents apre, scrive e chiude i file per voi. Non scherzare.

Ulteriori approfondimenti: file_put_contents

+0

Ho cambiato di nuovo in 'data.txt' ma il resto è perfetto – user2094841

+0

Su un host condiviso, dove non hai accesso a/tmp, dove posizioni il mydata.txt?La mia struttura di directory è ~/www-root/ – cryptic0

+0

Apprezzo davvero il tempo che hai passato qui, Floby. Questa è una soluzione davvero elegante e mi ha permesso di abbandonare una tonnellata di script richiesti da processori di moduli di terze parti, come quelli disponibili con i plugin di WordPress. :) – Nathan

5

i problemi che hai sono a causa del più <form> si dispone, che i dati va in GET metodo, e si sta accedendo ai dati in PHP utilizzando POST.

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

+1 per il vostro occhio d'aquila: D – acme

+0

@acme benvenuto. :) –

0

Una possibile soluzione:

<?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 
} 
?> 

Si stavano chiudendo lo script prima della chiusura de file.

0

Se si utilizza file_put_contents non è necessario eseguire un fopen -> fwrite -> fclose, il file_put_contents fa tutto ciò per te. È inoltre necessario verificare se il server Web ha i diritti di scrittura nella directory in cui si sta tentando di scrivere il file "data.txt".

A seconda della versione di PHP (se è vecchio) si potrebbe non avere le file_get/put_contents funzioni. Controlla il log del tuo server web per vedere se si è verificato un errore durante l'esecuzione dello script.

+0

Ho notato che funziona se lo eseguo con admin sul server, come posso modificare i diritti? – user2094841

+0

Se il tuo server web è apache per esempio: 'chown -R apache: apache dir_where_you_create_the_file' – Naryl

0

uso fwrite() invece di file_put_contents()