php - Ajax请求并使用php pdo复制一些行但更改一些值

标签 php jquery mysql ajax pdo

我有这个数据库:

enter image description here

我有这个ajax请求:

$("#noviDatum").click(function() {
    var nd = $('#nD').val();
    $.ajax({
            url: "addDate.php",
            type: "POST",
            async: true, 
            data: {ajdi:ajdi,nd:nd}, //your form data to post goes here as a json object
            dataType: "html",

            success: function(data) {
            console.log(data);   
            },  
        });


});

所以 ajdi = id_akt

现在我想在运行 addDate.php 时复制所有行 where id_akt = ajdi and where prvi = 1 但随后我需要更改 datum 复制具有 nd 值(也是日期)的行,并将 vrednost 复制到 0

是否可以做到这一点以及如何做到?还有这个方法如何保存?你有什么建议?

更新: 我用 php pdo 尝试这个,但是出了问题:

try {
      $conn = new PDO("mysql:host=localhost;dbname=$dbname", $username, $password);
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

      $rez = $conn->prepare("SELECT * FROM track_aktivnosti WHERE id_akt = :id_akt AND prvi=1");
      $rez->execute(array(':id_akt' => $_POST['id_akt']));
      $kol = $rez->fetchAll();


foreach ($kol as $r) {
    $STH = $conn->prepare("INSERT INTO track_aktivnosti (datum, prvi, id_akt, tabela, id_tabele, naziv, vrednost) VALUES ($r['datum'], 0, :id_akt, $r['tabela'], $r['naziv'], 0)");
          $STH->execute(array(':id_akt' => $_POST['id_akt']));


$STH->execute();
}


    } catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
    }

    ?>

最佳答案

首先,我假设您的 addDate.php 已经实现了与 mysql 数据库通信的基本逻辑,并且您是一名优秀的编码员,并检查 ajax post 传递的所有值是否有任何邪恶的输入.

然后,您基本上首先需要检索要复制和修改的行:

...
$ajdi = $_POST['ajdi'];
$nd = $_POST['nd'];
...

$select_rows = query("SELECT * FROM your_table WHERE `id_akt`= $ajdi AND `id_akt`= 1") or die(mysql_error());

while($data = fetch_assoc($select_rows))
{
    //we'll handle this in the next section
}
... 

检索行后,您需要相应地更改每行数据,然后将其插入回表中。

...
while($data = fetch_assoc($select_rows))
{
     $insert_row = query("INSERT INTO your_table (datum, prvi, other cols..) VALUES ($nd, $data['prvi'], other values...)");

     if ($insert_row) {
         /// Delete old row if needed by using $data['id']
     }
}
...

如果您需要任何其他信息,请告诉我。

更新: 我对您更新的代码进行了一些更改,并添加了一些错误回显,以查看是否出现问题,但为了进一步澄清错误所在,您肯定需要调试代码:

try {
      // Check if value is set
      $id_akt = $_POST['id_akt'];
      echo "Passed id: " . $id_akt . "\r\n";

      $conn = new PDO("mysql:host=localhost;dbname=" . $dbname, $username, $password);
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

      $rez = $conn->prepare("SELECT * FROM track_aktivnosti WHERE id_akt = :id AND prvi=1");
      $rez->bindValue(':id', $id_akt, PDO::PARAM_INT);
      $rez->execute();
      //$data = $rez->fetchAll(PDO::FETCH_ASSOC);

      while($r = $rez->fetch(PDO::FETCH_ASSOC)) {

          // Check if we are in loop
          echo "Processing row data:";
          print_r($r);
          echo "\r\n";

          $STH = $conn->prepare("INSERT INTO track_aktivnosti (datum, prvi, id_akt, tabela, id_tabele, naziv, vrednost) VALUES (:r_datum, 0, :id_akt, :r_tabela, 0, :r_naziv, 0)");

          $STH->execute(array(':r_datum' => $r['datum'],':id_akt' => $id_akt, ':r_tabela' => $r['tabela'], ':r_naziv' => $r['naziv'] ));

          $affected_rows = $STH->rowCount();

          echo "Affected rows: " . $affected_rows;
          echo "\r\n";
          echo "\r\n";
     }


} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}

显然您的版本存在一些问题:

  • 据我所知,Select 调用已准备就绪,但从未执行。
  • 在插入命令中,如果您准备查询,则应在执行时传递所有变量(或在之前绑定(bind)它们)
  • 您的第二个查询缺少 *id_table* 的值
  • 您正在重复执行插入命令。

大多数问题通常可以通过花时间思考刚刚编写的内容并仔细检查逻辑错误来解决。

希望这有帮助。

关于php - Ajax请求并使用php pdo复制一些行但更改一些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22848980/

相关文章:

php - 一些 Facebook 用户的数据未插入 mysql 数据库

php - 如何从表中获取特定的行号

php - 网站-即使pass1和pass2之间有错误,用户也可以编辑密码

jQuery 动画滚动顶部到 0 无法在 Windows Phone 上工作

javascript - 检查单选按钮值并附加 div

javascript - 根据经度和纬度显示谷歌地图

mysql - 如何在一定时间间隔后更新表

php - 从文本框提交 MySQL 查询?

Mysql存储过程while循环两次

mysql - 查询未过滤重复行