错误的“if”逻辑PHP

时间:2013-04-27 12:55:13

标签: php sql

我想我还没理解PHP逻辑。我在javascript中的“if's”工作正常,但在PHP中它总是被忽略。我在insert_car.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为空,也不会出现默认图像)。这就是为什么我说我的“if”被忽略了。

4 个答案:

答案 0 :(得分:1)

if未被“忽略”;你可能误解了函数empty的含义。在文档中查找,并检查它是否符合您的预期。

特别是,它并没有神奇地理解“文件”的概念 - empty查看变量。可以想象,即使在您将图像文件视为“空”的情况下,$_FILES['imagem01']仍然以某种形式存在。我建议在这种情况下检查它以找出使用哪个条件。


编辑:如果您使用正确的变量名称,它也会有所帮助:

if (empty($imagem01))

变为:

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

答案 1 :(得分: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);
 }

答案 2 :(得分:1)

使用isset

尝试此操作

更改此

if (empty($imagem01))

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

答案 3 :(得分:0)

在代码中的任何其他位置都没有名为$imagem01的变量,因此它始终是未定义的,empty($imagem01)将始终返回true。您可能需要在if声明中检查其他条件。