使用PHP PDO更新复选框的数据库值

使用PHP PDO更新复选框的数据库值,php,mysql,database,pdo,Php,Mysql,Database,Pdo,当用户单击“保存”时,我尝试使用复选框的值更新我的数据库 这是我的密码: 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();

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

这是我的密码:

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>

/>
/>
这个

与此的输入值不匹配

<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;?> />
当您实际命名该按钮时
btn save

记住,变量名很重要如果您只输入了一个打字错误或一个错误,则可能会完全出错。

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

换成

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

另外,确保
session_start()确实已加载,因为您正在使用会话变量<代码>$user\u id=$\u会话['user']['id']
您的
WHERE
子句依赖于它——这只是一个洞察



如果是这种情况,
user\u id
列不是
AUTO\u INCREMENT

我对数组的看法是,OP可能混淆了列名,因为它们具有相同的命名约定<代码>设置我的音乐
等@Fred ii-显然最好的策略是一致性,当然,我100%同意。谢谢你指出这一点。我做了改变,一切都正常了。@iamthestreets这里有一个解决这种情况的方法。至于你的新问题,是的,这值得一个新问题。@Fred ii-从技术上来说,你的答案更正确,因为它解决了OP面临的直接问题/症状。事后他会明白我的意思的。在我看到你的答案后,为了让我的答案更完整,我添加了你的观点-因此你应该为最初的解决方案赢得荣誉。@sjagr你太好了,谢谢。我们称之为集体努力;)@弗雷德二世-谢谢。我提出了一个新问题@Fred ii-没问题,我完全理解。谢谢你的帮助!
if(isset($_POST['btn_save']))
<input type="submit" name="btn-save"...
if(isset($_POST['btn_save'])){...}
<input type="submit" name="btn_save"...
error_reporting(E_ALL);
ini_set('display_errors', 1);