0

ユーザーが送信したボックスのいずれかが空の場合はエラーを表示したいが<input>、名前が空でないボックスも処理したい。

フォームは次のとおりです: http://jsfiddle.net/Draven/rEPXM/27/

PHP:

if(isset($_POST['addFolder']))
{    
    foreach($_POST['folder'] as $id => $value)
    {
        $database->query('INSERT INTO folders (name) VALUES (?)', array($value));
    }
    $success[] = "Folder(s) added";                 
}
4

4 に答える 4

2

これを試して:

$folder = isset($_POST['folder']) && is_array($_POST['folder'])
        ? $_POST['folder']
        : array();
$errors = array();
foreach ($folder as $id => $value) {
    $value = is_array($value) ? '' : trim($value);
    if ($value == '') {
        $errors[$id] = 'Empty value';
        continue;
    }

    $database->query('INSERT INTO folders (name) VALUES (?)', array($value));
}

テンプレートを編集します。

...

<div id="foldercontainer">
<?php foreach ($errors as $error): ?>
    <div>
        <div><?php echo $error ?></div>
        <input name="folder[]" type="text" size="20" value="" />
    </div>
<?php endforeach ?>
</div>

...
于 2012-10-24T16:11:09.443 に答える
2

以下のようにしてみてください

foreach($folder as $id => $value)
{
    if($value){
      $database->query('INSERT INTO folders (name) VALUES (?)', array($value));
    }
    else {
       $error[]=$id;
    }
}

$error には、値を持たないすべてのインデックスが含まれます。

于 2012-10-24T16:03:30.210 に答える
0

言われたことを補完する。値が空かどうかをテストする場合は、trim()を使用します。空の値でフォルダに名前を付けたくないですよね?:

$folder = array('aaaa', 'bbbb', ' ', '    ');

foreach($folder as $id => $value) {
    $value = trim($value);

    if(!empty($value)) {
      var_dump($value);
    } else {
       $error[]=$id;
    }
}

途中で出力は次のようになります。

string 'aaaa' (length=4)

string 'bbbb' (length=4)

ここで、trim()を使用せずに、空でないかどうかをテストすると、出力は次のようになります(これは間違いです)。

string 'aaaa' (length=4)

string 'bbbb' (length=4)

string ' ' (length=1)

string '    ' (length=4)
于 2012-10-24T16:30:22.883 に答える
0

if(!isset($folder) || $folder === "")

しかし、空の場合にクエリを実行している理由がわかりません$folder...

于 2012-10-24T15:58:29.760 に答える