2015-12-10 33 views
2

我有兩個頁面,edit.php和editdone.php。 在edit.php上,我可以填充正在發送到editdone.php的信息。然後該頁面將運行一個查詢來更新mysql數據庫中的數據。更新mysql數據庫並跳過空字段

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

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

edit.php

<?php 
 

 
\t \t \t \t 
 
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> 
 
\t Fyll i Företagets namn: <br> 
 
\t <input type="text" name="company_name" id="company_name"> 
 
\t 
 
\t <br><br> 
 
\t 
 
\t Lägg till en logga: 
 
    <input type="file" name="image" id="image"> 
 
    
 
\t <br><br> 
 
\t 
 
\t Description:<br> 
 
    <textarea name="description" id="description" rows="4" cols="50"></textarea> 
 
    <br> 
 
\t <br> 
 
\t 
 
    Fyll i välkomnings meddelande:<br> 
 
    <textarea name="welcome_text" id="welcome_text" rows="5" cols="50"></textarea> 
 
    <br> 
 
\t <br> 
 
\t 
 
\t Fyll i ett tack meddelande:<br> 
 
    <textarea name="thanks_message" id="thanks_message" rows="5" cols="50"></textarea> 
 
    <br> 
 
\t <br> 
 
\t <input type="submit" name="submit" value="Nästa" /> 
 
\t 
 
</form>

editdone.php

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

 
if(mysqli_connect_errno()) 
 
{ 
 
\t 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) 
 
{ 
 
\t echo "<br>Information stored successfully"; 
 
\t 
 
} 
 
?>

回答

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

       } 
      } 



     ?> 
+0

它確實有效,但我得到這些錯誤消息,即使代碼做它的意圖。 警告:file_get_contents()函數:文件名不能在C空:\ XAMPP \ htdocs中\野火\ editdone.php上線76 警告:和getimagesize():文件名不能爲空在C:\ XAMPP \ htdocs中\野火\第77行上的editdone.php 這些行是76和77; $ image = addslashes(file_get_contents($ _ FILES ['image'] ['tmp_name'])); $ logo = getimagesize($ _ FILES ['image'] ['tmp_name']); – Max

+0

代碼已更新。請檢查更新的版本。謝謝。 – user1544541

+0

如果您仍然收到警告,請隨時告訴我。謝謝。 – user1544541

0

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

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

請確保您刪除,的最後一個值

0

你可以像這樣在這裏我僅取得了一個變量,你可以檢查每個發佈變量和追加$ Q變量作爲

$q = "UPDATE project SET"; 

if(isset($_POST['namec']) && $_POST['namec']!=""){ 
    $q.=" project_name='".$_POST['namec']."' ,"; 
} 

$q=rtrim(',',$q); 

$q.="WHERE project_name=".$namenamec; 
0

對於每個輸入/ textarea的在edit.php,插入與先前值的<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']; 
    } 

    ... 
?>