【问题标题】:Update mysql database and skip empty fields更新 mysql 数据库并跳过空字段
【发布时间】:2016-03-16 00:33:16
【问题描述】:

我有两个页面,edit.php 和editdone.php。 在edit.php 上,我可以填写信息,这些信息被发送到editdone.php。然后该页面正在运行一个更新 mysql 数据库中数据的查询。

问题是;如果我将 edit.php 上的输入字段留空,editdone.php 会将数据库中的当前信息替换为空数据(无)。

如果在edit.php的字段中写入了某些内容,我想做的是让editdone.php更新数据。因此,如果我选择将某些字段留空,例如只填写表单中的一个字段,我只想用填充的数据更新填充的字段,而不是用空数据替换未填充的字段。如果我没有在edit.php中填写任何数据,那么这些字段应该保留已经存在的数据。

edit.php

<?php

				
if (!empty($error_msg)) {
    echo $error_msg;
}
    
$cn = $_POST['cname'];
    
        ?>

<form action="editdone.php" method="POST" enctype="multipart/form-data" name="editdone" onsubmit="return validateForm()">
    
    <input type="hidden" name="namec" value="<?php echo htmlspecialchars($cn); ?>">
    
   <br>
	Fyll i Företagets namn: <br>
	<input type="text" name="company_name" id="company_name">
	
	<br><br>
	
	 Lägg till en logga:
    <input type="file" name="image" id="image">
    
	<br><br>
	
	Description:<br>
   <textarea name="description" id="description" rows="4" cols="50"></textarea>
   <br>
	<br>
	
   Fyll i välkomnings meddelande:<br>
   <textarea name="welcome_text" id="welcome_text" rows="5" cols="50"></textarea>
   <br>
	<br>
	
	 Fyll i ett tack meddelande:<br>
   <textarea name="thanks_message" id="thanks_message" rows="5" cols="50"></textarea>
   <br>
	<br>
	<input type="submit" name="submit" value="Nästa" />
	
</form>

editdone.php

<?php
    ini_set('display_errors',1);
error_reporting(E_ALL);

if(mysqli_connect_errno())
{
	echo mysqli_connect_error();
}

$namenamec = $_POST['namec'];    
$company_name = $_POST['company_name'];
$description = $_POST['description'];
$welcome_text = $_POST['welcome_text'];
$thanks_message = $_POST['thanks_message'];
$image = addslashes (file_get_contents($_FILES['image']['tmp_name']));
$logo = getimagesize($_FILES['image']['tmp_name']);
$image_type = $logo['mime'];
    

$q = "UPDATE project SET project_name='$company_name', description='$description', image='$image', image_type='$image_type', welcome_text='$welcome_text', thanks_message='$thanks_message' WHERE project_name='$namenamec' ";

$r = mysqli_query($mysqli,$q);
    
if($r)
{
	echo "<br>Information stored successfully";
	
}
?>

【问题讨论】:

    标签: php html mysql


    【解决方案1】:

    尝试像这样替换您的查询。

    $q = "UPDATE project SET ";
    
    $q .= $company_name ? "project_name='$company_name', "  : "";
    $q .= $description ? "description='$description', "  : "";
    $q .= $image ? "image='$image',"  : "";
    ... so on(all fields)
    
    $q .= "WHERE project_name='$namenamec'";
    

    确保删除 , 的最后一个值

    【讨论】:

      【解决方案2】:

      你可以这样做在这里我只创建了一个变量,你可以检查每个发布的变量并将 $q 变量附加为 on

      $q = "UPDATE project SET";
      
      if(isset($_POST['namec']) && $_POST['namec']!=""){
          $q.=" project_name='".$_POST['namec']."' ,";
      }
      
      $q=rtrim(',',$q);
      
      $q.="WHERE project_name=".$namenamec;
      

      【讨论】:

        【解决方案3】:

        对于 edit.php 中的每个输入/文本区域,插入带有前一个值的 &lt;input type="hidden" value="company_name_old&gt; etc...。然后在editdone.php中检查POST中的值是否为空。

        <?php
        
            $company_name = $_POST['company_name'];
        
            if($company_name==""){
                $company_name=$_POST['company_name_old'];
            }
        
            ...
        ?>
        

        【讨论】:

          【解决方案4】:

          1 廉价的“hack”是将字段的当前值分配给输入字段的值,然后将两个字符串或值连接在一起,然后保存该 var。到数据库。

          【讨论】:

            【解决方案5】:
                <?php
                        ini_set('display_errors',1);
                    error_reporting(E_ALL);
            
                    if(mysqli_connect_errno())
                    {
                        echo mysqli_connect_error();
                    }
            
                    $company_name = "";
                    $description = "";
                    $welcome_text = "";
                    $thanks_message = "";
                    $image = "";
                    $logo = "";
                    $image_type = "";
            
                    $namenamec = $_POST['namec'];    
                    $company_name = $_POST['company_name'];
                    $description = $_POST['description'];
                    $welcome_text = $_POST['welcome_text'];
                    $thanks_message = $_POST['thanks_message'];
                    if( isset($_FILES) )
                        {
                            if( !empty($_FILES) )
                                {
                                    if( isset($_FILES['image']['tmp_name']) )
                                        {
                                            if( $_FILES['image']['tmp_name'] != "" && !empty($_FILES['image']['tmp_name']) )
                                                {
                                                    $image = addslashes (file_get_contents($_FILES['image']['tmp_name']));
                                                    if( $image != "" && !empty($image) )
                                                        {
                                                            $logo = getimagesize($_FILES['image']['tmp_name']);
                                                            $image_type = $logo['mime'];
                                                        }
                                                }
                                        }
                                }
                        }
            
            
                    $update_values = array();
                    if($company_name != "")
                        $update_values[] = "project_name='".$company_name."'";  
                    if($description != "")
                        $update_values[] = "description='".$description."'";
                    if($image != "")
                        $update_values[] = "image='".$image."'";
                    if($image_type != "")
                        $update_values[] = "image_type='".$image_type."'";
                    if($welcome_text != "")
                        $update_values[] = "welcome_text='".$welcome_text."'";
                    if($thanks_message != "")
                        $update_values[] = "thanks_message='".$thanks_message."'";
            
                    $update_values_imploded = implode(', ', $update_values);
            
                    if( !empty($update_values) )
                        {
                            $q = "UPDATE project SET $update_values_imploded WHERE project_name='$namenamec' ";
                            $r = mysqli_query($mysqli,$q);
            
                            if($r)
                            {
                                echo "<br>Information stored successfully";
            
                            }
                        }
            
            
            
                    ?>
            

            【讨论】:

            • 它确实有效,但我收到这些错误消息,即使代码完成了它应该做的事情。警告:file_get_contents():第 76 行 C:\xampp\htdocs\wildfire\editdone.php 中的文件名不能为空 警告:getimagesize():C:\xampp\htdocs\wildfire\editdone.php 中的文件名不能为空第 77 行,这些行是 76 和 77; $image = 添加斜杠 (file_get_contents($_FILES['image']['tmp_name'])); $logo = getimagesize($_FILES['image']['tmp_name']);
            • 代码已更新。请检查更新版本。谢谢。
            • 如果您仍然收到警告,请告诉我。谢谢。
            • 是的,但现在只有一个;警告:file_get_contents():第 82 行 C:\xampp\htdocs\wildfire\editdone.php 中的文件名不能为空。就是这一行:$image = addlashes (file_get_contents($_FILES['image']['tmp_name' ]));
            • 完美运行。非常感谢!!
            猜你喜欢
            • 2014-01-18
            • 1970-01-01
            • 2012-08-16
            • 1970-01-01
            • 1970-01-01
            • 2011-09-23
            • 1970-01-01
            • 2023-01-19
            • 1970-01-01
            相关资源
            最近更新 更多