buy.php,加载了js中的buy.js
<script type="text/javascript" src="js/buy.js"></script>
buy.js中发起对api.php的post请求,并且带上了我们输入的7位号码
function buy(){ $('#wait').show(); $('#result').hide(); var input = $('#numbers')[0]; if(input.validity.valid){ var numbers = input.value; $.ajax({ method: "POST", url: "api.php", dataType: "json", contentType: "application/json", data: JSON.stringify({ action: "buy", numbers: numbers }) }).done(function(resp){ if(resp.status == 'ok'){ show_result(resp); } else { alert(resp.msg); } }) } else { alert('invalid'); } $('#wait').hide(); }
api.php:
function random_win_nums(){ $result = ''; for($i=0; $i<7; $i++){ $result .= random_num(); } return $result; } function buy($req){ require_registered(); require_min_money(2); $money = $_SESSION['money']; $numbers = $req['numbers']; $win_numbers = random_win_nums(); $same_count = 0; for($i=0; $i<7; $i++){ if($numbers[$i] == $win_numbers[$i]){ $same_count++; } } switch ($same_count) { case 2: $prize = 5; break; case 3: $prize = 20; break; case 4: $prize = 300; break; case 5: $prize = 1800; break; case 6: $prize = 200000; break; case 7: $prize = 5000000; break; default: $prize = 0; break; } $money += $prize - 2; $_SESSION['money'] = $money; response(['status'=>'ok','numbers'=>$numbers, 'win_numbers'=>$win_numbers, 'money'=>$money, 'prize'=>$prize]); }
1、通过random_win_nums()函数生成了中奖号码
2、中奖的判断代码:
for($i=0; $i<7; $i++){ if($numbers[$i] == $win_numbers[$i]){ $same_count++; } }
3、==和===的区别
这里使用的是 "==",在执行==之前需要让两边的数据类型必须一致,如果数据类型不一致,就会强制转换运算符右边的数据。
而在===中,如果两边的数据类型不一致则直接返回false。
4、==比较利用
这里我们就可以传入一个全为true的数组,那么只要生成的中奖号码中没有0的话就可以完全相同,然后得到prize去获取flag
示例:
<?php $number='3569456'; $a=[(bool)$number[0], (bool)$number[1], (bool)$number[2], (bool)$number[3], (bool)$number[4], (bool)$number[5], (bool)$number[6]]; var_dump($a); ?>
结果:
array(7) { [0]=> bool(true) [1]=> bool(true) [2]=> bool(true) [3]=> bool(true) [4]=> bool(true) [5]=> bool(true) [6]=> bool(true) }
最后贴上一个松散比较的表格:
https://www.php.net/manual/zh/types.comparisons.php