簡體   English   中英

PHP / SQL-IF條件無法按預期工作

[英]PHP/SQL - IF conditional not working as intended

我是編程新手,最近學到很多東西。 目前,我正在使用帶有SQL表的PHP。 我在一個類似於租用的系統中具有一個功能,其中“租用”的每個項目都會在表中生成包含用戶和項目數據的行,但是我需要將其限制為每個用戶只使用一種項目,例如:

好的:

  • 用戶1 /汽車
  • 用戶1 /卡車
  • 用戶1 /自行車

不行:

  • 用戶1 /汽車
  • 用戶1 /汽車
  • 用戶1 /卡車

我現在所擁有的內容完全可以插入行,但是當它檢查用戶是否已經有某種項目時出現了問題。 我插入的第一個項目有效,它將在表格上插入行,如果您再次嘗試插入相同的項目,它不會讓您這樣做,但是一旦我嘗試使用第二個項目,它將一直讓我插入相同的項目一遍又一遍,沒有限制。 我認為這與我使用條件句的方式有關,但是我無法解決它,而且我來這里已經兩天了,沒有任何進展。

這是我的代碼:

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);    
    } 

我認為我的代碼很亂,但是請記住我還在學習。

任何建議將不勝感激,謝謝!

我懷疑"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

並出於性能原因檢查返回的計數是否為非零。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM