【问题标题】:PHP - How to update data to MySQL when click a radio buttonPHP - 单击单选按钮时如何将数据更新到 MySQL
【发布时间】:2010-12-10 05:58:51
【问题描述】:

保存性别的示例

<form action="save.php?id=<?=$id?>" method="post">
    <p><label><input name="gender" type="radio" value="male" <?php if($gender=='male'){?>checked="checked"<? }?> /> Male</label></p>
    <p><label><input name="gender" type="radio" value="female" <?php if($gender=='female'){?>checked="checked"<? }?> /> Female</label></p>
</form>

这里是一个更新值的例子

  if ($_REQUEST['gender']) {
  mysql_query("UPDATE users SET gender='$gender' WHERE id='" . $id . "'") or die(mysql_error());
  }

当我们点击性别时如何使值自动保存到数据库中。告诉我。

【问题讨论】:

    标签: php mysql radio-button


    【解决方案1】:

    让你走上更漂亮道路的东西:

      // $_POST is way cooler than $_REQUEST
      if (isset($_POST['gender']) && !empty($_POST['gender'])) {
    
          // sql injection sucks
          $gender = my_real_escape_string($_POST['gender']);
    
          // cast it as an integer, sql inject impossible
          $id = intval($_GET['id']);
    
          if($id) {
              // spit out the boolean INSERT result for use by client side JS
              if(mysql_query("UPDATE users SET gender=$gender WHERE id=$id")) {
                  echo '1';
                  exit;
              } else {
                  echo '0';
                  exit;
              }
          }
      }
    

    假设相同的标记,一个ajaxy解决方案(使用jQuery):

    <script>
    var id = <?=$id?>;
    
    // when the DOM is ready
    $(document).ready(function() {
    
        // 'click' because IE likes to choke on 'change'
        $('input[name=gender]').click(function(e) {
    
            // prevent normal, boring, tedious form submission
            e.preventDefault();
    
            // send it to the server out-of-band with XHR
            $.post('save.php?id=' + id, function() {
                data: $(this).val(),
                success: function(resp) { 
                    if(resp == '1') {
                        alert('Saved successfully');
                    } else {
                        alert('Oops, something went wrong!');
                    }
                }
            });
        });
    });
    </script>
    

    【讨论】:

    • @bob - 这只是为了提供额外的见解,并希望能激发一些好奇心。请注意,缺少正确的异常处理,并且有大量的改进空间(总是!)。
    • 是的,总是:) 附加问题。 intval() 比 (int) 好吗?
    • @bob - 据我所知,没有区别,它们都在失败时返回零。见php.net/manual/en/…
    【解决方案2】:

    您不能仅使用 PHP 来执行此操作...您需要在该页面上执行一些 JavaScript,以执行单选按钮的 onchanged 并执行 PHP 脚本。这称为异步 JavaScript 和 XML 或“AJAX”,快速介绍是 http://www.w3schools.com/ajax/default.asp

    【讨论】:

      【解决方案3】:

      +1 to karim79 指出 jQuery/AJAX 和 $_POST 东西。很重要。

      这里是一个没有jQuery的解决方案(如果你现在对学习jQuery不感兴趣的话)

      第 1 步: 甚至在您的复选框标签上添加 onchange,如下所示:

      <p><label><input name="gender" type="radio" value="male" onchange="do_submit()" <?php if($_POST['gender']=='male'){?>checked="checked"<? }?> /> Male</label></p>
      <p><label><input name="gender" type="radio" value="female" onchange="do_submit()" <?php if($_POST['gender']=='female'){?>checked="checked"<? }?> /> Female</label></p>
      

      第 3 步:name 属性添加到表单标签中,如下所示:

      <form name="myform" action="check.php" method="post">
      

      第三步:用javascript编写onchange事件处理函数:

      <script type="text/javascript">
      function do_submit() {
        document.forms['myform'].submit();
      }
      </script>
      

      需要注意的几个重要事项。

      • $_POST 是比 $_REQUEST 更好的选择。
      • 使用&lt;?php 代替php 标记&lt;? 的缩写形式。它将在未来的 php 版本中被弃用。
      • 花时间学习 jQuery/AJAX 是 100% 值得的时间和精力

      【讨论】:

      • 在输入屏幕中使用 cody 按钮和 101010。
      • karim79。我做到了,它正确地调整了编辑器中的代码,但在提交后不起作用:(
      • 啊,数字点搞砸了。我还没有弄清楚;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 2018-07-12
      • 2016-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多