2013-04-27 185 views
0

我想我還沒有理解PHP邏輯。我在JavaScript中的「如果」工作正常,但在PHP中它總是被忽略。我有這樣的形式insert_car.php(它方):錯誤的「if」邏輯PHP

<input type="file" name="imagem01" id="imagem01" title="Imagem 01" onchange="readURL01(this);" class="button" /> 

...(和5個圖像更加投入和別人文本)

這是insert_db.php相應方:

$gravar_imagem01 = $_FILES['imagem01']; 

preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $gravar_imagem01["name"], $ext); 

$nome_imagem01 = md5(uniqid(time())) . "." . $ext[1]; 
$caminho_imagem01 = "../../images/" . $nome_imagem01; 

move_uploaded_file($gravar_imagem01["tmp_name"], $caminho_imagem01); 

$sqlinsert = "INSERT INTO tb_carros (... imagem01,...) value (... '$nome_imagem01',...)"; 

它工作正常,但知道我想提出一個默認的圖像,如果輸入文件的一個是空的。所以,我沒有這insert_db.php:

if (empty($imagem01)) 
{ 
    $gravar_imagem01 = "sem_imagem.jpg"; 
    $nome_imagem01 = $gravar_imagem01; 
} 
else 
{ 
    $gravar_imagem01 = $_FILES['imagem01']; 

    preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $gravar_imagem01["name"], $ext); 

    $nome_imagem01 = md5(uniqid(time())) . "." . $ext[1]; 
    $caminho_imagem01 = "../../images/" . $nome_imagem01; 

    move_uploaded_file($gravar_imagem01["tmp_name"], $caminho_imagem01); 
} 

默認圖像(sem_imagem.jpg)被放置,但即使輸入「imagem01」不爲空,顯示的默認圖像。那麼,我的代碼有什麼問題?

Ps .:如果我切換「if」和「else」條件,結果是相反的(即使輸入imagem01爲空,默認圖像也不會出現)。這就是爲什麼我說我的「如果」被忽略。

回答

1

if未被「忽略」;您可能會誤解功能empty的含義。在文檔中查找它,並檢查它是否按照您的想法進行操作。

特別是,它不神奇地理解「文件」的概念— empty看起來在變量。可以想象,$_FILES['imagem01']仍然以某種形式存在,即使在您感知圖像文件爲「空白」的情況下也是如此。我建議在這種情況下檢查它以找出使用哪個條件。


編輯:它還幫助,如果你使用了正確的變量名:

if (empty($imagem01)) 

變爲:

if (empty($_FILES['imagem01'])) 
+0

它也可以工作,但與穆罕默德答案的錯誤相同。我不知道爲什麼,但是當輸入爲空時,insert_db.php仍然生成一個md5 uniq名稱(但沒有擴展名.jpg)。 – 2013-04-27 14:52:13

+0

@AdrianoMachado:我沒有跟着你。你需要進一步縮小問題的範圍。做一些調試! – 2013-04-27 15:03:02

+0

我對穆罕默德說(兩個答案),當我選擇一個圖像輸入文件,但如果我不選擇一個圖像,它顯示了一個破碎的圖像圖標,而不是'sem_imagem.jpg'。隨着你的代碼也發生了。當我在瀏覽器或phpMyAdmin上的表格中打開源代碼頁時,會出現一個帶有md5 uniq名稱但沒有'jpg'擴展名的圖像(值)。但是進入'if(empty($ _ FILES ['imagem01']))'我沒有讓md5代碼去做。在這種情況下(空輸入),我只想將'sem_imagem.jpg'保存爲表格中的'imagem01'值。 – 2013-04-27 15:17:15

1

試試這個,我認爲始終$imagem01是空的,你必須得到imagem01$imagem01= $_FILES['imagem01'];等表格中獲得數據,然後檢查空的you can't use JavaScript variable directly它是否更好案使用var_dump($var);爲看變量值

$imagem01= $_FILES['imagem01']; 
if (empty($imagem01)) 
{ 
    $gravar_imagem01 = "sem_imagem.jpg"; 
    $nome_imagem01 = $gravar_imagem01; 
} 
    else 
    { 
    $gravar_imagem01 = $_FILES['imagem01']; 
    preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $gravar_imagem01["name"], $ext); 
    $nome_imagem01 = md5(uniqid(time())) . "." . $ext[1]; 
    $caminho_imagem01 = "../../images/" . $nome_imagem01; 
    move_uploaded_file($gravar_imagem01["tmp_name"], $caminho_imagem01); 
} 
+0

我得到了同樣的結果穆罕默德。如果我將'if(!empty($ imagem01))'更改爲'if(empty($ imagem01))',它在我選擇圖像輸入文件時起作用,但如果我不選擇圖像,破碎的圖像圖標,而不是'sem_imagem.jpg'。 – 2013-04-27 14:02:20

+0

是的,你是正確的,它必須是'if(empty($ imagem01))'你在哪裏回顯圖像。也許你的代碼想從這個地址顯示'sem_imagem.jpg' $ caminho_imagem01 =「../../images/」。 $ nome_imagem01;' – 2013-04-27 14:09:10

1

isset

改變這種

if (empty($imagem01)) 

$gravar_imagem01 = $_FILES['imagem01']; 
if (isset($gravar_imagem01)) 
+0

同樣的結果Yogesh。 – 2013-04-27 14:04:41

0

試試這個沒有命名$imagem01其他地方變量您代碼,所以它總是會被取消定義d和empty($imagem01)將始終返回true。您可能需要檢查if聲明中的不同條件。