【问题标题】:Query conditions to insert data from a form从表单插入数据的查询条件
【发布时间】:2020-03-13 04:26:09
【问题描述】:

我想做的是:

如果我的表单中输入的年龄 = 28、30、25 或 21,那么我想在列 (VE) 中自动插入值 8,否则将其保留为空。这是正确的做法吗?

if($form_data->action == 'Insert')
        {

            $age=array(28, 30, 25, 21);
            $age_str=implode("','", $age);

                if($form_data->age == $age_str){

                $query="INSERT INTO tbl
                        (VE) VALUE ('8') WHERE id= '".$form_data->id."'
                ";
                    $statement = $connect->prepare($query);
                    $statement->execute();
            }
            $data = array(
                ':date'             =>  $date,
                ':first_name'       =>  $first_name,
                ':last_name'        =>  $last_name,
                ':age'          =>  $age
            );
            $query = "
            INSERT INTO tbl
                (date, first_name, last_name, age) VALUES 
                (:date, :first_name, :last_name, :age)
            ";
            $statement = $connect->prepare($query);


            if($statement->execute($data))
            {
                $message = 'Data Inserted';
            }
        }


另外,我如何插入 新行,其中行 ID 来自其他表单数据进入 tbl

【问题讨论】:

  • 顺便说一句...我认为这个$data = array( 需要使用来自$form_data 的值,例如$date 没有声明...你可能想要$form_data->date,同样的触发其他值。
  • 不,我已经在其他地方声明了它们(这不是我的完整代码),除了我的要求之外,一切正常,谢谢你的回答,我希望它能与你的方法,我现在在火车上,所以我回家后试试你的代码,谢谢:)
  • $form_data->age == $age_str 给定你刚刚设置的 $age_str ,为什么这会是真的?此外,您的第一个 SQL 查询是不安全的并且包含语法错误,一旦您运行它,PHP 应该会通知您。

标签: php mysql pdo


【解决方案1】:

使用php's in_array 而不是尝试比较字符串。要获取插入表单数据的查询的id,可以return the id of the insert row from your prepared statement

if ($form_data->action == 'Insert') {

    // assuming $age, $date, $first_name, $last_name
    // already declared prior to this block
    $data = array(
      ':date'             =>  $date,
      ':first_name'       =>  $first_name,
      ':last_name'        =>  $last_name,
      ':age'          =>  $age
    );

    $query = "
      INSERT INTO tbl
        (date, first_name, last_name, age) VALUES 
        (:date, :first_name, :last_name, :age)
    ";
    $statement = $connect->prepare($query);

    if ($statement->execute($data)) {
        $message = 'Data Inserted';

        // $id is the last inserted id for (tbl)
        $id = $connect->lastInsertID();

        // NOW you can insert your child row in the other table
        $ages_to_insert = array(28, 30, 25, 21);

        // in_array uses your array...so you don't need
        // if($form_data->age == $age_str){

        if (in_array($form_data->age, $ages_to_insert)) {

            $query="UPDATE tbl SER VE = '8' WHERE id= '".$id."'";
            $statement2 = $connect->prepare($query);
            $statement2->execute();
        }
    }
}

【讨论】:

  • 我现在收到此错误注意:未定义的属性:第 197 行的 stdClass::$id ///// 这是这一行:$query="INSERT INTO tbl (VE) VALUE ( '8') WHERE id= '".$form_data->id."' ";因此,如果我删除它起作用的条件,则该值将不会与其他表单数据插入到同一行中,任何提示??
  • 但你说我必须在数组中使用 if 而不是 if($form_data->age == $age_str){ ?
  • 它们不相关。直到您运行第二个查询之后,您的第二个查询的 mysql 插入 ID 才可用...因此,将第二个查询作为第一个查询,并且仅在第一个查询成功时才运行第二个查询。查看更新后的帖子。
  • 发自内心地感谢你 :),它起作用了,但我必须更新一些东西,如果你想在 pdo 中获取最后插入的 ID,你应该使用 $id = $connect->lastInsertID( ); ,第二:我不得不使用 UPDATE 而不是 INSERT 让它工作。谢谢你的帮助:))
猜你喜欢
  • 1970-01-01
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 2023-03-22
  • 2014-03-12
相关资源
最近更新 更多