php - Mysql 更新不适用于隐藏字段

标签 php mysql

我有一个相当基本的 crud 应用程序网站的问题。我在编辑部分遇到问题,我在页面上有文本输入和选择下拉菜单。对于所有文本输入,我能够使该行的值等于数据库中已有的值,因此,如果我通过 edit.php 并且不编辑某些字段,该值仍然保留对于我没有接触过的领域,没有擦干净。不幸的是,我正在使用 Jquery 来填充一些选择/下拉菜单,所以这种方法不起作用。

示例场景:

我是一名用户,添加一个企业,第一个类别是餐馆,子类别是美国食品,第二个类别是家庭服务,子类别是家庭维修。然后我单击“保存”按钮并插入我的类别。然后我意识到我忘记将我的姓名和电话号码添加到我的列表中,所以我编辑了列表,这次只插入我的姓名和电话号码并将所有其他字段留空。现在,我第一次保存的类别和子类别现在设置为 0 或空白。

我对此的解决方案是填充一些隐藏字段(命名为 beforecat1、beforesubcat1 等),这些字段存储了字段之前的值,然后如果没有触及选择,则插入值隐藏字段。不幸的是,有些东西不起作用。

<? 
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' "));

?>

这是我的表单部分:

<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>";
?>

怎么了?感谢大家的帮助,这个问题困扰我很久了。谢谢!

最佳答案

我认为您的解决方案可能是为您的 <select> 设置默认的选定值从数据库中提取时,无论当前值是什么。

让我们展开这个:

 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'];
  }

虽然我不是 100% 确定您在做什么,但您似乎是根据提交的 ID 获取一个值,并将 var $catselect1 设置为类别名称?

我们可以使用其中任何一个,但由于问题的症结在于 $catselect1 让我们使用它。

所以在这里,在这个区域:

<?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>";
?>

同时,我们需要将 $catselect1 值与我认为是您的类别名称进行比较,使用 $catinfo['cat'](这也是一个名称??)并添加如下条件:

if (  $catselect1 == $catinfo['cat'] )
  //this one is selected, because the values match!
  echo "<option default selected value=\"".htmlspecialchars($catinfo['number'])."\">".$catinfo['cat']."    </option>";
} else {
  //do normally
  echo "<option  value=\"".htmlspecialchars($catinfo['number'])."\">".$catinfo['cat']."     </option>";
}

因此,当您的表单加载时,您的选择将默认为数据库中设置的值,如果重新提交,将传递相同的值。

希望这是有道理的!

PS:对于简单的真/假 echo ,我确实更喜欢这种方法:

 echo ( $comparison == $comparison ) ? 'true' : 'false';

关于php - Mysql 更新不适用于隐藏字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11731773/

相关文章:

javascript - AJAX - 发送到另一个 php 文件,同时保持在同一页面上

mysql - 查询精确词搜索

mysql - MYSQL存储函数中的SELECT查询

PHP:作为数组中键的值之一

php - SQL:如何每天选择一条记录,假设每天包含超过 1 个值 MySQL

javascript - 如何像php页面中的新闻提要一样在循环中垂直滚动div内容

php - 准备()与查询()mysqli

php - mysql_insert_id() 很少返回 0

MySQL 用户定义函数发送 windows 消息

javascript - Ajax 表单提交有效但没有响应