Tengo el siguiente código:

<?php
// If user access item through link
if(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 item
if(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();
        }
    }
}

Como puede ver, los dos if de Isset son muy similares, me pregunto si hay una solución que combine los dos para que no tenga que escribir los mismos resultados dos veces, también si alguien quiere dar su opinión sobre la seguridad de la inyección SQL en mi código que sería bienvenido!

Esta es también mi primera pregunta aquí, así que si necesita que le explique algo, hágamelo saber.

php
0
Hugo Nygren 15 ago. 2020 a las 20:47

2 respuestas

La mejor respuesta

Puede hacerlo usando el operador || en la declaración if de la siguiente manera y usando un operador ternario para obtener si el usuario accedió al elemento a través del enlace o al hacer clic:

<?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();
        }
    }
}
?>
0
Yogesh Singh 15 ago. 2020 a las 17:57

Sí, ambos parecen ser similares, excepto el parámetro POST, ¿por qué no usas una función que manejará tus dos condiciones?

Algo así

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

}

Luego,

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

     $param = $_POST["v"];
     funcName($param);

}


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

 $param = $_POST["itemid"];
     funcName($param);

}
0
Firdous bhat 15 ago. 2020 a las 18:05