0

私はphp関数を持っています

function insertIntoDb($db, $table) {
    mysql_select_db($db) or die("Could not select database. " . mysql_error());
    $resultInsert = mysql_query("SHOW COLUMNS FROM " . $table);
    $fieldnames=array();
      if (mysql_num_rows($resultInsert) > 0) {
        while ($row = mysql_fetch_array($resultInsert)) {
            $fieldnames[] = $row['Field'];
            $values = array_intersect_key( $_POST, array_flip($fieldnames) ); #check if value is null otherwise do not INSERT
        }
      }
      $sql = sprintf('INSERT INTO %s (%s) VALUES ("%s")', $table, 
      implode(', ', array_map('mysql_escape_string', array_keys($values))), implode('", "',array_map('mysql_escape_string', $values))); 
      mysql_query($sql); 
      echo '<div class="success">Data was entered into the database successfully!<br><a href="view.php?type=recent">View listing?</a></div>';
}

基本的に、テーブルの列を使用してユーザーフォームのフィールドを生成し、同じ方法を使用してテーブルに挿入しています。現在は機能していますが、テーブルに挿入する前に、入力された値が空 (たとえば、ユーザーがフィールドに入力していないなど) かどうかを確認するにはどうすればよいですか?

4

2 に答える 2

3

null/未設定/空の値のチェックについて知っておくとよいこと:

ヌル合同(===):

$result = $x === NULL

また

$result = is_null($x)
// $result === TRUE if:
// $x was never set
// was set to NULL

isset

$result = isset($x['some_key'])
// $result === TRUE if $x['some_key'] is either:
// NULL
// does not exist in $x (was never set)

ですempty

if(empty($x))
// $result === TRUE if $x is either:
// NULL
// FALSE
// (int) 0
// (float) 0.0
// (string) ''
// (string) '0'

上記の操作の速度は、次の順序でリストされています。

  • ===/!==演算子なので
  • isset/empty言語構造(関数ではない)であるため
  • is_null機能だから
于 2012-06-30T13:35:18.287 に答える
1

これを置き換えます:

while ($row = mysql_fetch_array($resultInsert)) {
    $fieldnames[] = $row['Field'];
    $values = array_intersect_key( $_POST, array_flip($fieldnames) );
}

これとともに:

while ($row = mysql_fetch_array($resultInsert)) $fieldnames[] = $row['Field'];
$values = array_intersect_key( $_POST, array_flip($fieldnames) );
$values = array_filter($values, function($x) { return $x !== ''; });

PHP < 5.3 を使用している場合は、最後の行を次のように置き換える必要があります。

$values = array_filter($values, create_function('$x', 'return $x !== "";'));
于 2012-06-30T13:46:02.767 に答える