0

php を使用してフォームフィールドから変数を取得しています:

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

しかし、SQL挿入クエリを実行すると、変数の1つが空の場合にエラーが発生するため、これに対処するために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

これにはいくつかのオプションがあります。

最も簡単な方法は、変数が渡されなくても常に設定されていることを確認することです。

//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

私はレイさんに同意します。しかし、それとは別に別の解決策があります。テーブルの slideshow_image_path フィールドで null が許可されていない可能性があります。したがって、null を許可して属性を変更すると、機能します。

于 2012-05-04T10:06:15.823 に答える
0

$slideshowImageFileName の値を空の文字列またはデータベース テーブルが受け入れる単一のスペースに設定し、常に 2 番目のクエリを使用するようにしてください。

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

多くのオプションのデータを取得できると確信している場合は、おそらくビルダーを作成します。

このような:

$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 に答える