0

我正在使用 php 从表单字段中获取变量:

    $url=$_POST['url'];
    $tags=$_POST['tags'];
    $skillArea=$_POST['skill_area'];
    $description=$_POST['description'];
    $slideshowImageFileName=($_FILES['imageNameSlideshow']['name']);

但是当我运行我的 sql 插入查询时,如果其中一个变量为空,我会得到一个错误,所以我已经编写了 if 语句来处理这个以重写查询字符串,但可以肯定的是,这不是答案吗?看起来很乱

if(empty($slideshowImageFileName)){

        $query1="INSERT INTO portfolio (item_name,image_path,description,url) VALUES('$itemName','$imageFileName','$description','$url')"; 

    }else{

        $query1="INSERT INTO portfolio (item_name,image_path,description,url,slideshow_image_path) VALUES('$itemName','$imageFileName','$description','$url','$slideshowImageFileName')"; 
    }
4

5 回答 5

2

我想你正在寻找这样的东西:

$slideshowImageFileName = (isset($_FILES['imageNameSlideshow']['name']) && !empty($_FILES['imageNameSlideshow']['name'])) ? $_FILES['imageNameSlideshow']['name'] : NULL;

这将检查幻灯片图像的名称是否已设置且不为空。如果它是 NULL 将分配给变量,如果其正确的值将被分配。

如果要添加空字符串,可以将 NULL 替换为 ""。

于 2012-05-04T10:01:59.273 回答
0

尝试将 $slideshowImageFileName 的值设置为空字符串或单个空格,因为您的数据库表将接受,并始终使用第二个查询。

if(empty($slideshowImageFileName)){
$slideshowImageFileName = "";
}

$query1="INSERT INTO portfolio (item_name,image_path,description,url,slideshow_image_path) VALUES('$itemName','$imageFileName','$description','$url','$slideshowImageFileName')"; 
于 2012-05-04T09:56:32.413 回答
0

有几个选择。

最简单的一个是确保变量始终设置,即使没有通过:

//Set up your database connection as normal, check errors etc.
$db = mysqli_connect($host,$user,$password,$db);

$url = isset($_POST['url']) ? mysqli_real_escape_string($db, $_POST['url']) : "";
$tags= isset($_POST['tags']) ? mysqli_real_escape_string($db, $_POST['tags']) : "";

转义数据是一种很好的做法:) 在您的 INSERT 查询中,您仍然需要将值括在引号中,或者您可以根据您的喜好在上面的代码中执行此操作。

http://uk3.php.net/manual/en/mysqli.construct.php

于 2012-05-04T10:03:57.057 回答
0

我同意雷先生的看法。但除此之外还有另一种解决方案。可能 table 上的 slideshow_image_path 字段不允许为空。因此,您可以通过允许 null 来更改属性,它会起作用。

于 2012-05-04T10:06:15.823 回答
0

如果我确定我会得到很多可选数据,我可能会构建一个构建器。

像这样:

$acceptedKeys = array
  ('item_name', 
   'image_path',
   'description', 
   'url',
   'slideshow_image_path');
$inserts = array();

foreach($_GET as $key => $var) {
  if(in_array($key, $acceptedKeys)) {
    // clean and validate your keys here!
    $inserts[$key] = $var;
  }
}

$customKeys = implode(array_keys($inserts), ',');
$customValues = implode($inserts, ',');

$query = "INSERT INTO portfolio ($customKeys) VALUES($customValues)";
于 2012-05-04T10:11:30.370 回答