2014-09-08 2 views
0

У меня есть флажки, которые имеют разные цены, и у каждого есть разные названия. Когда пользователь нажмет на этот флажок, он будет просматривать цену в общем поле. Когда пользователь теперь нажимает кнопку сохранения, я хочу теперь сохранить общее количество в базе данных и сохранить заголовки отмеченного флажка в категориях. Заголовки, которые будут сохраняться в одной строке базы данных, должны быть разделены запятой (,).Как сохранить значение установленного флажка в базе данных

Это мой HTML-кода:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset=utf-8 /> 
    <title></title> 
    <link rel="stylesheet" type="text/css" media="screen" href="css/master.css" /> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
    <!--<script type="text/javascript" src="js/jquery.min.js"></script>--> 
    <!--[if IE]> 
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> 
    <![endif]--> 
</head> 
<body> 
    <form action="" method="post"> 
     <input type="checkbox" name="checkbox1" value="₱20"> Red </br> 
     <input type="checkbox" name="checkbox1" value="₱30"> Blue </br> 
     <input type="checkbox" name="checkbox1" value="₱40"> Green </br> 
     </br></br> 
     Total: <input type="text" name="total" readonly> 
     <input type="submit" name="save" value="SAVE"> 
    </form> 
    <script type="text/javascript"> 
    $(function(){ 
     //bind the change event to the checkboxes 
     $('input[name="checkbox1"]').change(function(){ 
      var total = 0; 
      //get value from each selected ckeck box 
      $('input[name="checkbox1"]:checked').each(function(){ 
       var tval = $(this).val(); 
       //remove ₱ sign from value 
       //convert it to a flot 
       //plus it to the total 
       total += parseFloat(tval.replace("₱",""));     
      }); 
      //finally display the total with a ₱ sign 
      $('input[name="total"]').val("₱ " + total); 
     }); 
    }); 
    </script> 
</body> 
</html> 

У меня нет ни малейшего представления в том, как сохранить название флажков в один ряд (категория) баз данных. Общая стоимость также должна быть сохранена в поле TOTAL в базе данных.

Название таблицы: ПРОДУКТЫ

Колонны: КАТЕГОРИЯ, ВСЕГО

Пример данных, сохраненных в базе данных:

Категория: [красный, синий]

ВСЕГО: [50]

+0

Вы делаете это неправильно. Прежде всего - для этого вам нужна формализация сериализации. Во-вторых, вам не нужно представлять британские/евро/американские пения в значениях. Знак валюты не является числовым значением – Yang

+0

@bad_boy благодарит вас за советы, но я не знаю, как это сделать. Могу ли я иметь примеры кода для руководств? – Ejardy

ответ

1

Если вам нужны цвета, вам нужно установить следующий бокс из привязанного флажка, после чего вы можете создать другую скрытую форму для цветов, так как вы установите значения флажка в качестве цен. Грубый пример:

<form action="" method="post"> 
    <input type="checkbox" name="checkbox1" value="20"> Red </br> 
    <input type="checkbox" name="checkbox1" value="30"> Blue </br> 
    <input type="checkbox" name="checkbox1" value="40"> Green </br> 
    </br></br> 
    <!-- hidden input colors --> 
    <input type="hidden" name="colors" value="" /> 
    Total: <input type="text" name="total" readonly> 
    <input type="submit" name="save" value="SAVE"> 
</form> 
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script type="text/javascript"> 
$(function(){ 

    var colors = []; 
    //bind the change event to the checkboxes 
    $('input[name="checkbox1"]').change(function(){ 
     var total = 0; 
     //get value from each selected ckeck box 
     $('input[name="checkbox1"]:checked').each(function(){ 
      var tval = $(this).val(); 
      total += parseFloat(tval); 
     }); 
     //finally display the total with a ₱ sign 
     $('input[name="total"]').val("₱ " + total); 

     // handle colors 
     var color = $.trim($(this)[0].nextSibling.nodeValue); // get the name 
     var i = colors.indexOf(color); 
     if(i != -1) { 
      colors.splice(i, 1); // remove if unchecked 
     } else { 
      colors.push(color); // push if checked 
     } 
     var temp = colors.join(', '); 
     $('input[name="colors"]').val(temp); 

    }); 

}); 
</script> 

РНР:

<?php 

$db = new mysqli('localhost', 'username', 'password', 'database'); 
$stmt = $db->prepare('INSERT INTO `PRODUCTS` (`CATEGORY`, `TOTAL`) VALUES (?, ?)'); 

if(isset($_POST['save'])) { 
    $total = (int) str_replace('₱ ', '', $_POST['total']); // remove peso sign 
    $colors = $_POST['colors']; 
    $stmt->bind_param('si', $colors, $total); 
    $stmt->execute(); 
} 

?> 
+0

Что означает VALUES (?,?)? – Ejardy

+0

@Ejardy его держатель места, в этом случае он называется подготовленными статутами вместо прямого добавления ваших значений в ваши запросы, что делает его небезопасным, а SQL-инъекция уязвима. – Ghost

+0

@Ejardy здесь хорошо читает об этом, http: // mattbango .com/notebook/code/prepare-statements-in-php-and-mysqli/ – Ghost

-2

Вам нужно написать код на стороне сервера, который будет принимать данные формы и записать его в базу данных - это обычно пишется на PHP или ASP с битом запись данных в базу данных в SQL.

+0

Спасибо за подробный ответ! – Yang

1

Дайте им разные имена

<input type="checkbox" name="Red" value="₱20"> Red </br> 
<input type="checkbox" name="Blue" value="₱30"> Blue </br> 
<input type="checkbox" name="Green" value="₱40"> Green </br> 

и изменить ваш JQuery немного:

//bind the change event to the checkboxes 
$('input[name="checkbox"]').change(function(){..} 

затем получить доступ к имени атрибута:

var name = $(this).attr("name"); 

DEMO


$(function(){ 
    var total = 0; 
    var colors = ""; 
    $("input[type=checkbox]").change(function(e) { 

     var selected_color = $('input[type=checkbox]:checked'); 
     colors = selected_color.map(function() { 
      return $(this).attr("name"); 
     }).get().join(', '); 
     //alert(colors); 


     selected_color.each(function(){ 
      var tval = $(this).val(); 
      total += parseFloat(tval.replace("₱",""));     
     }); 
     //alert(total); 
    }); 

    $("form").submit(function(event) { 
     $.ajax({ 
      type: "POST", 
      url: "your_script.php", 
      data: { category:colors, total: total}, 
      success: function(data) { 
        alert('success'); 
      } 
     }); 
    }); 
}); 

PHP

echo $_POST['categor']; 
echo $_POST['total']; 

Что касается вставки обеспечивают это прямо вперед, вы не указали, какой драйвер вы используете, но вы можете проконсультироваться @Ghost ответ на MySQLi

DEMO

+0

Я просто добавлю var tval = $ (this) .val(); и var name = $ (this) .attr ("name"); к моему сценарию. В php-стороне, как я могу вызвать переменную установленного флажка для меня, чтобы сохранить заголовки в одной строке базы данных? – Ejardy

+0

@Ejardy см. Мое редактирование, если вы хотите узнать, установлен ли флажок, что именно вы хотите вставить, можете ли вы показать мне пример запроса, который вам нужен? – meda

+0

Мне нужны коды для сохранения общей суммы и заголовков проверенных флажки. Это то, что я хочу сделать, и вставить его в CATEGORY. Пример, когда я щелкнул два флажка, он будет сохранен в одной строке базы данных, такой как (красный, синий) и общий [50]. – Ejardy

0

ну, это похоже на проблему супер необычный элемент ярлыка !!! (Я так глуп, я не могу победить свой импульс -.-)

вы можете поместить его в этикетке, как это:

Red

поэтому каждая метка идентификации каждого флажка

так что вы можете (если это PHP):

$ labels = $ _POST ['labels'];

и предполагая, что у вас есть нормализованной БД, как это (все остальное играть только со строками):

| ID | КАТЕГОРИИ |

для ($ I = 0; $ я < счета ($ меток); $ я ++) { mysqli_query ($ кон "Вставить в категории (CategoryName) значения (' "+ $ этикетки [$ я]"'); "); }

PD: этот код не проверен.

Смежные вопросы