2013-04-27 128 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声明中的不同条件。