最后一个ID已添加到数据库

时间:2018-07-27 17:32:48

标签: php database facebook

index.php

<form method="POST" action="add_to_db.php">
    <?php 
    foreach ($response->getGraphEdge() as $graphNode) :
    echo
    "<div class='form-check mb-3'>" .
        "<input type='radio' name='fb_name' class='form-check-input mt-3' value='".$graphNode['name']."'>" .
       "<img class='mx-2' src='" . $graphNode['picture']['url'] . "'>" . 
       "<label class='form-check-label' for='fb_name'>" . $graphNode['name'] . '</label>' . 
       "<input type='hidden' name='fb_id' value='" . $graphNode['id'] . "'>" .
       "<input type='hidden' name='fb_access_token' value='" . $graphNode['access_token'] . "'>" .
    "</div>";
    endforeach; ?>
</form>

add_to_db.php

if(isset($_POST['submit'])) {
  $query = new db;
  $b = $query->Query('SELECT * FROM user WHERE user_ID = 1');

  $fb_id           = $_POST['fb_id'];
  $fb_name         = $_POST['fb_name'];
  $fb_access_token = $_POST['fb_access_token'];

    $update = $query->Query("UPDATE user 
                             SET user_fb_page_id = '$fb_id',
                                 user_fb_page_name = '$fb_name', 
                                 user_fb_page_access_token = '$fb_access_token' 
                             WHERE user_ID = 1 ");

    if(!$update) {
      echo '<div class="alert alert-success" role="alert">Updated Successful!</div>';
    } else {
      echo '<div class="alert alert-danger" role="alert">Oh no! Something went wrong ☹️</div>';
    }

}

问题:

当用户单击所需的Facebook页面时,其名称和访问令牌的值已成功更新到数据库,但是它将最后一个fb_id更新到数据库,这显然不是我想要的!我完全不确定为什么ID会执行此操作,而其他任何属性都无法执行

1 个答案:

答案 0 :(得分:0)

foreach循环的一个迭代中的表单输入字段与其他迭代中的输入字段具有相同的名称。

这将产生一种形式,其中所有包含id的输入字段都具有完全相同的名称。 (保存访问令牌和单选按钮的输入字段也是如此。)由于这些字段具有相同的名称,因此仅将每个集合的最后一个值提交到服务器,除了仅提交单选按钮的单选按钮。选择的值。

要解决此问题,您需要为表单中的所有字段赋予唯一名称。我在这里通过添加$ key来完成此操作(或者,如果唯一,则可以使用fb_id)。

提交表单时,$ _ POST ['key']的POST数组中应仅存在一个值,这是所选单选按钮的键。然后,您可以使用此密钥来查找与之配套的ID,名称和访问令牌:

<form method="POST" action="add_to_db.php">
    <?php 
    foreach ($response->getGraphEdge() as $key => $graphNode) :
    echo
    "<div class='form-check mb-3'>" .
        "<input type='radio' name='key' class='form-check-input mt-3' value='".$key."'>" .
       "<img class='mx-2' src='" . $graphNode['picture']['url'] . "'>" . 
       "<label class='form-check-label'>" . $graphNode['name'] . '</label>' . 
       "<input type='hidden' name='fb_name[".$key."]' value='" . $graphNode['name'] . "'>" .
       "<input type='hidden' name='fb_id[".$key."]' value='" . $graphNode['id'] . "'>" .
       "<input type='hidden' name='fb_access_token[".$key."]' value='" . $graphNode['access_token'] . "'>" .
    "</div>";
    endforeach; ?>
</form>

if(isset($_POST['submit'])) {
  $query = new db;
  $b = $query->Query('SELECT * FROM user WHERE user_ID = 1');

  $key             = $_POST['key'];
  $fb_id           = $_POST['fb_id'][$key];
  $fb_name         = $_POST['fb_name'][$key];
  $fb_access_token = $_POST['fb_access_token'][$key];

    $update = $query->Query("UPDATE user 
                             SET user_fb_page_id = '$fb_id',
                                 user_fb_page_name = '$fb_name', 
                                 user_fb_page_access_token = '$fb_access_token' 
                             WHERE user_ID = 1 ");

    if(!$update) {
      echo '<div class="alert alert-success" role="alert">Updated Successful!</div>';
    } else {
      echo '<div class="alert alert-danger" role="alert">Oh no! Something went wrong ☹️</div>';
    }

}

(我已经删除了“标签为”,因为它不起作用。要使其正常工作,您可以在收音机输入中添加id ='$ key',并在标签中添加for ='$ key' )