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

时间:2015-08-03 12:27:52

标签: php mysql sql

我有一个名为“editedworkhours”的表,它最初是空的。我插入其中添加了基于if / else条件的id和idnumber。这样: 如果addedwh为空(然后插入)else(更新,因为已经存在值)。 现在更新部分运行正常(因为我在数据库的表中手动添加了值以尝试更新)。但是,如果表中不存在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;

3 个答案:

答案 0 :(得分:1)

我会删除条件,只需执行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>';
    }
}

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

答案 1 :(得分:0)

mysql_query $sql的哪个位置?

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

答案 2 :(得分:0)

您忘记执行插入查询

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