2014-04-24 54 views
-1

我有一個網站,允許用戶上傳一個csv文件,然後將其加載到postgres數據庫中。上傳文件是好的,我捕獲的文件名和位置../Data/Uploads/mycsv.csv$_POST['fname']在php文件中使用php變量()

我想在$file=file($_POST['fname'])中使用這個變量,但不能讓它工作,但是如果我把它編碼爲$file=file("../DATA/Uploads/mycsv.csv")它可以工作。我附上了有問題的代碼。在此先感謝您的幫助

也爲了澄清echo $_POST['fname'];返回../DATA/Uploads/mycsv.csv,它與硬編碼值相同。

請忍受我作爲即時消息只對這個比較新。我附加了2個html表單。最頂層的傳遞$ fname變量,該變量包含用於上傳文件的php代碼的文件名和路徑。

<Form Method="post" Action="../PHP/Loadcsv.php"> 
<input type="text" value="<?php echo htmlspecialchars($fname);?>" name="fname"> 
<br /> 
<Input Type="submit" Value="Continue"> 
</Form> 

這是PHP複製CSV導入數據庫

<?PHP 
if ($_POST['submit']) { 

$file = file(printf($_POST['fname'])); //****doesnt work****** 
//$file = file("../DATA/Uploads/csv_trial1.csv"); //********This works****** 

$db = pg_connect("host=localhost dbname=blah user=me password=you"); 
pg_exec($db, "COPY personaldetails FROM stdin"); 

foreach ($file as $line) { 
$tmp = explode(",", $line); 
pg_put_line($db, sprintf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", $tmp[0], $tmp[1],  $tmp[2], $tmp[3], $tmp[4], $tmp[5], $tmp[6], $tmp[7])); 
} 

pg_put_line($db, "\\.\n"); 

pg_end_copy($db); 

?> 
下面

是運行上述PHP的HTML。

<form id='form' method='post' action='' > 

<input type="submit" name="submit" /> 

</form> 

運行一大堆回聲找到後對變量的影響深遠,我不認爲這是可能達到的if語句內部由於下次使用後的?

**更新**

所以過了一小打和彈跳的想法幾乎是逐字從我的辦公室的牆上....我是在正確的軌道上,並德文是正確的也是如此,我的問題是2 post請求的答案是有一個PHP變量$filename = $_POST['fname'];從第一種形式把變量,並把這個到輸入的第二種形式

<form id='form' method='post' action='' > 
<input type="hidden" value="<?php echo htmlspecialchars($filename);?>" name="fname"> 
<input type="submit" name="submit" /> 

我相信可能還有其他的方式來實現這一點,但在它的工作時刻。

+0

你也可以請張貼你的表單HTML嗎? – Scopey

+1

你不需要printf()。 – Devon

回答

1

我不知道你在哪裏使用printf()函數來了,但任何打印或echo命令將輸出的參數給瀏覽器,並不會在其手返回功能。你不需要使用任何特殊的東西來使用變量作爲參數。只是:file($_POST['fname']);

printf的具體輸出格式的字符串,並返回字符串的長度。因此,這是調用file(integer)其中整數是$_POST['fname']的值的長度的等價物。