2017-03-19 70 views
-1

寻找任何帮助,我对编码非常陌生,并且正在苦苦挣扎。我正试图编写一个程序,要求用户输入10位数的ISBN。我需要检查它的所有数字和十位数字。那么我需要确保它的一个有效的ISBN通过将每个数字乘以它的位置从最后,获得所有的总和除11。我试图做到一步一步,即输入指令,测试,然后输入,测试等,因为我知道这是最好的方法。我还没有达到阵列的数学测试,因为我不知道如何去做,但是,即使我输入十位数字,我也会被提示输入十位数字。PHP表单,如果语句

<!DOCTYPE html> 
<html> 
    <head> 
     <title></title> 
    </head> 
    <body> 
     <h4>Enter a ten digit number</h4> 
     <?php 
      if(empty($_POST['isbn'])){ 
       echo "Please enter a ten digit number"; 
      } elseif (strlen($_POST['submit'] !==10)){ 
       echo "Please enter exactly ten digits"; 
      } else { 
       echo "You have entered the correct number of digits"; 
       $array = str_split($_POST['submit']); 
      } 
     ?> 
     <form action="Qu2.php" method="post"> 
     ISBN: <input type="number" name="isbn"> 
     <input type="submit" name="submit" value="Go"> 
     </form> 

    </body> 
</html> 
+0

你输入的名字是'isbn',不'submit'。你需要关闭'strlen'。国际标准图书通常也是用连字符连接,所以你可能需要10-13个字符。 – chris85

+0

'elseif(strlen($ _ POST ['submit']!== 10)'你在这里使用了错误的数组,检查isbn,而不是提交 –

+0

并且在错误的数组上分裂 –

回答

0

您可以使用ctype_digit()检查字符串中的所有字符是否都是数字。

要检查给定的字符串是否为有效的ISBN-10,可以使用以下函数。

function isIsbn10($isbn) { 
    $check = 0; 

    for ($i = 0; $i < 10; $i++) { 
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ loops through all numbers in the "ISBN" 
     $check += (int)$isbn[$i] * (10 - $i); 
//  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ multiplies the number with the position from the last character 
    } 

    return (0 === ($check % 11)) ? true : false; 
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ checks if total is divisible by 11 
} 

var_dump(isIsbn10("0198526636")); // bool(true) 

您的代码看起来像这样(修正了一些错误,在你的代码):

​​