0

たとえば、番号を送信できるフォームを作成しました

1 2 3 4 5 6 7 8 9 10

そして、配列内でこれらの数値を取得する PHP コードを作成し、配列アイテムの数を計算してから計算を実行するループを作成しました。

is_numeric を使用して、配列に int のみが含まれているかどうかを確認しました。しかし、何らかの理由で実際には機能しません。

<?php
$total = null;
$number = $_POST['number'];
$numbers = explode(" ", $number);
foreach($numbers as $number) {
$total = $total + $number;
}
$notnumber = '<center>You must enter a number</center>';
$empty = '<center>The field is empty.</center>';

if ($numbers == is_numeric($numbers) && $total != null) {
    $avg = $total / $number;
    echo '<center>Avarge is:  <b>'.$avg.'</b></center>';
    } else if ($_POST['number'] == "") {
    echo $empty;        
    } else if ($numbers != is_numeric($numbers)) {
    echo $notnumber;
    }
?>

これがフォームです

<form action="index.php" method="post">
<input type="text" name="number" class="input"><br /><br />
<input type="submit" value="Calculate results">
</form>

何が起こるのですか:

数字を入力すると、「$notnumbers」というエラーが表示されますが、数字です。私は何を間違えましたか?

ありがとう。

4

3 に答える 3

0

これを試して、コードの問題を解決します

 <?php
 $total = NULL;
 $number = @$_POST['number'];
 $numbers = explode(" ", $number);
 $Num=0;
 foreach($numbers as $number) {
   $total = $total + $number;
   $Num++;
 }
 $notnumber = '<center>You must enter a number</center>';
 $empty = '<center>The field is empty.</center>';
 if (is_array($numbers) && $total != NULL) {
     $avg = $total / $Num;
     echo '<center>Avarge is:  <b>'.$avg.'</b></center>';
     } else if (!isset($_POST['number'])) {
        echo $empty;        
     } else if (!is_numeric($number)) {
        echo $notnumber;
     }
于 2013-02-16T18:54:41.980 に答える
0

これは正しくありません: $numbers == is_numeric($numbers)

別の解決策:無効な番号として
カウントされる場合は、これを試すことができます。0

$number = $_POST['number'];
$numbers = explode(" ", $number);
$total = 0;
foreach($numbers as &$number) {

    // covert value to integer
    // any non-numerics become 0
    $number = (int) $number;
    $total += $number;

}

is_numericorのチェックについて心配する必要はありませんis_int。これらはすべて int になるからです。0代わりに値を確認する必要があります。

追加のヒント:
<center>タグも HTML で非推奨です。
中央揃えのテキストを表示するには、CSS を使用する必要があります。

于 2013-02-16T18:37:43.537 に答える
0

if($numbers == is_numeric($numbers) ... は正しくありません

使用する

if (is_numeric($numbers) && $total != null) {

より良い機能はctype_digit

これを試してみてください。あなたのものは使用しないでください。

//$_POST['number'] = '1 2 3 4 5 6 7 8 9 10';
$notnumber = '<center>You must enter a number</center>';
$empty = '<center>The field is empty.</center>';


if(!isset($_POST['number']) || strlen($_POST['number']) <= 0){
 echo $empty;
}
else{
 if( !preg_match('/^([1-9]{1})([0-9]*)(\s)([0-9]+)/', $_POST['number']) ){
    echo $notnumber;
 }else{
    $total = null;
    $number = $_POST['number'];
    $numbers = explode(" ", $number);
    //remove after test
    echo "<pre>";
    print_r($numbers);
    echo "</pre>";
    //end remove
    $total = array_sum($numbers);
    //count(array) = number of elements inside $array
    $avg = $total / count($numbers);
    echo '<center>Avarge is:  <b>'.$avg.'</b></center>';
 }
}
于 2013-02-16T18:37:50.657 に答える