【问题标题】:Update database values for checkboxes using PHP PDO使用 PHP PDO 更新复选框的数据库值
【发布时间】:2014-10-20 05:34:43
【问题描述】:

当用户单击保存时,我正在尝试使用复选框的值更新我的数据库。

这是我的代码:

require("config.php");
$settingsArray = array('my_music', 'my_movies', 'my_weather', 'my_maps', 'my_news');
if(isset($_POST['btn_save']))
{ 
      if(isset( $_POST['mysettings']))
      {  $values = array();
      foreach($_POST['mysettings'] as $selection )
      {  if(in_array($selection, $settingsArray))
         {  $values[ $selection ] = 1; }
         else
         {  $values[ $selection ] = 0; }
      } // end of foreach.

      try // save user selection to the database
      {
        $user_id = $_SESSION['user']['id'];
        $stmt = $db->prepare("UPDATE user_preferences SET my_music = :mymusic, my_movies = :mymovies, my_weather = :myweather, my_maps = :mymaps, my_news = :mynews WHERE user_id = :userID");
        $stmt->bindParam(":userID", $userid, PDO::PARAM_INT);
        $stmt->bindParam(':mymusic',     $values['mymusic']);
        $stmt->bindParam(':mymovies',      $values['mymovies']);
        $stmt->bindParam(':myweather', $values['myweather']);
        $stmt->bindParam(':mymaps',     $values['mymaps']);
        $stmt->bindParam(':mynews', $values['mynews']);
        $stmt->execute();
       }  catch(PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); }
  }
  else
  {  echo 'No checkbox selection made...'; }
} // End of, if statement from the button check

这是我的 HTML:

<form action="admin.php" method="post" role="form">
<input type="checkbox" name="mysettings[]" value="mymusic" <? echo $musicChecked;?> />
<input type="checkbox" name="mysettings[]" value="mymovies" <? echo $movieschecked;?> />
<input type="checkbox" name="mysettings[]" value="myweather" <? echo $weatherChecked;?> />
<input type="checkbox" name="mysettings[]" value="mymaps" <? echo $mapsChecked;?> />
<input type="checkbox" name="mysettings[]" value="mynews" <? echo $newsChecked;?> />
<input type="submit" name="btn-save" class="btn btn-md btn-primary btn-block" data-loading-text="Loading..." value="Save" />
</form>

我没有收到任何错误,所以我不知道出了什么问题。当我点击保存时,数据库中没有任何更新。

【问题讨论】:

    标签: php mysql database pdo


    【解决方案1】:

    您的提交按钮是(带有连字符)

    <input type="submit" name="btn-save"...
    

    但您的条件语句是(带有下划线)并且基于代码的执行:

    if(isset($_POST['btn_save'])){...}
    

    改成

    <input type="submit" name="btn_save"...
    

    如果你还没有使用这个:

    在打开连接后立即添加$db-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);。它将指示代码中发现的任何错误。

    另外,插入到您的开头&lt;?php 标记下方:

    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    

    加号,确保session_start(); 确实已加载,因为您使用的是会话变量; $user_id = $_SESSION['user']['id']; 你的 WHERE 子句依赖于它 --- 只是一个见解。


    如果是这种情况,还要确保user_id 列不是AUTO_INCREMENT

    【讨论】:

    • @iamthestreets 这是解决这种情况的meta SO article。至于你的新问题,是的,值得提出一个新问题。
    • @Fred-ii- 从技术上讲,您的答案更正确,因为它解决了 OP 遇到的直接问题/症状。之后他会碰到我的观点。为了使我的答案更完整,我在看到您的答案后添加了您的观点-因此原始解决方案值得您称赞。
    • @sjagr 你真好,谢谢。我们称之为集体努力 ;)
    • @Fred-ii- 谢谢。我创建了一个新问题here
    • @Fred-ii- 没问题,我完全理解。感谢您的所有帮助!
    【解决方案2】:

    这个

    $settingsArray = array('my_music', 'my_movies', 'my_weather', 'my_maps', 'my_news');
    

    与 this 的输入值不匹配

    <input type="checkbox" name="mysettings[]" value="mymusic" <? echo $musicChecked;?> />
    <input type="checkbox" name="mysettings[]" value="mymovies" <? echo $movieschecked;?> />
    <input type="checkbox" name="mysettings[]" value="myweather" <? echo $weatherChecked;?> />
    <input type="checkbox" name="mysettings[]" value="mymaps" <? echo $mapsChecked;?> />
    <input type="checkbox" name="mysettings[]" value="mynews" <? echo $newsChecked;?> />
    

    你也在检查这个

    if(isset($_POST['btn_save']))
    

    当您实际将该按钮命名为 btn-save

    请记住,变量名很重要!如果您犯了一个错字或错误,事情可能会完全崩溃。

    【讨论】:

    • 我对数组的看法是,也许 OP 混淆了列名,因为它们具有相同的命名约定。 SET my_music
    • @Fred-ii- 显然最好的策略是一致性
    • 是的,当然,我 100% 同意。
    • 感谢您指出这一点。我进行了更改,一切正常。
    猜你喜欢
    • 2014-11-27
    • 2012-08-16
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2012-06-03
    • 2021-08-06
    相关资源
    最近更新 更多