簡體   English   中英

更新mysql數據庫並跳過空字段

[英]Update mysql database and skip empty fields

我有兩個頁面,edit.php 和editdone.php。 在edit.php 上,我可以填寫信息,這些信息將被發送到editdone.php。 然后該頁面運行一個查詢來更新 mysql 數據庫中的數據。

問題是; 如果我將 edit.php 上的輸入字段留空,editdone.php 將用空數據(無)替換數據庫中的當前信息。

如果在edit.php 的字段中寫入了某些內容,我想要做的是使editdone.php 更新數據。 因此,如果我選擇將某些字段留空,例如只填寫表單中的一個字段,我只想用已填充的數據更新已填充的字段,而不是用空數據替換未填充的字段。 如果我沒有在 edit.php 中填寫任何數據,那么這些字段應該保留已經存在的數據。

編輯.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>

編輯完成的.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"; } ?>

嘗試像這樣替換您的查詢。

$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'";

確保您刪除,為最后一個值

你可以在這里這樣做我只做了一個變量你可以檢查每個發布的變量並將 $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;

對於edit.php 中的每個 input/textarea ,插入一個<input type="hidden" value="company_name_old> etc...與之前的值。然后在editdone.php 中,檢查 POST 中的值是否為空。

<?php

    $company_name = $_POST['company_name'];

    if($company_name==""){
        $company_name=$_POST['company_name_old'];
    }

    ...
?>

1便宜的“hack”是將字段的當前值分配給輸入字段的值,然后將兩個字符串或值連接在一起,然后保存該變量。 到數據庫。

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

                }
            }



        ?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM