基于if/else条件插入数据的半功能


Semi-functionality in inserting data based on if/else condition

我有一个名为"editedworkhours"的表,它最初为空。我插入到它添加和idnumber基于一个if/else条件。这样:如果adddedwh为空(则插入),否则(更新,因为已经有一个值)。现在,更新部分运行良好(因为我手动在数据库中的表中添加值以尝试更新)。但是,如果表中不存在idnumber(即id),则不会进行插入。有什么建议可以阻止if/else条件准确地工作吗?

if(isset($_POST['submit']))
    {
        $addedhours = $_POST['AddedHours'];
        $selectid = $_POST['SelectID'];
$sql1="SELECT addedwh FROM editedworkhours WHERE idnumber='$row[0]'";
$getResult = mysql_query($sql1);
        $count = count($getResult);
        if(empty($count))
        {
            $sql="INSERT INTO editedworkhours (IDNumber,AddedWH) VALUES('$selectid','$addedhours')";
        }
else 
    {
            $tempname = $row['Field'];
            $sql2 = "UPDATE editedworkhours SET AddedWH = AddedWH +'$addedhours' WHERE IDNumber='$selectid'";
            $result2 = mysql_query($sql2);
            if (isset($result2))
            {
            }
            else
            {
                echo '<script>swal("Error", "Something went wrong error");</script>';
            }
        }

    }
    echo $menu;

我将删除条件并简单地执行INSERT ... ON DUPLICATE KEY UPDATE ...查询。这将允许您消除用于确定记录是否存在的初始SELECT查询。

INSERT INTO editedworkhours (IDNumber,AddedWH)
VALUES($selectid, $addedhours)
ON DUPLICATE KEY UPDATE AddedWH = AddedWH + $addedhours

这将需要IDNumber上的唯一(或主键)索引。

您可以在执行查询后检查mysql_affected_rows()值,以确定是否发生了插入或更新。对于插入,返回值将是1。对于更新,该值将为2。

请注意,我还删除了插入符周围的字符串分隔符,因为我假设在这两种情况下都有INT类型的字段。

把它们放在一起,看起来像这样:

if(isset($_POST['submit'])) {
    // validate user input as integer value string
    $addedhours = filter_var($_POST['AddedHours'], FILTER_VALIDATE_INT);
    $selectid = filter_var($_POST['SelectID'], FILTER_VALIDATE_INT);
    if($addedhours === false || $selectid === false) {
        // input was bad
        // perhaps do some error messaging here
        die('Bad input');
    }
    // both filters passed
    // prepare variables for insert/update
    $addedhours = mysql_real_escape_string($addedhours);
    $selectid = mysql_real_escape_string($selectid);
    // form query
    $sql = "INSERT INTO editedworkhours (IDNumber,AddedWH)
    VALUES($selectid, $addedhours)
    ON DUPLICATE KEY UPDATE AddedWH = AddedWH + $addedhours";
    // execute
    $result = mysql_query($sql);
    if(true === $result) {
        // the query worked
        // determine if insert or update was performed
        // maybe present have different logic based on insert vs. update
        if(mysql_affected_rows() === 1) {
            // an insert occurred
        } else {
            // an update occurred
        }
    } else {
        echo '<script>swal("Error", "Something went wrong error");</script>';
    }
}

你应该注意你在评论中得到的建议,并考虑将mysql或PDO与参数化预处理语句结合使用。我确实展示了使用mysql的代码示例,但是为了与您当前的使用保持一致。

你的mysql_query$sql在哪里?

 if(empty($count))
        {
    $sql="INSERT INTO editedworkhours (AFNumber,AddedWH) VALUES('$selectaf','$addedhours')";
    mysql_query($sql);
}

您只是忘记执行插入查询

  if(empty($count))
    {
        $sql="INSERT INTO editedworkhours (AFNumber,AddedWH) VALUES('$selectaf','$addedhours')";
        $result=mysql_query($sql); 
        if (isset($result))
        {
        }
        else
        {
            echo '<script>swal("Error", "Something went wrong error");</script>';
        }
        echo '<script>swal("Success", "New Value has been inserted", "success");</script>';
 }