6

ユーザーからの大文字と小文字のみを受け付けたいと思います。

以下のコードを試してみましたが、無効な文字メッセージが表示されますが、機能しません。チェックしないというか。メッセージを表示するだけです。何か助けはありますか?

<form action="" method="post">
<input type="text" name="fname">
<input type="submit" value="Send" name="submit">
</form>

更新:これは、名前を確認してデータベースに挿入する必要があるものです。名前に数字が含まれている場合は、エラー メッセージを表示して名前を拒否します。それ以外の場合は、名前に文字のみが含まれている場合はデータベースに挿入します。それが私が達成したいすべてです。

<?php
if ( isset( $_POST['submit'] ) ) { 
$fname = $_POST["fname"];

if(!preg_match ('/^([a-zA-Z]+)$/', $fname)){
echo "Invalid characters";
}

if (empty($fname)) {
echo  '<span> First name is required</span>';
}

else{
$mysqli = new mysqli("localhost", "root", "", "test");
$stmt = $mysqli->prepare("INSERT INTO test (firstname) VALUES (?)");

$stmt->bind_param("s", $fname);
$stmt->execute();

$stmt->close();

$mysqli->close();


}
}
?>
4

5 に答える 5

6

確認したいだけの場合はctype_alpha()を使用できますが、文字のみをACCEPTしたいと言ったので、入力を受け入れることを選択した場合は、次のことができます。

$fname=preg_replace('/[^a-z]/i','',$fname);

チェック後に良くなる

于 2013-02-06T05:01:18.530 に答える
5
if(!isset($_POST['fname']) || !ctype_alpha($_POST['fname'])){
  // can i haz alpha letters only?
}

参照

于 2013-02-06T04:50:33.850 に答える
1

コードにはいくつかの問題がありますが、問題はおそらく、フォームとその処理が同じPHPファイルにあることです。それは可能ですが、別のアプローチが必要です。手始めに、それらを分離する方がおそらく良いでしょう。

投稿されたコードで何が起こるかというと、PHPプロセッサは、フォームが送信されていないときに、データの存在をチェックすることなく、フォームデータを処理しようとします。現在$fnameは未定義であるため、テストは常に失敗します。

テストも間違っています。$fnameこれで、少なくとも1つの文字が含まれているかどうかだけがチェックされます。たとえば、1つ以上のASCII文字だけで構成されてif(!preg_match ('/^[a-zA-Z]+$/', $fname))いるテストを行います。$fname

于 2013-02-06T07:27:06.553 に答える
0

これを使用してください、これは私に正しい答えを与えています

if(!preg_match ('/^([a-zA-Z]+)$/', $fname)){
    echo "Invalid characters";
}
else{
    echo "correct";
}
于 2013-02-06T04:47:47.070 に答える
0

パターンに一致しない文字をチェックするという一般的な考え方は[a-zA-Z]良いものです。

ifただし、これを機能させたい場合は、条件の「ない」部分が間違った場所にあります。これで、 の 1文字fnameが大文字または小文字のラテン文字であることを確認できました。

ロジックの「ない」部分をパターンにプッシュしたい場合:

if (preg_match('/[^a-zA-Z]/', $fname)) {

これは、文字がラテン文字でないかどうかをチェックfnameします。これは、あなたがやろうとしていることです。

編集:新しい更新には、別のテストも機能します(ソースコードの更新された回答からのもののようですが、ここのさまざまな回答からいくつかのテストがあり、同様にうまく機能します)。しかし、あなたの更新された投稿は、名前をテストするためのパターンに問題がないことを明らかにしています。

コードは次のようになります。

if (/* invalid fname */) {
    echo "Invalid characters";
}

if (/* empty fname */) {
    echo  '<span> First name is required</span>';
}

else {
    /* insert into database */
}

その句は、その直前にelseある the のみに依存します。つまり、空かどうかのチェックです。つまり、 の文字に対するチェックの結果に関係なく、空でないときはいつでもデータベースに挿入します。iffnamefname

これを修正する簡単な方法の 1 つは、秒ifelseif. これにより、3 つの条件がすべて連鎖するため、エラー メッセージを出力する以前の条件が両方ともトリガーされなかった場合にのみ、最後のelseブロックが発生します。

if (/* empty fname */) {
    echo  'First name is required.';
}

elseif (/* invalid fname */) {
    echo 'Invalid characters';
}

else {
    /* insert into database */
}
于 2013-02-06T04:49:24.783 に答える