2015-04-20 135 views
1

我是PHP新手。現在我遇到了文件上傳的問題。 所有文件都被移動,但它沒有將文件名存儲到數據庫。 並沒有顯示錯誤。我不知道要解決這個問題。請幫助我。PHP多文件上傳多輸入

<form method="post" action="index.php?insert_ads" enctype="multipart/form-data"> 
    <input type="file" name="b1" id="b1"/> 

    <b>Link</b></br> 
    <input type="text" id="b1l" name="b1l" class="form-control"/></br> 

    <b>Home Small</b> <b style="color: blue;">100 x 100 px</b></br> 
    <input type="userfile" name="b2" id="b2"/><br> 

    <b>Link</b></br> 
    <input type="text" id="b2l" name="b2l" class="form-control"/></br> 

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

</form></br> 

<?php 

if(isset($_POST['submit'])){ 

    $b1 = $_FILES['b1']['name']; 
    $tmp1 = $_FILES['b1']['tmp_name']; 
    $b1l = $_POST['b1l']; 
    $b2 = $_FILES['b2']['name']; 
    $tmp2 = $_FILES['b2']['tmp_name']; 
    $b2l = $_POST['b2l']; 

    move_uploaded_file($tmp1,"ads/$b1"); 
    move_uploaded_file($tmp2,"ads/$b2"); 

    $insert_posts = "insert into ads (b1,b2) value ('$b1','$b2')"; 
    $run_posts = mysql_query($insert_posts); 
} 
?> 
+4

你脆弱的[SQL注入攻擊(HTTP://鮑比桌。 com),你的數據庫調用絕對是** NO **錯誤處理。你完全沒有錯誤檢查你的上傳。在這兩種情況下,你只是假設什麼都不會出錯,這是非常非常差的編碼習慣。永遠不會取得成功。假設失敗,檢查失敗,並將成功視爲令人驚喜的事情。 –

+1

**警告**:如果您只是學習PHP,請不要學習過時的'mysql_query'界面。這很糟糕,並且在未來版本的PHP中被刪除。像[PDO這樣的現代化替代品並不難學](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/)。像[PHP The Right Way](http://www.phptherightway.com/)這樣的指南可以幫助解釋最佳實踐。永遠絕對**肯定**你的用戶參數[正確逃脫](http://bobby-tables.com/php),否則你會有嚴重的[SQL注入漏洞](http://bobby-tables.com/ )。 – tadman

+0

你有連接到數據庫的地方代碼嗎?你也可以把它放在這裏嗎?你的桌面廣告在數據庫中的表現如何? – Redrif

回答

0

儘管有關使用mysql_query或注入攻擊的任何問題,有許多的東西,可能是錯的怎麼回事。

一種選擇是查詢正在執行,但您尚未正確指定$b1$b2變量。如果行被添加到數據庫中,但是行是空的(例如,SELECT b1, b2 FROM db.ads「返回'',''行」);在這種情況下,您可能只是沒有正確地從$ _FILES變量中提取name屬性。你可以運行var_dump($_FILES);來查看更多關於它的信息,並找出你需要得到的東西。

另一種可能是查詢沒有執行。再次,這可能是由於幾個原因 - 也許(某種程度上)它沒有達到的代碼點您可以測試像這樣:

$insert_posts = "insert into ads (b1,b2) value ('$b1','$b2')"; 
echo $insert_posts; // if this shows up, you're running the next line also 
$run_posts = mysql_query($insert_posts); 

另一種選擇是,你error reporting列弗el沒有捕獲錯誤。這方面的一個可能的原因是,你有沒有連接到數據庫 - 根據mysql_query文檔...

If no connection is found or established, an E_WARNING level error is generated.

一個E_WARNING級別的錯誤將允許程序繼續執行,除非你已經配置你的程序行爲有所不同。

最後,你可能有一個語法錯誤(事實上它似乎你 - VALUES,而不是VALUE);根據文檔,mysql_query錯誤返回false - 它不會引發錯誤。

你可以鑽機它通過測試虛假和使用mysql_error函數來獲取錯誤這樣做:

$run_posts = mysql_query($insert_posts); 
if ($run_posts === false) { 
    trigger_error("Error in SQL!\n" + mysql_error(), E_USER_ERROR); 
} 
+0

謝謝,現在可以使用 – Vannrith