I have a problem where I have a fairly basic crud application website. I’m having trouble with the edit part where I have text inputs and select dropdowns on the page. For all of the text inputs, I’m able to make the value equal to what was already in the database for that row and so, if I go through the edit.php and don’t edit some fields, the value is still kept and not wiped clean for the fields I didn’t touch. Unfortunately, I’m using Jquery to populate some of the select/dropdowns, so this approach doesn’t work.
Example Scenario:
I’m a user, add a business with the first category being Restaurants and the subcategory being American Food and then a second category being Home Services and the subcategory Home Repair. Then I click on the “Save” button and my category’s are inserted. Then I realize I forgot to add my name and phone number to my listing, so I edit the listing, this time inserting just my name and phone number and leaving all the other fields blank. With what I have now, the categories and subcategories I saved the first time are now either set to 0 or blank.
My solution to this was to populate some hidden fields (named beforecat1, beforesubcat1, and so on) that stored the values of what the fields were before, and then if the selects weren’t touched, then insert the values of the hidden fields. Unfortunately, somethings not working.
<?
include('../config.php');
if (isset($_GET['id']) ) {
$id = (int) $_GET['id'];
if (isset($_POST['submitted'])) {
foreach($_POST AS $key => $value) { $_POST[$key] = mysql_real_escape_string($value); }
if(isset($_REQUEST['cselect1'])){
$cselect1 = $_REQUEST['cselect1'];
$query="SELECT cat FROM cat WHERE id='$cselect1'";
$result = mysql_query ($query);
while($catselect=mysql_fetch_array($result)){
$catselect1 = $catselect['cat'];
}
} else {
$catselect1 = $_REQUEST['beforecat1'];
}
if(isset($_REQUEST['cselect2'])){
$cselect2 = $_REQUEST['cselect2'];
$query="SELECT cat FROM cat WHERE id='$cselect2'";
$result = mysql_query ($query);
while($catselect=mysql_fetch_array($result)){
$catselect2 = $catselect['cat'];
}
} else {
$catselect2 = $_REQUEST['beforecat2'];
}
if(isset($_REQUEST['cselect3'])){
$cselect3 = $_REQUEST['cselect3'];
$query="SELECT cat FROM cat WHERE id='$cselect3'";
$result = mysql_query ($query);
while($catselect=mysql_fetch_array($result)){
$catselect3 = $catselect['cat'];
}
} else {
$catselect3 = $_REQUEST['beforecat3'];
}
$sql = "UPDATE `company` SET `name` = '{$_POST['name']}' , `phone` = '{$_POST['phone']}' , `cat1` = '$catselect1' , `cat2` = '$catselect2' , `cat3` = '$cselect3' , `zipcode` = '{$_POST['zipcode']}' , `city` = '{$_POST['city']}' , `address` = '{$_POST['address']}' , `address2` = '{$_POST['address2']}' , `website` = '{$_POST['website']}' , `product1` = '{$_POST['product1']}' , `product2` = '{$_POST['product2']}' , `product3` = '{$_POST['product3']}' , `product4` = '{$_POST['product4']}' , `product5` = '{$_POST['product5']}' , `product6` = '{$_POST['product6']}' , `product7` = '{$_POST['product7']}' , `subcat1` = '{$_POST['sselect1']}' , `subcat2` = '{$_POST['sselect2']}' , `subcat3` = '{$_POST['sselect3']}' WHERE `id` = '$id' ";
mysql_query($sql) or die(mysql_error());
$sql = "UPDATE `company_secondary` SET `company_description` = '{$_POST['description']}' , `since` = '{$_POST['since']}' , `smoking` = '{$_POST['select3']}' , `delivery` = '{$_POST['select5']}' , `alcohol` = '{$_POST['select6']}' , `kids` = '{$_POST['select1']}' , `wheelchair` = '{$_POST['select2']}' , `twitter` = '{$_POST['twitter']}' , `facebook` = '{$_POST['facebook']}' , `youtube` = '{$_POST['youtube']}' , `premium` = '{$_POST['premium']}' , `creditcards` = '{$_POST['select4']}' , `outdoor` = '{$_POST['select7']}' , `featured` = '{$_POST['featured']}' , `shortdesc` = '{$_POST['shortdesc']}' WHERE company_id = '$id' ";
mysql_query($sql) or die(mysql_error());
echo "Edited Row<br/>";
echo "<a href='allbiz.php'>Back To Listing</a>";
}
$row = mysql_fetch_array ( mysql_query(“SELECT * FROM company WHERE id = ‘$id’ “));
?>
And here’s my part of my form:
<form action='' method='POST'>
<p><b>Name:</b><br /><input type='text' name='name' value='<?= $row['name'] ?>' />
<p><b>Phone:</b><br /><input type='text' name='phone' value='<?= stripslashes($row['phone']) ?>' />
<?php
$cat1 = stripslashes($row['cat1']);
$cat2 = stripslashes($row['cat2']);
$cat3 = stripslashes($row['cat3']);
$subcat1 = stripslashes($row['subcat1']);
$subcat2 = stripslashes($row['subcat2']);
$subcat3 = stripslashes($row['subcat3']);
?>
<input type='hidden' value='<?php echo $cat1;?>' name='beforecat1'/>
<input type='hidden' value='<?php echo $cat2;?>' name='beforecat2'/>
<input type='hidden' value='<?php echo $cat3;?>' name='beforecat3'/>
<input type='hidden' value='<?php echo $subcat1;?>' name='beforesubcat1'/>
<input type='hidden' value='<?php echo $subcat2;?>' name='beforesubcat2'/>
<input type='hidden' value='<?php echo $subcat3;?>' name='beforesubcat3'/>
<p><b>Cat1:</b><br />
<?php
$query="SELECT * FROM cat";
$result = mysql_query ($query);
echo"<select name='cselect1' id='cat1'><option value='0'>Please Select A Category</option>";
// printing the list box select command
while($catinfo=mysql_fetch_array($result)){//Array or records stored in $nt
echo "<option value=\"".htmlspecialchars($catinfo['number'])."\">".$catinfo['cat']."</option>";
}
echo"</select>";
?>
<?php
$query="SELECT * FROM subcat";
$result = mysql_query ($query);
echo"<select name='sselect1' id='subcat1'><option value=''>Sub Category</option>";
echo $subcat1;
echo"'>$sucat1</option>";
// printing the list box select command
while($catinfo=mysql_fetch_array($result)){//Array or records stored in $nt
echo "<option value='".htmlspecialchars($catinfo['subcat'])."' class='".$catinfo['catnumber']."'>".$catinfo['subcat']."</option>";
}
echo"</select>";
?>
<?php
$query="SELECT * FROM cat";
$result = mysql_query ($query);
echo"<select name='cselect2' id='cat2'><option value='0'>Please Select A Category</option>";
// printing the list box select command
while($catinfo=mysql_fetch_array($result)){//Array or records stored in $nt
echo "<option value=\"".htmlspecialchars($catinfo['number'])."\">".$catinfo['cat']."</option>";
}
echo"</select>";
?>
<?php
$query="SELECT * FROM subcat";
$result = mysql_query ($query);
echo"<select name='sselect2' id='subcat2'><option value=''>Sub Category</option>";
echo $subcat1;
echo"'>$sucat1</option>";
// printing the list box select command
while($catinfo=mysql_fetch_array($result)){//Array or records stored in $nt
echo "<option value='".htmlspecialchars($catinfo['subcat'])."' class='".$catinfo['catnumber']."'>".$catinfo['subcat']."</option>";
}
echo"</select>";
?>
<?php
$query="SELECT * FROM cat";
$result = mysql_query ($query);
echo"<select name='cselect3' id='cat3'><option value='0'>Please Select A Category</option>";
// printing the list box select command
while($catinfo=mysql_fetch_array($result)){//Array or records stored in $nt
echo "<option value=\"".htmlspecialchars($catinfo['number'])."\">".$catinfo['cat']."</option>";
}
echo"</select>";
?>
<?php
$query="SELECT * FROM subcat";
$result = mysql_query ($query);
echo"<select name='sselect3' id='subcat3'><option value=''>Sub Category</option>";
// printing the list box select command
while($catinfo=mysql_fetch_array($result)){//Array or records stored in $nt
echo "<option value='".htmlspecialchars($catinfo['subcat'])."' class='".$catinfo['catnumber']."'>".$catinfo['subcat']."</option>";
}
echo"</select>";
?>
What’s going wrong? Thanks for all help, this is a problem thats been bugging me for a long time. Thanks!
I think a solution for you may be to set the default, selected value for your
<select>to whatever the value currently is, when pulled from the DB.Let’s expand out this one:
While I’m not 100% sure what you’re doing, It looks like your grabbing a value based on the id submitted, and setting the var $catselect1 to the categories name?
We can use either, but since the crux of this comes down to $catselect1 let’s use it.
So down here, in this area:
In your while, we need to compare the $catselect1 value with what I believe is your category name, with $catinfo[‘cat’] (which is also a name??) and add a condition like:
So when your form is loaded up, your selects will default to the value set in the DB, and will pass that same value if they’re resubmitted.
Hopefully that makes some sense!
PS: I do prefer this method for simple true/false echos: