私は自分が取り組んでいるレンタカーシステムを持っています。ユーザーが車を借りるとき、システムは最初に利用可能な車の数が0より大きいかどうかを確認し、ある場合は「AVAILABLE = AVAILABLE + 1」(車を追跡するMySQLテーブル内)を調整する必要があります。つまり、ユーザーに車を借ります。また、どの車がどのユーザーに行ったかを記録しようとしています。そのため、ログインしたユーザーのユーザー名とレンタルした車のIDの値を取り込むrentalrecordsという別のデータベーステーブルがあります。さて、問題は、私の「IF-ELSE」部分が期待どおりに実行されていないことです。
<div id="stylized" class="myform">
<form id="form" name="form" method="POST" action="renting.php" >
<h1>Rent a Car</h1>
<label>Car ID
<span class="small">eg. Enter 1 for Mer1</span>
</label>
<input type="text" name="ID" id="ID" />
<input type="submit" style="margin:30px 100px;" name="submit" value="Check-Out">
<div class="spacer"></div>
</form>
</div>
さて、renting.phpであるこのフォームのアクションは次のとおりです。
<?php
session_start();
if(!session_is_registered(theUSERNAME)){
header("location:customer_login.php");
}
mysql_CONNECT("xx", "xx", "xx") OR DIE("Unable to connect");
mysql_SELECT_DB("xx") OR DIE("Unable to select database");
$ID = $_POST['ID'];
$result = mysql_query("SELECT AVAILABLE FROM car WHERE ID='$ID'");
if(mysql_fetch_array($result)>0)
{
$query="UPDATE car SET AVAILABLE=AVAILABLE-1 WHERE ID='$ID'";
mysql_query($query);
$query = "insert into rentalrecords (USERNAME,ID,RENTED_ON) values ('$_SESSION[theUSERNAME]','$_POST[ID]',CURDATE())";
$result = mysql_query($query);
header("location: list_Clogged.php");
}
else
{
echo "<script>alert('The car you chose is currently unavailable!'); location.href='rent.php';</script>";
}
?>
私はavailable=0を持っていますが、それでもelse部分を実行しておらず、何があっても常にIF部分を実行します。IDとAVAILABLEは、「car」と呼ばれるMySQLテーブルの属性であり、レンタルレコードテーブルにこれらの値を挿入したいだけです。現時点では、スクリプトがインジェクションに対して脆弱であることを認識していますが、最初に機能させたいと思います。すぐに助けていただければ幸いです。