Jump to content

Checkbox to mySQL back to Checkboxes


FloridaNutz

Recommended Posts

Ok, I want to edit a bar in my database that has attributes.  Since an Array cannot be put into mySQL I seralized it.

$barKey is seralized...

Now, I want to go back and edit that bar, how can I pull the sealized $barKey information and make all the check boxes check in the right order.  Or am I just going about this the whole wrong way?

This is my edit_bar.php
[code]<input name="barKey[]" type="checkbox" id="barKey" value="bar" />
              Bar
              <input name="barKey[]" type="checkbox" id="barKey" value="club" />
              Club
              <input name="barKey[]" type="checkbox" id="barKey" value="food" />
              Food
[/code]
Link to comment
Share on other sites

I modified your form a bit since you can't have to identical ids in a page, and since we will need them to be different: [code]<label><input type='checkbox' name='barKey[]' id='bar' value='bar' /> Bar</label>
<label><input type='checkbox' name='barKey[]' id='club' value='club' /> Club</label>
<label><input type='checkbox' name='barKey[]' id='food' value='food' /> Food</label>[/code]

Now this will be how to set them checked based on the data in the database (we say that item 1 and 3 should be checked):
[code]<?php
// ... do stuff before - we have the unserialized array in $barKey

$checkboxes = array(
'bar' => 'Bar',
'club' => 'Club',
'food' => 'Food',
);

foreach($checkboxes as $key => $value)
{
$checked = in_array($key,$barKey) ? " checked='checked'" : null;
echo "<label><input type='checkbox' name='barKey[]' id='{$key}' value='{$key}'{$checked} /> {$value}</label>";
}
?>[/code]
Link to comment
Share on other sites

i'm not sure I started this right then...

add_bar.php (simplified)
[code]
<form method="POST" action="do_addbar.php">
<label><input type='checkbox' name='barKey[]' id='Bar' value='Bar' /> Bar</label>
              Bar
              <label><input type='checkbox' name='barKey[]' id='Club' value='Club' /> Bar</label>
              Club<br>

<input type="submit" name="submit" value="Add Bar" />
</form>
[/code]

do_addbar.php (simplified)
[code]
$barKeyOut = serialize($_POST['barKey']);
$sql = "INSERT INTO $table_name ) VALUES ('$barKeyOut')";
[/code]

this is where i get confused on how i am going to unserialize and take that info and fill in the checkboxes...
Link to comment
Share on other sites

Placing your attributes into their own table is a good idea.

You could also place the attributes for each bar into a relation table, which would remove the need to have a serialized list of the attributes in the database.

So your MySQL tables would look something like this:

[b]bars[/b]
barID
barName
barDescription
etc...

[b]attributes[/b]
attributeID
attributeName
attributeImage

[b]attribute_rel[/b]
relID
rel_barID
rel_attributeID

Then for each bar, you can pull an array of attributes currently associated from the relation table([b]attrib_rel[/b]), and compare each to an array of all items from the [b]attributes[/b] table.

I'll post some sample code shortly... ;)
Link to comment
Share on other sites

Glad we could help!  :)

Some basic code to get you started:

[b]bar_detail.php[/b] -- Shows details for a bar in the database, and update form.
[code]
<?php

// Get the barID from the URL
if( (isset($_GET['barID'])) && (!empty($_GET['barID'])) && (ctype_digit($_GET['barID'])) ){
// Set the barID from the URL
$barID = $_GET['barID'];

// Check if the update form was submitted
if($_GET['Bar_Detail_Update']){
// Update the bar name, description, etc
$sql_bar_update = "UPDATE bars
   SET barName = '".mysql_real_escape_string(trim($_GET['barName']))."',
       barDescription = '".mysql_real_escape_string(trim($_GET['barDescription']))."'
   WHERE barID = $barID";

mysql_query($sql_bar_update) or die("Error Updating Bar: ".mysql_error());

// Update the bar attributes, by removing all the attribute relations
// then adding back the current selected values
$sql_attrib_del = "DELETE FROM attribute_rel WHERE rel_barID = ".$barID."";

mysql_query($sql_attrib_del) or die("Error Removing Attributes: ".mysql_error());

foreach($attrib_checkboxes as $key=>$value){
$sql_attrib_add = "INSERT INTO attribute_rel
   SET rel_barID = ".$barID.",
       rel_attributeID = ".$value."";
       
mysql_query($sql_attrib_add) or die("Error Adding Attribute: ".mysql_error())
}

echo "Bar Information Updated!<br />\n";

}

// Show the detail page

// Get the details for the current bar
$sql_bar = "SELECT * FROM bars WHERE barID = $barID LIMIT 1";
$bar_result = mysql_query($sql_bar) or die("Error Querying Bar: ".mysql_error());

// Get an array of attributeID's for the current bar
$sql_attrib_rel = "SELECT rel_attributeID FROM rel_attributes WHERE rel_barID = $barID";
$attrib_rel_result = mysql_query($sql_attrib_rel) or die("Error Querying Current Attributes: ".mysql_error());

while($row = mysql_fetch_array($attrib_rel_result){
$bar_attrib_array[] = $row['rel_attributeID'];
}

// Get the full array of attributes
$sql_arrtib = "SELECT * FROM attributes ORDER BY attributeName";
$attrib_result = mysql_query($sql_attrib) or die("Error Querying All Attributes: ".mysql_error());


// Start the form
echo '<form name="bar_detail" action="'.$_SERVER['PHP_SELF'].'" method="GET">';

// Print the bar details
while($bar_row = mysql_fetch_array($bar_result)){
echo '<input type="hidden" name="barID" value="'.$barID.'" />\n
      Bar: <input type="text" name="barName" value="'.$bar_row['barName'].'" />\n
      Bar Description: <input type="text" name="barDescription" value="'.$bar_row['barDesc'].'" />\n';

// Print the attribute checkboxes, with current values checked
while($attrib_row = mysql_fetch_array($attrib_result){
// Check if the current checkbox should be checked
$checked = (in_array($attrib_row['attributeID'], $bar_attrib_array)) ? 'checked="checked"' : NULL;

// Print the checkbox
echo $attrib_row['attributeName'].' <input type="checkbox" name="attrib_checkboxes[]" value="'.$attrib_row['attributeID'].'" '.$checked.' />\n';
}

}

// End the form
echo '<input type="submit" name="Bar_Detail_Update" value="Update Bar!" />
      </form>';

} else {
// No barID was passed, error out!
echo "Invalid or No Bar ID Specified!";
}

?>
[/code]
Link to comment
Share on other sites

I don't think this is what i ment...

Add Bar:

Name of Bar = $barName

Things that describe the bar  =  $barKey
[ ] bar  [x] club  [ ] live music

i have two tables

DSO_bars                              DSO_key
--------------                        --------------
$barName = "x"                        keyID = 1  keyDescription = Bar  keyImage = bar.gif
$barPhone = "555-5555"                        2                        Club                  club.gif
$barKey = ???                                    3                          Live Music          livemusic.gif
i tried serializing, but couldn't get it to work

I already have a form that fills in all those areas, including checkboxes that adds the entries just like for mentioned.  I just want to be able to use the same form as submited before to come up when you edit the bar again, which i pretty much have except for the check boxes.

This is how I got my former drop down menus...
[code]<select name="monFemaleAge">
                      <option value="">-- Select One--</option>
                      <?
    $ages = array("Teen","18+","21+");
    foreach($ages as $val) {
$chk = $val==$monFemaleAge ? 'selected' : '';
        echo "<option value='$val' $chk> $val</option>"; } ?>
                    </select>[/code]
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.