为了账号安全,请及时绑定邮箱和手机立即绑定

如何将两个相似的 php 代码合并为一个?

如何将两个相似的 php 代码合并为一个?

PHP
翻过高山走不出你 2023-10-15 15:34:07
我得到以下代码:<?php// If user access item through linkif(isset($_POST["v"])) {    require "connect.php";    $v = $_POST['v'];    $sql = "SELECT * FROM videos WHERE videoID=?;";    $stmt = mysqli_stmt_init($conn);    if (!mysqli_stmt_prepare($stmt, $sql)) {        echo'Sql Error';        exit();    }    else {        mysqli_stmt_bind_param($stmt, "i", $v);        mysqli_stmt_execute($stmt);        $result = mysqli_stmt_get_result($stmt);        if (($row = mysqli_fetch_assoc($result)) && !preg_match("/[a-zA-Z]/", $v)) { ?>            <div class="img" style="background-image: url('<?php echo $row['link']; ?>');"></div>            <center><h1>Title <?php echo $row['Title']; ?> exists</h1></center>                        <?php exit();        }        else { ?>            <center><h1>Title does not exist</h1></center>                        <?php exit();        }    }}// If user clicks on itemif(isset($_POST["itemid"])) {    require "connect.php";    $itemid = $_POST['itemid'];    $sql = "SELECT * FROM videos WHERE videoID=?;";    $stmt = mysqli_stmt_init($conn);    if (!mysqli_stmt_prepare($stmt, $sql)) {        echo'Sql Error';        exit();    }    else {        mysqli_stmt_bind_param($stmt, "i", $itemid);        mysqli_stmt_execute($stmt);        $result = mysqli_stmt_get_result($stmt);        if (($row = mysqli_fetch_assoc($result)) && !preg_match("/[a-zA-Z]/", $itemid)) { ?>            <div class="img" style="background-image: url('<?php echo $row['link']; ?>');"></div>            <center><h1>Title <?php echo $row['Title']; ?> exists</h1></center>                        <?php exit();        }        else { ?>            <center><h1>Title does not exist</h1></center>                        <?php exit();        }    }}正如你所看到的两个 Isset if 非常相似,我想知道是否有一个解决方案将两者结合起来,这样我就不必两次编写相同的结果,如果有人想提供有关 sql 注入安全性的反馈我的代码将受到欢迎!这也是我在这里提出的第一个问题,所以如果您需要我详细说明某些内容,请告诉我。
查看完整描述

2 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

您可以通过在语句||中使用运算符来实现if,如下所示,并使用三元运算符来获取用户是通过链接还是通过单击访问项目:


<?php

// If user access item through link

if(isset($_POST["v"]) || isset($_POST["itemid"])) {

    require "connect.php";

    //user ternary operator to check whether user accessed the item through link or click

    $var = isset($_POST['v'])?$_POST['v']:$_POST['itemid'];

    $sql = "SELECT * FROM videos WHERE videoID=?;";

    $stmt = mysqli_stmt_init($conn);

    if (!mysqli_stmt_prepare($stmt, $sql)) {

        echo'Sql Error';

        exit();

    }

    else {

        mysqli_stmt_bind_param($stmt, "i", $var);

        mysqli_stmt_execute($stmt);

        $result = mysqli_stmt_get_result($stmt);

        if (($row = mysqli_fetch_assoc($result)) && !preg_match("/[a-zA-Z]/", $var)) { ?>


            <div class="img" style="background-image: url('<?php echo $row['link']; ?>');"></div>

            <center><h1>Title <?php echo $row['Title']; ?> exists</h1></center>

            

            <?php exit();

        }

        else { ?>


            <center><h1>Title does not exist</h1></center>

            

            <?php exit();

        }

    }

}

?>


查看完整回答
反对 回复 2023-10-15
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

是的,除了 POST 参数之外,两者似乎都很相似,为什么不使用一个可以处理两个 isset 条件的函数呢!


有点像这样,


function funcName($param){


   require "connect.php";

//$v = $_POST['v'];

$sql = "SELECT * FROM videos WHERE videoID=?;";

$stmt = mysqli_stmt_init($conn);

if (!mysqli_stmt_prepare($stmt, $sql)) {

    echo'Sql Error';

    exit();

}

else {

    mysqli_stmt_bind_param($stmt, "i", $param);

    mysqli_stmt_execute($stmt);

    $result = mysqli_stmt_get_result($stmt);

    if (($row = mysqli_fetch_assoc($result)) && !preg_match("/[a-zA-Z]/", $v)) { ?>


        <div class="img" style="background-image: url('<?php echo $row['link']; ?>');"></div>

        <center><h1>Title <?php echo $row['Title']; ?> exists</h1></center>

        

        <?php exit();

    }

    else { ?>


        <center><h1>Title does not exist</h1></center>

        

        <?php exit();

    }

}


}

然后,


    if(isset($_POST["v"])) {


     $param = $_POST["v"];

     funcName($param);


}



if(isset($_POST["itemid"])) {


 $param = $_POST["itemid"];

     funcName($param);


}


查看完整回答
反对 回复 2023-10-15
  • 2 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信