PHP - Как обновить данные в MySQL при нажатии кнопки-переключателя - PullRequest
2 голосов
/ 26 октября 2009

Пример сохранения пола

<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());
  }

Как сделать, когда мы нажимаем на пол, значение будет автоматически сохранено в БД. Дайте мне знать.

Ответы [ 3 ]

7 голосов
/ 26 октября 2009

Что-то, что поможет вам выбрать более симпатичный путь:

  // $_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>
3 голосов
/ 26 октября 2009

Вы не можете сделать это только с помощью PHP ... вам понадобится немного JavaScript на той странице, которая выполняет onchanged радиокнопок и выполняет скрипт PHP. Это называется асинхронный JavaScript и XML или «AJAX», и краткое введение будет http://www.w3schools.com/ajax/default.asp

1 голос
/ 26 октября 2009

+ 1 к 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">

Шаг 3: Написать функцию обработчика события onchange в javascript:

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

Пара важных вещей, на которые стоит обратить внимание.

  • $ _ POST - лучший вариант, чем $ _REQUEST.
  • Используйте <?php вместо краткой формы тега php <?. Это будет устаревшим в будущих версиях php.
  • Вложение времени в изучение jQuery / AJAX на 100% стоит времени и усилий
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...