2

フォームが送信され、ユーザーがすべてのフォームに入力していない場合、空の変数を上書きしたいと思います。

私のmysqliクエリは次のようになります

$stmt = $con->prepare("INSERT INTO test (msg, name, time)
VALUES (?, ?, ?)");
$stmt->bind_param('sss', $_POST[msg],$_POST[name],$_POST[main]);
$stmt->execute();
$stmt->close();

簡単に言うと、ユーザーが匿名として返す名前を入力しない場合...およびユーザーがメッセージを入力しない場合、私はそれを入力したいと思います変数$cit

私はいくつかのことを試しましたが、何も成功しませんでした...私が試したこと

if(isset($_POST['submit'])){
    if(empty($_POST['msg'])){
        $stmt->bind_param('s', 'anonymous');
    }      
}

などなど

そのコードをクエリの上と下の両方に配置しようとしましたが、何も起こりませんでした。

4

2 に答える 2

4

を使用する場合bind_param()は、数値や文字列リテラル (例: 'anonymous') などの定数ではなく、変数でバインドする必要があります。

$_POSTたとえば、いくつかのデフォルト値を作成してから、それらを の値で上書きすることをお勧めします。

$defaults = array(
    'msg'  => $cit,
    'name' => 'anonymous',
    'main' => 'some other value'
);

$values = array_merge($defaults, array_filter($_POST));

// snip

$stmt->bind_param('sss', $values['msg'], $values['name'], $values['main']);
于 2013-04-26T06:54:22.457 に答える
0

これは間違った考えです。

経験則として、入力ではなく出力でデータをフォーマットします

したがって、そのままデータベースに入れます。エコーアウトするときは、「匿名」や画像など、好きなようにフォーマットしてください。それは実際にはビューの責任であり、これらすべてはデータベースとは何の関係もありません。

したがって、必要なのは、取得したすべてをテーブルに書き込むことだけです。ただし、mysqli を使用して実装するのは苦痛です。そのため、任意のサイズの配列を簡単にバインドできるようにするために、PDO で作成する必要があります (ただし、少しヘルパー関数も必要です)。

タグ wikiに基づく解決策(一番下までスクロール):

// First, list all the fields a user allowed to
$allowed = array("col1","col2","col3");

// next, create a SET statement query dynamically
// as well as create an array of values 
$set = pdoSet($fields,$values, $update);

// finally, run your dynamically built query
$sql = "UPDATE users SET $set WHERE id = :id";
$stm = $dbh->prepare($sql);
$stm->execute($values);
于 2013-04-26T07:00:54.837 に答える