2011-02-03 94 views
0

试图执行:如果输入“year”字段的值不是数字(NAN)javascript函数 - 不起作用。我的语法中是否有错误?输入值的比较

谢谢。

<?php 

    echo "<h1>Testing your Trivia</h1>"; 
    $ages['Casablanca'] = "1943"; 
    $ages['Around The World in 80 Days'] = "1956"; 
    $ages['Patton'] = "1970"; 
    $ages['Annie Hall'] = "1977"; 
    $ages['Chariots of Fire'] = "1981"; 
    $ages['Dances With Wolves'] = "1990"; 
    $ages['Crash'] = "2005"; 
    $ages['The Departed'] = "2006"; 

    $rand_keys = array_rand($ages, 1); 

?> 
<script language="JavaScript" type="text/javascript"> 

function validate (form) 
{ 
    var valid = "1234567890"; 
    if (form.year.value == "" || isNaN(valid)) { 
    alert("Please enter a year."); 
    return false; 
    } 
    return true; 
} 
</script> 

<form method='post' name="inputyear" onsubmit="return validate(this);"> 
Give the year below won academy award<br> 
<Strong>Movie:</strong> <input type='text' name='movie' value='<?= $rand_keys ?>'  readonly='readonly' /><br> 
<Strong>Year it Won the Oscar:</Strong> <input type='text' name='year' size="30" /><br/> 
<input type='submit' name='submit' /> 
</form> 

<?php 

    echo '<pre>'; 
    foreach($ages as $movie => $year){ 
     print_r("Year: $year, Title: $movie <br />"); 
    } 
    echo '</pre>'; 

    if($_POST['submit']) { 
     $movie = $_POST['movie']; 
     $year = $_POST['year']; 
     $realyear = $ages[$movie]; 

     echo "<h2>Answer for: $movie</h2>"; 
     if(array_key_exists($movie, $ages)) { 
      echo "Your answer: $year<br/>"; 
     } 
     echo "Correct Answer: $realyear<br/>"; 
     if ($realyear == $year) { 
      echo "<strong style='color:green;'>WELL DONE</strong><br/>"; 
     } else { 
     // wrong 
      echo "<strong style='color:red;'>Incorrect.</strong><br/>"; 
     } 
    }  

?> 
+0

你想向用户展示一些电影名称,然后让他猜猜电影被授予了哪一年,我理解它是对的吗? – Chvanikoff 2011-02-03 17:06:56

回答

0

在上面的代码中,每次加载页面时,输出结果都会包含所有电影和年份。由于这应该是一个测验,我想这不会是期望的结果。我建议想是这样的:

<?php 
    echo "<h1>Testing your Trivia</h1>"; 
    $ages['Casablanca'] = "1943"; 
    $ages['Around The World in 80 Days'] = "1956"; 
    $ages['Patton'] = "1970"; 
    $ages['Annie Hall'] = "1977"; 
    $ages['Chariots of Fire'] = "1981"; 
    $ages['Dances With Wolves'] = "1990"; 
    $ages['Crash'] = "2005"; 
    $ages['The Departed'] = "2006"; 

    if(isset($_GET['year'])){ 
     if($ages[$_GET['movieName']]==$_GET['year']){ 
      echo "Correct! {$_GET['movieName']} was made in {$_GET['year']}"; 
     }else{ 
      echo "Sorry! Your answer of {$_GET['year']} is wrong.<br/>"; 
      echo $_GET['movieName'] . " was made in {$ages[$_GET['movieName']]}"; 
      } 
    } 

    $rand_keys = array_rand($ages, 1); 

    echo "Give the year below won academy award<br>"; 
    echo "<Strong>Movie: </strong>$rand_keys <input type='hidden' name='movieName' value='$rand_keys'/><br>"; 
    echo "<Strong>Year it Won the Oscar: </Strong> <form method='get'><input type='text' name='year' /></form><input type='submit' /> "; 

这样,结果得到检查,如果存在的话,加载网页时,可以提供输出,然后再次提出这样的问题。

在你上面的代码你想“得到”值“键”,这实际上并不存在(在这一领域的代码)。使用$ _GET和$ _POST,您可以引用上一次加载的表单字段并通过名称引用这些字段。

最后,因为这部电影的名字只读的,我做了一个变化来向您展示如何处理使用隐藏的表单元素提交的名称,而不是创建一个文本框会混淆用户。

+0

非常好,谢谢DMC。如果你可以简单地解释'if($ ages [$ _ GET ['movieName']] == $ _ GET ['year'])'' – Jshee 2011-02-03 16:46:26

+0

当然可以。 $ _GET ['movieName']从窗体调用电影名称。当我把它放在$ ages []中时,我基本上是将movieName的值传递给age,以便检索数组中的正确元素。然后根据输入人的年份测试数组的值。 – dmcnelis 2011-02-03 16:48:02

0

我不明白你的问题的措辞,但根据您的代码,我能发现一对夫妇的误解。

$_GET是一个数组。如果$_GET定义:

$_GET = array('movie_title' => 'Patton', 'year' => '1970'); 

然后$_GET['movie_title']'Patton'$_GET['year']'1970'

的$ _GET密钥由输入字段的名称给定的,所以你需要给一个名字的电影标题输入。

然后,询问用户是否选择了一个电影,你知道奥斯卡获奖一年,你会测试:你

if (array_key_exists($_GET['movie_title'], $ages)) { 
    ... 
} 

然后,看看他们是否得到了正确的答案,将考验:

if ($ages[$_GET['movie_title']] == $_GET['year']) { 
    ... 
} 

希望这蕴藏着某种意义。

0
<?php 

    echo "<h1>Testing your Trivia</h1>"; 
    $ages['Casablanca'] = "1943"; 
    $ages['Around The World in 80 Days'] = "1956"; 
    $ages['Patton'] = "1970"; 
    $ages['Annie Hall'] = "1977"; 
    $ages['Chariots of Fire'] = "1981"; 
    $ages['Dances With Wolves'] = "1990"; 
    $ages['Crash'] = "2005"; 
    $ages['The Departed'] = "2006"; 

    $rand_keys = array_rand($ages, 1); 

?> 

<form method='post'> 
Give the year below won academy award<br> 
<Strong>Movie:</strong> <input type='text' name='movie' value='<?= $rand_keys ?>'  readonly='readonly' /><br> 
<Strong>Year it Won the Oscar:</Strong> <input type='text' name='year' /><br/> 
<input type='submit' name='submit' /> 
</form> 

<? 

    echo '<pre>'; 
    foreach($ages as $movie => $year){ 
     print_r("Year: $year, Title: $movie <br />"); 
    } 
    echo '</pre>'; 

    if($_POST['submit']) { 
     $movie = $_POST['movie']; 
     $year = $_POST['year']; 
     $realyear = $ages[$movie]; 

     echo "<h2>Answer for: $movie</h2>"; 
     if(array_key_exists($movie, $ages)) { 
      echo "Your answer: $year<br/>"; 
     } 
     echo "Correct Answer: $realyear<br/>"; 
     if ($realyear == $year) { 
      echo "<strong>WELL DONE</strong><br/>"; 
     } else { 
      echo "Incorrect.<br/>"; 
     } 
    }  

?>