我是编程新手,我最近学到了很多东西。目前我在PHP中使用SQL表。我在一个类似于租赁的系统中有一个功能,其中每个项目都是租用的#34;使用用户和项目数据在表格中生成一行,但我需要将其限制为每个用户只有一种项目,例如:
好的:
不行:
我现在所拥有的完全插入行,但是在检查用户是否已经拥有某种项目时会出现问题。我插入的第一个项目有效,它会在表格中插入行,如果您尝试再次插入相同的项目,它将不会让您,但是一旦我尝试使用第二个项目,它会让我插入相同的项目一次又一次无限制。 我认为这与我使用条件的方式有关,但我无法解决它,我已经在这里待了2天而没有任何进展。
这是我的代码:
function BuscaPREST($rut,$serial){
include("conexion.mydb.php");
//Gets user info
$sql="SELECT * FROM ALUMNO WHERE ALU_RUT=".$rut;
$result=odbc_exec($Conx_Web, $sql);
if(odbc_fetch_row($result)){
$ALU_RUT=odbc_result($result, "ALU_RUT");
$ALU_DIG_VER=odbc_result($result, "ALU_DIG_VER");
$ALU_NOM=odbc_result($result, "ALU_NOM");
$ALU_APE=odbc_result($result, "ALU_APE_PAT")." ".odbc_result($result, "ALU_APE_MAT");
$ALU_MAIL=odbc_result($result, "ALU_MAIL");
include("conexion.db.php");
//Gets items info
$sql2="SELECT * FROM ARTICULOS WHERE ART_SER='".$serial."'";
$result2=odbc_exec($Conx_DB, $sql2);
if(odbc_fetch_row($result2)){
$ART_TIPO=odbc_result($result2, "ART_TIPO");
$ART_MOD=odbc_result($result2, "ART_MOD");
$ART_SER=odbc_result($result2, "ART_SER");
//Gets user and item info from table where I'm inserting the rentals
$sql3="SELECT * FROM PRESTAMOS WHERE ALU_RUT=".$ALU_RUT;
$res=odbc_exec($Conx_DB, $sql3);
$ALU_RUT2=odbc_result($res, "ALU_RUT");
$ART_TIPO2=odbc_result($res, "ART_TIPO");
//Checks if the user already has an item of the same kind
if($ALU_RUT==$ALU_RUT2 && $ART_TIPO==$ART_TIPO2){
$msg="El alumno ya tiene un artículo de este tipo.";
echo "<script type='text/javascript'>alert('$msg');</script>";
}else{
$sql4=odbc_prepare($Conx_DB,"INSERT INTO PRESTAMOS (ALU_RUT,ALU_NOM,ALU_APE,ALU_MAIL,FEC_PRE,ART_SER,ART_MOD,ART_TIPO,ALU_DIG_VER) VALUES ('".$ALU_RUT."','".$ALU_NOM."','".$ALU_APE."','".$ALU_MAIL."','".date('d-m-Y')."','".$ART_SER."','".$ART_MOD."','".$ART_TIPO."','".$ALU_DIG_VER."');");
odbc_execute($sql4);
$message="PRÉSTAMO INGRESADO CORRECTAMENTE";
echo "<script type='text/javascript'>alert('$message');</script>";
}
}
odbc_free_result($result2);
odbc_close ($Conx_DB);
}
odbc_free_result($result);
odbc_close ($Conx_Web);
}
我认为我的代码非常混乱,但请记住我还在学习。
任何建议都将不胜感激,谢谢!
答案 0 :(得分:0)
我怀疑"SELECT * FROM PRESTAMOS WHERE ALU_RUT=".$ALU_RUT
将返回多行(如果我理解正确的话,用户的所有行 - 非英文名称都不容易)。
您需要进一步限制搜索
"SELECT * FROM PRESTAMOS WHERE ALU_RUT=".$ALU_RUT`." AND ART_TIPO=".$ART_TIPO
或检查所有返回的行(即使用循环而不是仅使用第一行)。
另请注意,如果将查询修改为仅返回给定用户和类型的行,则无需再次检查返回的行,只需检查是否存在行。在实际部署中,您最有可能使用
"SELECT COUNT(1) FROM PRESTAMOS WHERE ALU_RUT=".$ALU_RUT`." AND ART_TIPO=".$ART_TIPO
并检查非零返回计数 - 出于性能原因。