0

私は自分が取り組んでいるレンタカーシステムを持っています。ユーザーが車を借りるとき、システムは最初に利用可能な車の数が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テーブルの属性であり、レンタルレコードテーブルにこれらの値を挿入したいだけです。現時点では、スクリプトがインジェクションに対して脆弱であることを認識していますが、最初に機能させたいと思います。すぐに助けていただければ幸いです。

4

2 に答える 2

1

リソースを数えようとしています...

if(mysql_fetch_array($result)>0)

結果を取得してから、それらの結果内のアイテムをカウントする必要があります。

$res = mysql_fetch_assoc($result);

if($res[0]['AVAILABLE'] > 0)

注 $res[0] は、結果の最初の行を意味します。mysql_fetch_row を使用して単一の結果を取得することもできます。

mysql_ 関数はまったく使用しないでください。mysqli または PDO への切り替えを検討してください。また、入力をサニタイズする必要があります。盲目的に受け入れてるだけ$_POST['ID']

于 2013-01-10T01:27:41.813 に答える
0

mysql_fetch_array 関数は、あなたが思っていることをしません。単一の値ではなく、配列を返します。

于 2013-01-10T01:25:40.860 に答える