给用户X个机会在PHP中输入值

给用户X个机会在PHP中输入值,php,html,forms,loops,Php,Html,Forms,Loops,您好,我是一个学习PHP的新手(也在stackoverflow上)——我正在尝试解决一个简单的问题,但无法解决。在发布问题之前,我已经在google和stackoverflow上搜索过了,因为我不想浪费其他时间,但一周来我无法解决这个问题 我正在用php编写一个简单的程序,让用户输入一个数字并检查输入的值是否为5。如果是真的,则表示“你赢了”,否则表示“再试一次”。我能做到这一点 对我来说,最棘手的是我只想给他10次机会,我可能会尝试使用基本PHP,但我无法做到这一点。我尝试过使用if,for,

您好,我是一个学习PHP的新手(也在stackoverflow上)——我正在尝试解决一个简单的问题,但无法解决。在发布问题之前,我已经在google和stackoverflow上搜索过了,因为我不想浪费其他时间,但一周来我无法解决这个问题

我正在用php编写一个简单的程序,让用户输入一个数字并检查输入的值是否为5。如果是真的,则表示“你赢了”,否则表示“再试一次”。我能做到这一点

对我来说,最棘手的是我只想给他10次机会,我可能会尝试使用基本PHP,但我无法做到这一点。我尝试过使用if,for,do,但是我无法“循环html”。我不知道jquery等,我只想用PHP来完成这项工作。我还没有开始学习课程等。提前谢谢

<html>
<body>
TRY AND GUESS THE NUMBER
<br/>
<br/>
<form method="POST" action="gullible.php">
Please enter any number :<input type="text" name="num">
<input type="hidden" name="cnt" value=<?php $cnt=0 ?>>
<input type="submit" name="go">
</body>
</html>
<?php
$i=0;
 if ($_POST['num']!=5)
 {
 $i++;
 echo $i;
 echo " Please try again";
 }
 else 
 echo "You win the game";
 ?>'

试着猜一下数字


请输入任意数字: '
您需要以某种方式存储变量,使其保持不变。在脚本中,每次运行时都将
$i
设置为
0
。另外,您在隐藏输入中设置的值不正确

一种方法是使用会话变量,例如
$\u Session['cnt']

我的PHP有点生疏,但下面是一个使用会话变量的示例:

$max_guesses = 10;

if( !isset($_SESSION['cnt']) ){
  $_SESSION['cnt'] = 0;
}

if( $_SESSION['cnt']++ > $_max_guesses ){
  echo "Maximum tries exceeded";
} else {
  echo "Try again";
}
如果您不想或无法使用会话变量,可以使用隐藏的输入字段,就像您试图:

<?php
    if( !isset($_POST['cnt']) ){
      $cnt = 0;
    } else {
      $cnt = $_POST['cnt'];
    }

    if( $cnt++ > $_max_guesses ){
      echo "Maximum tries exceeded";
    } else {
      echo "Try again";
    }
?>

<input type='hidden' name='cnt' value='<?php echo $cnt ?>' />


用户成功登录后,将机会变量设置为10,如下所示

$_SESSION['nofchances']=10;
在成功身份验证页面上设置此标志后。重定向到普通html代码

编辑:

question.html

<html>
<body>
TRY AND GUESS THE NUMBER
<br/>
<br/>
<form method="POST" action="gullible.php">
Please enter any number :<input type="text" name="num">
<input type="submit" name="go">
</body>
</html>

试着猜一下数字


请输入任意数字:
guillible.php

<?php
 if($_SESSION['nofchances']!=0)
 {
 if ($_POST['num']!=5)
 {
 $_SESSION['nofchances'] = $_SESSION['nofchances'] - 1;
 echo "You have ".$_SESSION['nofchances']." no of chances to try";
 echo "<br>Please try again";
 header("location:question.html");
 }
 else
 {
 echo "You won the game";
 $_SESSION['nofchances']=10; // resetting back
 }
 }
 else
 {
 echo "Your chances expired";
 }
 ?>

如果您不想使用会话,但您可以定义一个隐藏的输入字段来存储当前的try,然后在每次按提交/重新加载站点时,将其“+1”加进去。比如:

if( isset($_POST['try']) ) {
   $try = $_POST['try'];
   $try += 1;
} else {
   $try = 0;
}
在表单中添加隐藏字段,如:

$hiddenTry = '<input type="hidden" value="'. $try .'" name="try"/>';
if ( $try <= 10 ) {
  //your form
}
$hiddenTry='';
并在when中添加一个if子句来显示表单,如下所示:

$hiddenTry = '<input type="hidden" value="'. $try .'" name="try"/>';
if ( $try <= 10 ) {
  //your form
}

if($try可以在onBlur/onChange中调用函数

<script>
function test()
{
var count=<?php echo $count;?>;
var guess=parseInt($('#hid_num').val())+1;
if(guess>count)
{
 alert('Your chances over!');
}
else
{
$('#hid_num').val(guess);
}
}
</script>

<input type="text" onblur="test();" id="chk_estimate" />
<input type="hidden" value="0" id="hid_num" /></body>

功能测试()
{
var计数=;
var guess=parseInt($('#hid_num').val())+1;
如果(猜测>计数)
{
警惕(“你的机会来了!”);
}
其他的
{
$('hid#u num').val(猜测);
}
}

我为您制作了这个,我希望它能帮助您学习一些新的东西(我编辑了几次,使变量名更容易理解,请确保您再次检查它-我还添加了一个作弊:))


请输入任意数字:

结尾的跨度是一个骗局;)按ctrl+a使用它

关于主题:你们需要和你们好Shankar谢谢你们抽出时间回答我的问题。我尝试了这段代码,但是计数器值没有被减去。表单是html格式的,代码是php格式的。我认为每次我们点击submit时,代码都会刷新&这就是为什么$\u会话被重置为9(它运行一次)Hi重试时出错的原因-在哪里$\u会话['nofchances']=10;你在排队吗?在guillible.php中?我不需要任何登录页面,因为这只是一个简单的脚本来改进我的编码,用户只需在运行时编辑页面并更改他们的尝试次数。除了使用服务器端代码之外,它可能还不错,但它本身就不好。您好,请原谅我的无知,这是用PHP编写的吗当我学习PHP时,我只知道-谢谢你的帮助,谢谢-将在几个月后学习jquery,现在它的PHP+mysql..嗨,非常好的答案,谢谢,当你得到正确的答案(或使用ctrl a:)时,你会被引导到页面再试一次,如果你点击“这里”那么你离开的机会从你离开的地方继续?ctrl+a是如何工作的?想知道是否有其他方法可以不使用会话来实现这一点。。我尝试将$_POST['num']值推入数组,然后尝试计算数组中的数字元素,但出现错误-$c=$_POST['num'];echo$c$a=阵列推送($c)$s=计数($a)@BhaveshShah-hehe如果您想在获胜后重置尝试,只需将
$\u会话['current\u try']=1$_会话['the_magic_number']=NULL在获胜回音之后(我更新了它!)。CRTL+A只选择所有文本。文本已经存在,但不可见,因为它的白色与白色背景相对,但当您选择它时,它将变为蓝色背景上的白色(可见)!是的,通过在每个表单请求上传递所有变量,您可以在没有会话的情况下完成,但是作弊客户端可以在提交之前“更改”值,并且可以始终提交他还有10次尝试!)应该理解ctrl+a的意思-它非常简单,而且是在脸上:)LOL。。。。。。。。。。。有没有想过数组选项也能起作用$c=$_POST['num'];echo$c$a=阵列推送($c)$s=计数($a)@BhaveshShah我将span作弊移到表单下,因为现在它也显示在win-lose echo的不需要的地方。代码
$c=$\u POST['num'];echo$c$a=阵列推送($c)$s=计数($a)我认为数组推送必须是这样的
数组推送($a,$c)所以$a将是一个数组,它将$c作为最后一个元素。但是你必须在页面浏览量上节省$a。您必须使用
$\u会话['a']
而不是变量
$a在每个页面视图中都会丢失<代码>$\u会话['a']将在整个页面视图中保留!理解。。。再次感谢sharky为您提供的详细帮助、时间和努力。深为感激。。尝试对答案进行投票,但需要15票-我一到那里就会这样做:)…嗨,谢谢-我会试试看这是否有效-顺便问一下-->value=“.try.”的含义是什么。我们可以直接分配这样的变量吗?或者这应该在标记中吗。。。“for”是什么?在我的示例中,输入是字符串,而“for”是$试试看,普雷特