0

ユーザーが車をphpスクリプトに追加して、バックエンドデータベースに値を追加できるレンタカーシステムに取り組んでいます。自動インクリメントされた INT フィールドである「ID」というフィールドがあります。車を追加するたびに、値はインクリメントされた整数として自動的に追加されます。さて、実際にどのようにしたいかは異なります。たとえば、追加する車の名前が「MERCEDES」の場合、ID 値は MER001 にする必要があります。次に追加される車が VAUXHALL の場合、ID 値は VAU002 などになります。PHPの部分文字列関数を使用してメルセデスから「MER」を取得する方法は知っていますが、ループカウンターを作成して抽出した部分文字列と連結する方法はわかりません。これには、データベース テーブルの ID フィールドを VARCHAR にする必要があると思いますが、VARCHAR が自動インクリメントできるかどうかはわかりません (意味がありません)。

データベースに新しい車を追加します

登録するには、以下の詳細を入力してください

  <label> Car Name
  <span class="small">Enter car name</span>
  </label>
  <input type="text" name="CARNAME" id="CARNAME" />

  <label>Fuel Type
  <span class="small">Eg: Petrol</span>
  </label>
  <input type="text" name="FUELTYPE" id="FUELTYPE" />

  <label>Transmission
  <span class="small">Eg: Manuel</span>
  </label>
  <input type="text" name="TRANSMISSION" id="TRANSMISSION" />

  <label>Engine Size
  <span class="small">Eg: 2.4</span>
  </label>
  <input type="text" name="ENGINE_SIZE" id="ENGINE_SIZE" />

  <label>Doors
  <span class="small">Eg: 4</span>
  </label>
  <input type="text" name="DOORS" id="DOORS" />

  <label>Total
  <span class="small">Eg: 40</span>
  </label>
  <input type="text" name="TOTAL" id="TOTAL" />

  <label>Available
  <span class="small">Eg: 40</span>
  </label>
  <input type="text" name="AVAILABLE" id="AVAILABLE" />


  <input type="submit" name="submit" value="Add Car">
  <div class="spacer"></div>

  </form>

このフォームは、次のコードを含むadding.phpに移動します:

<?php
$link = mysql_connect ("xxxxx", "xxxxx", "xxxxx");
mysql_select_db ("xxxxx");

$ID = $_POST['ID'];
$CARNAME = $_POST['CARNAME'];
$FUELTYPE = $_POST['FUELTYPE'];
$TRANSMISSION = $_POST['TRANSMISSION'];
$ENGINE_SIZE = $_POST['ENGINE_SIZE'];
$DOORS = $_POST['DOORS'];
$TOTAL = $_POST['TOTAL'];
$AVAILABLE = $_POST['AVAILABLE'];
$DATEADDED = $_POST['DATEADDED'];
$test = substr($CARNAME,0,3); //tried to use this test variable and it works to get the substring!

if($TOTAL>=$AVAILABLE)
{     
$query = "insert into car (ID,CARNAME,FUELTYPE,TRANSMISSION,ENGINE_SIZE,DOORS,TOTAL,AVAILABLE,DATEADDED) values ('$_POST[ID]','$_POST[CARNAME]','$_POST[FUELTYPE]','$_POST[TRANSMISSION]','$_POST[ENGINE_SIZE]','$_POST[DOORS]','$_POST[TOTAL]','$_POST[AVAILABLE]',CURDATE())";
$result = mysql_query($query);
header("location: list_logged.php");
}
else
{
echo "<script>alert('The Total number of cars cannot be less than Available number!'); location.href='add.php';</script>"; 
}
mysql_close ($link);

?>

MER001、MAC002...などのようにIDに何かを投稿する方法について何か提案はありますか? 現在は、自動的に追加される自動インクリメント値に設定されています。データベースのフィールドを ID から VARCHAR に変更する必要があることはわかっていますが、次に何をすべきかわかりません。substr と php カウンターの連結に関する同様の質問を検索してみましたが、何も役に立ちませんでした。

4

1 に答える 1

0

しばらく時間をかけて、それを理解しました。ただし、実際には PDO を使用する必要があります。また、データベースは次のようになります。

ID、CARNAME、FUELTYPE、TRANSMISSION、ENGINE_SIZE、DOORS、TOTAL、AVAILABLE、および DATEADDED (これは DATETIME データ型です。残りはすべて VARCHAR です)。

もう一つ。CURDATE() を使用する代わりに NOW() を使用します。これは、データベースへの挿入の日付と時刻を示します。

<?php
$link = mysql_connect ("***", "****", "*******");
mysql_select_db ("*****");

$CARNAME = $_POST['CARNAME'];
$FUELTYPE = $_POST['FUELTYPE'];
$TRANSMISSION = $_POST['TRANSMISSION'];
$ENGINE_SIZE = $_POST['ENGINE_SIZE'];
$DOORS = $_POST['DOORS'];
$TOTAL = $_POST['TOTAL'];
$AVAILABLE = $_POST['AVAILABLE'];

    //FUNCTION TO GET LAST ID FROM DB
    function getLastID(){ //Function to get last ID created and return
        $query = "SELECT ID FROM car ORDER BY DATEADDED DESC LIMIT 1;";
        $lastID = mysql_query($query);
        $results = mysql_fetch_assoc($lastID);
        return $results; //returns last id
    }

    //SWITCH CASE TO CREATE PREPENDING CARNAME
    switch ($CARNAME) { //PreString based off of form input
        case 'MERCEDES':
        $preString = 'MER';
            break;
        case 'VAUXHALL':
        $preString = 'VAU';
            break;
        default:
        $preString = 'NONE';
            break;
    }
    //CREATING NEW INDEX
    $newID = getLastID(); // Get Newest ID from the database
    $castNewID = (String) $newID['ID']; //Cast ID to String
    $last3chars = substr($castNewID, -3);  //Get last three characters of ID
    $newIndexNumber = (int) $last3chars + 1; // Cast last3chars to int and add one
    $castToString = str_pad((String) $newIndexNumber, 3, "0", STR_PAD_LEFT); //Append zeros to string if we haven't reached 100 yet and cast back into a string.
    $newCarID = (String) $preString . (String) $castToString; //Finally create new ID concatenation

    //var_dump($newCarID); //For debugging

    //INSERT INTO DB
    if($TOTAL>=$AVAILABLE)
    {     
        $query = "insert into car (ID,CARNAME,FUELTYPE,TRANSMISSION,ENGINE_SIZE,DOORS,TOTAL,AVAILABLE,DATEADDED) 

                    values ('$newCarID', '$CARNAME', '$FUELTYPE','$TRANSMISSION','$ENGINE_SIZE','$DOORS','$TOTAL','$AVAILABLE',NOW())";

        $result = mysql_query($query);

        header("location: list_logged.php");
    }
    else
    {
        echo "<script>alert('The Total number of cars cannot be less than Available number!'); location.href='add.php';</script>"; 
    }
    mysql_close ($link);


?>
于 2012-12-16T00:51:58.807 に答える