Php计数器和子字符串连接
我正在开发一个租车系统,用户可以在php脚本中添加一辆车,从而将值添加到后端数据库中。我有一个名为“ID”的字段,它是自动递增的INT字段。每次我添加汽车时,该值都会自动添加为递增整数。现在,我实际希望它是不同的,例如,如果要添加的汽车名称是“MERCEDES”,则ID值应该是MER001。如果随后添加的下一辆车是VAUXHALL,则ID值应为VAU002,依此类推。我知道如何使用php中的substring函数从mercedes中获取“MER”,但我不知道如何使用循环计数器并将其与提取的子字符串连接起来。我相信对于这个,我的数据库表中的ID字段必须是VARCHAR,但是我不知道VARCHAR是否可以自动递增(没有意义)。这是添加汽车的表格。 将新车添加到数据库中 请填写以下详细信息进行注册Php计数器和子字符串连接,php,concatenation,Php,Concatenation,我正在开发一个租车系统,用户可以在php脚本中添加一辆车,从而将值添加到后端数据库中。我有一个名为“ID”的字段,它是自动递增的INT字段。每次我添加汽车时,该值都会自动添加为递增整数。现在,我实际希望它是不同的,例如,如果要添加的汽车名称是“MERCEDES”,则ID值应该是MER001。如果随后添加的下一辆车是VAUXHALL,则ID值应为VAU002,依此类推。我知道如何使用php中的substring函数从mercedes中获取“MER”,但我不知道如何使用循环计数器并将其与提取的子字符
<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>
车名
输入汽车名称
燃料类型
汽油
传输
曼努埃尔
发动机尺寸
例:2.4
门
例:4
全部的
例:40
可用
例:40
此表单将带您访问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);
?>
花了一段时间才弄明白。不过,您应该真正使用PDO。此外,您的数据库将如下所示:
ID、CARNAME、FUELTYPE、TRANSMISSION、ENGINE_SIZE、DOORS、TOTAL、AVAILABLE和DATEADDED(这是一种DATETIME数据类型,其余都是VARCHARS)
还有一件事。使用NOW()代替CURDATE(),后者给出插入数据库的日期和时间
<?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);
?>
警告!您的代码包含--您正在将未经筛选、未经验证的用户数据直接传递到SQL字符串中。你好,查尔斯,我知道这一点,我会努力的,谢谢:)对手头的问题有什么建议吗?我不明白,不过谢谢你的帮助。还有其他解决办法吗?我只是想将ID类型转换为字符串,然后将其与子字符串连接,然后将该值放入CARID(一个varchar字段)。我知道你也做过类似的事情,但这对我没有多大帮助。但是您不需要键入$\u POST['ID'],因为表单中没有输入。您只需从数据库中提取最后一个ID号,并进行一些操作以生成下一个ID号。函数getLastID从数据库中提取最新的ID。switch语句基于表单的输入(即,如果它是“Mercedes”,那么“Mer”将是新ID”的一部分,等等)。接下来,您只需使用该函数将ID存储到名为$newID的变量中,将结果(在关联数组中)转换为字符串,获取最后3个字符(最近的3位数字),将其转换为Int以向其添加1,将其转换回字符串,然后将开关中的预串添加到castToString并插入到db中。这非常简单,你已经尝试过这种方法了吗?但我明白你的意思,你仍然在数据库中使用ID和CARID。使用我编写的脚本,ID是一个VARCHAR主键,而不是一个自动增量。如果您想保持ID自动递增,并将新号码放入CARID,我可以为您更改