Получение имени и значения сохраненных флажков из базы данных - PullRequest
1 голос
/ 03 января 2009

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

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

Я просто могу сохранить выбранные флажки как вариант 1, вариант 2, например ..

Я хочу просмотреть выбранные флажки, сохраненные в базе данных, как они отображаются на странице, когда пользователь впервые выбирает их: например, если зарегистрированный пользователь выбирает эти 3 параметра

  • LEAD DEEP KEEL (1825)
  • ПОЛНЫЙ ПОЛНЫЙ ПОЧТА (558)
  • ЧАЙНЫЕ БОКОВЫЕ ПАЛУБЫ (2889)

Они будут сохранены, как, например, (выбор1, выбор2, выбор3).

Но если он хочет просмотреть выбранные флажки, они появляются точно так же, как сначала, когда он их выбирает:

  • LEAD DEEP KEEL (1825)
  • ПОЛНЫЙ ПОЛНЫЙ ПОЧТА (558)
  • ЧАЙНЫЕ БОКОВЫЕ ПАЛУБЫ (2889)

Это моя таблица пользователей:

$query="CREATE TABLE User( 
user_id      varchar(20), 
password     varchar(40),
user_type    varchar(20),
firstname    varchar(30),
lastname     varchar(30),
street   varchar(50),
city         varchar(50),
county   varchar(50),
post_code    varchar(10),
country      varchar(50),
gender   varchar(6),
dob      varchar(15),
tel_no   varchar(50),
vals         varchar(50),
email        varchar(50))"; 

и код для вставки выбранных опций в базу данных

<?php

include("databaseconnection.php");

$str = '';

foreach($_POST as $key => $val)

if (strpos($key,'choice') !== false)
 $str .= $key.',';


$query = "INSERT INTO User (vals) VALUES('$str')";
$result=mysql_query($query,$conn);
if ($result)
{
     (mysql_error();
}
else
{  
echo " done";      
}

?>

А это моя форма:

function checkTotal () { document.listForm.total.value = ''; var sum = 0; для (я = 0; я

<form name="listForm" method="post" action="insert_options.php" >
<TABLE cellPadding=3 width=600 border=0>
        <TBODY>

        <TR>
          <TH align=left width="87%" bgColor=#b0b3b4><SPAN 
            class=whiteText>Item</SPAN></TH>
          <TH align=right width="13%" bgColor=#b0b3b4><SPAN 
            class=whiteText>Select</SPAN></TH></TR>
        <TR>
          <TD  bgcolor="#9da8af"colSpan=2><SPAN class=normalText><B>General</B></SPAN></TD></TR>
        <TR>
          <TD  bgcolor="#c4c8ca"><SPAN class=normalText >TEAK SIDE DECKS (2889)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="2889" type="checkbox" onchange="checkTotal()" /></TD></TR>
        <TR>
          <TD bgColor=#c4c8ca><SPAN class=normalText>LEAD DEEP KEEL (1825)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="1825" type="checkbox" onchange="checkTotal()"></TD></TR>

        <TR>
          <TD bgColor=#c4c8ca><SPAN class=normalText>FULLY BATTENED MAINSAIL (558)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="558"  type="checkbox"  onchange="checkTotal()"></TD></TR>

        <TR>
          <TD bgColor=#c4c8ca><SPAN class=normalText>HIGH TECH SAILS FOR CONVENTIONAL RIG (1979)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="1979" type="checkbox" onchange="checkTotal()"></TD></TR>

          <TR>
          <TD bgColor=#c4c8ca><SPAN class=normalText>IN MAST REEFING WITH HIGH TECH SAILS (2539)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="2539" type="checkbox" onchange="checkTotal()"></TD></TR>

          <TR>
          <TD bgColor=#c4c8ca><SPAN class=normalText>SPlNNAKER GEAR (POLE LINES DECK FITTINGS) (820)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="820" type="checkbox" onchange="checkTotal()"></TD></TR>

          <TR>
          <TD bgColor=#c4c8ca><SPAN class=normalText>SPINNAKER POLE VERTICAL STOWAGE SYSTEM (214)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="214" type="checkbox" onchange="checkTotal()"></TD></TR>

          <TR>
          <TD bgColor=#c4c8ca><SPAN class=normalText>GAS ROD KICKER (208)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="208" type="checkbox" onchange="checkTotal()"></TD></TR>

          <TR>
          <TD bgColor=#c4c8ca><SPAN class=normalText>SIDE RAIL OPENINGS (BOTH SIDES) (392)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="392" type="checkbox" onchange="checkTotal()"></TD></TR>

          <TR>
          <TD bgColor=#c4c8ca><SPAN class=normalText>SPRING CLEATS MIDSHIPS -ALUMIMIUM (148)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="148" type="checkbox" onchange="checkTotal()"></TD></TR>


          <TR>
          <TD bgColor=#c4c8ca><SPAN class=normalText>ELECTRIC ANCHOR WINDLASS (1189)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="1189" type="checkbox" onchange="checkTotal()"> </TD></TR>




          <TR>
          <TD bgColor=#c4c8ca><SPAN class=normalText>ANCHOR CHAIN GALVANISED (50m) (202)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="202" type="checkbox" onchange="checkTotal()"> </TD></TR>



          <TR>
          <TD bgColor=#c4c8ca><SPAN class=normalText>ANCHOR CHAIN GALVANISED (50m) (1141)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="1141" type="checkbox" onchange="checkTotal()"></TD></TR>

          <TR>
          <TD  bgcolor="#9da8af"colSpan=2><SPAN class=normalText><B>NAVIGATION & ELECTRONICS</B></SPAN></TD></TR>
        <TR>
          <TD  bgcolor="#c4c8ca"><SPAN class=normalText >WIND VANE (STAINLESS STEEL)(41)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="41" type="checkbox" onchange="checkTotal()" /></TD></TR>
        <TR>
          <TD bgColor=#c4c8ca><SPAN class=normalText>RAYMARINE ST6O LOG & DEPTH (SEPARATE UNITS)(226)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="226" type="checkbox" onchange="checkTotal()"></TD></TR>

      <TR>
          <TD  bgcolor="#9da8af"colSpan=2><SPAN class=normalText><B>ENGINES & ELECTRICS</B></SPAN></TD></TR>
        <TR>
          <TD bgColor=#c4c8ca><SPAN class=normalText>SHORE SUPPLY (220V) WITH 3 OUTLETS (EXCLUDJNG SHORE CABLE) (327)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="327"  type="checkbox"  onchange="checkTotal()"></TD></TR>

        <TR>
          <TD bgColor=#c4c8ca><SPAN class=normalText>3rd BATTERY(14OA/H)(196)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="196" type="checkbox" onchange="checkTotal()"></TD></TR>

         <TD bgColor=#c4c8ca><SPAN class=normalText>24 AMP BATTERY CHARGER (475)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="475" type="checkbox" onchange="checkTotal()"></TD></TR>

          <TD bgColor=#c4c8ca><SPAN class=normalText>2 BLADED FOLDING PROPELLER (UPGRADE)(299)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="299" type="checkbox" onchange="checkTotal()"></TD></TR>


         <TR>
          <TD  bgcolor="#9da8af"colSpan=2><SPAN class=normalText><B>BELOW DECKS/DOMESTIC</B></SPAN></TD></TR>

          <TD bgColor=#c4c8ca><SPAN class=normalText>WARM WATER (FROM ENGINE & 220V)(749)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="749" type="checkbox" onchange="checkTotal()"></TD></TR>

          <TD bgColor=#c4c8ca><SPAN class=normalText>SHOWER IN AFT HEADS WITH PUMPOUT(446)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="446" type="checkbox" onchange="checkTotal()"></TD></TR>

          <TD bgColor=#c4c8ca><SPAN class=normalText>DECK SUCTION DISPOSAL FOR HOLDINGTANK(166)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="166" type="checkbox" onchange="checkTotal()"></TD></TR>

          <TD bgColor=#c4c8ca><SPAN class=normalText>REFRIGERATED COOLBOX (12V)(666)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="666" type="checkbox" onchange="checkTotal()"></TD></TR>

          <TD bgColor=#c4c8ca><SPAN class=normalText>LFS SAFETY PACKAGE (COCKPIT HARNESS POINTS STAINLESS STEEL JACKSTAYS)(208)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="208" type="checkbox" onchange="checkTotal()"></TD></TR>

          <TD bgColor=#c4c8ca><SPAN class=normalText>UPHOLSTERY UPGRADE IN SALOON (SUEDETYPE)(701)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="701" type="checkbox" onchange="checkTotal()"></TD></TR>

          <TR>
          <TD  bgcolor="#9da8af"colSpan=2><SPAN class=normalText><B>NAVIGATION ELECTRONICS & ELECTRICS</B></SPAN></TD></TR>

          <TD bgColor=#c4c8ca><SPAN class=normalText>VHF RADIO AERIAL CABLED TO NAVIGATION AREA(178)</SPAN></TD>
          <TD align=right bgColor=#c4c8ca><input  name="choice" value="178" type="checkbox" onchange="checkTotal()"></TD></TR>
</table>

Ответы [ 2 ]

3 голосов
/ 03 января 2009

В html-форме вместо

<input type="checkbox" name="choice" value="123">

Do:

<input type="checkbox" name="choice[]" value="123">

Это сделает выбор доступным в виде массива.

Затем измените ваш php-код для вставки вариантов в базу данных следующим образом:

<?php

$str='';
foreach ($_POST['checked'] as $val)
{
    $str.=$val.',';
}

$str=substr($str,0,-1);//Remove the final comma from the end

$sql="UPDATE users SET vals='$str' WHERE user_id='$user_id'";
mysql_query($sql) or die(mysql_error());

?>

Затем при отображении вариантов выбора пользователю сделать что-то вроде этого:

Php:

<?php

$checked=array();
$sql="SELECT vals FROM users WHERE user_id='$user_id'";
$result=mysql_query($sql) or die(mysql_error());

$row=mysql_fetch_assoc($row);
$vals=explode(',',$row['vals']);


foreach ($vals as $val)
{
    if ($val !='' && is_numeric($val))
        $checked[$val]='checked';
}

function set_checked($value)
{
    global $checked;
    if (isset($checked[$value]))
        return 'checked';
    else
        return '';
}

?>

В html:

<input type="checkbox" name="choice[]" value="123" <? echo set_checked('123');?>>

PS. убедитесь, что вы заменили $ user_id идентификатором пользователя или другим способом идентифицировать его в запросах.

0 голосов
/ 03 января 2009

Для сохранения настроек в базе данных вы должны использовать UPDATE, а не INSERT. Сначала вы должны знать user_id. Тогда вам нужно будет выполнить запрос вроде:

$query = "update User set val = '" . mysql_real_escape_string($str)
       . "' where user_id = $user_id";

Вы можете использовать функцию PHP explode для получения массива значений из вашей строки.

$values = explode(',', $val);
...