我有这个数据库:



我有这个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 to 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传递的所有值是否有任何恶意输入。

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

...
$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调用已准备好,但从未执行。
在插入命令上,如果您准备查询,则应在执行时传递所有变量(或之前绑定它们)
您的第二个查询缺少* id_table *的值
您正在两次执行insert命令。


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

希望这可以帮助。

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

10-13 02:52