createloopformysql从4输入表单插入和更新

xsuvu9jc  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(319)

我有一个包含26个项目和3个子项目的表单,需要插入到数据库中,我想知道是否有一种方法可以循环查询以避免像这样的一长串查询。

$key=$_GET['key'];
    $suc=$_GET['sucursal'];
    $columnas="client_key,sucursal,extra,op1,op2,op3";

    # Inicia inserción de valores de Opciones ...

    #1
    if(empty($_GET['x1'])){ /* nada que ver */ }else{
    if(empty($_GET['op11'])){ $op1='NULL'; }else{ $op1='1'; }
    if(empty($_GET['op21'])){ $op2='NULL'; }else{ $op2='1'; }
    if(empty($_GET['op31'])){ $op3='NULL'; }else{ $op3='1'; }
    if(empty($edit)){
    $extas=mysqli_query($cnx,"INSERT INTO xtr_opt ($columnas)VALUES('$key','$suc','".$_GET['x1']."','$op1','$op2','$op3')")or die($cnx);
    }else{
    $extas=mysqli_query($cnx,"UPDATE xtr_opt SET client_key='$key',sucursal='$suc','extra=".$_GET['x1']."',op1='$op1',op2='$op2',op3='$op3')")or die($cnx);}}
    #2
    if(empty($_GET['x2'])){ /* nada que ver */ }else{
    if(empty($_GET['op12'])){ $op1='NULL'; }else{ $op1='1'; }
    if(empty($_GET['op22'])){ $op2='NULL'; }else{ $op2='1'; }
    if(empty($_GET['op32'])){ $op3='NULL'; }else{ $op3='1'; }
    if(empty($edit)){
    $extas=mysqli_query($cnx,"INSERT INTO xtr_opt ($columnas)VALUES('$key','$suc','".$_GET['x2']."','$op1','$op2','$op3')")or die($cnx);
    }else{
    $extas=mysqli_query($cnx,"UPDATE xtr_opt SET client_key='$key',sucursal='$suc','extra=".$_GET['x2']."',op1='$op1',op2='$op2',op3='$op3')")or die($cnx);}}
    #3
    if(empty($_GET['x3'])){ /* nada que ver */ }else{
    if(empty($_GET['op13'])){ $op1='NULL'; }else{ $op1='1'; }
    if(empty($_GET['op23'])){ $op2='NULL'; }else{ $op2='1'; }
    if(empty($_GET['op33'])){ $op3='NULL'; }else{ $op3='1'; }
    if(empty($edit)){
    $extas=mysqli_query($cnx,"INSERT INTO xtr_opt ($columnas)VALUES('$key','$suc','".$_GET['x3']."','$op1','$op2','$op3')")or die($cnx);
    }else{
    $extas=mysqli_query($cnx,"UPDATE xtr_opt SET client_key='$key',sucursal='$suc','extra=".$_GET['x3']."',op1='$op1',op2='$op2',op3='$op3')")or die($cnx);}}
    #4
    if(empty($_GET['x4'])){ /* nada que ver */ }else{
    if(empty($_GET['op14'])){ $op1='NULL'; }else{ $op1='1'; }
    if(empty($_GET['op24'])){ $op2='NULL'; }else{ $op2='1'; }
    if(empty($_GET['op34'])){ $op3='NULL'; }else{ $op3='1'; }
    if(empty($edit)){
    $extas=mysqli_query($cnx,"INSERT INTO xtr_opt ($columnas)VALUES('$key','$suc','".$_GET['x4']."','$op1','$op2','$op3')")or die($cnx);
    }else{
    $extas=mysqli_query($cnx,"UPDATE xtr_opt SET client_key='$key',sucursal='$suc','extra=".$_GET['x4']."',op1='$op1',op2='$op2',op3='$op3')")or die($cnx);}}
ruoxqz4g

ruoxqz4g1#

使用 for 循环并将索引连接到输入名称中。

for ($i = 1; $i <= 4; $i++) {
    if(empty($_GET["x$i"])){ /* nada que ver */ }else{
        if(empty($_GET["op1$i"])){ $op1='NULL'; }else{ $op1='1'; }
        if(empty($_GET["op2$i"])){ $op2='NULL'; }else{ $op2='1'; }
        if(empty($_GET["op3$i"])){ $op3='NULL'; }else{ $op3='1'; }
        if(empty($edit)){
            $extas=mysqli_prepare($cnx,"INSERT INTO xtr_opt ($columnas)VALUES(?, ?, ?, ?, ?, ?)")or die($cnx);
            mysqli_stmt_bind_param($extas, "ssisss", $key, $suc, $_GET["x$i"], $op1, $op2, $op3);
        }else{
            $extas=mysqli_prepare($cnx,"UPDATE xtr_opt SET client_key=?, sucursal=?,'extra=?,op1=?,op2=?,op3=?")or die($cnx);
            mysqli_stmt_bind_param($extas, "ssisss", $key, $suc, $_GET["x$i"], $op1, $op2, $op3);
        }
        mysqli_stmt_execute($extas);
    }
}

我还演示了如何使用准备好的语句来防止sql注入。
请注意,您的代码将文本字符串 'NULL' 到表中,而不是sql NULL 价值观。如果你想要一个真正的空值,去掉引号 NULL .
你的 UPDATE 语句也缺少一个 WHERE 子句,所以它们中的每一个都将更新表中的每一行。你可能需要解决这个问题。事实上,我想你可以把 INSERT 以及 UPDATE 将语句转换为单个 INSERT 使用 ON DUPLICATE KEY UPDATE 选项。

7lrncoxx

7lrncoxx2#

我同意@barmar关于空值和错误update语句的回答。在这里我还建议另一种方法来实现相同的功能,

$key = $_GET['key'];
    $suc = $_GET['sucursal'];
    $columnas = "client_key,sucursal,extra,op1,op2,op3";

    $arrMain = array(1=>'x1',2=>'x2',3=>'x3',4=>'x4');
    $addQueryValues = "";

    foreach ($arrMain as $key=>$mainVal)
    {
        if(!empty($_GET[$mainVal]))
        {
            $op1 = empty($_GET['op1'.$key])?'NULL':1;
            $op2 = empty($_GET['op2'.$key])?'NULL':1;
            $op3 = empty($_GET['op3'.$key])?'NULL':1;
            if (empty($edit))
            {
                $addQueryValues[] = "('$key','$suc','" . $_GET[$mainVal] . "','$op1','$op2','$op3')";
            }
            else
            {
                $extas = mysqli_query($cnx, "UPDATE xtr_opt SET client_key='$key',sucursal='$suc','extra=" . $_GET[$mainVal] . "',op1='$op1',op2='$op2',op3='$op3')")or die($cnx); // Missing where clause
            }
        }
    }
// Following code will execute all insert statement in to one query
    $allValues = implode(",", $addQueryValues);
    $addQuery = "INSERT INTO xtr_opt ($columnas) VALUES ".$allValues;
    $extas = mysqli_query($cnx, $addQuery) or die($cnx);

相关问题