2017-07-02 30 views
0

我有一點問題。PHP如何使用另一個if語句中的變量?

我正在製作提交簡單的文章到數據庫,然後顯示在admin.php頁面上的表單。

一切工作正常,除了圖像。 首先我將它上傳到我的服務器,然後嘗試將字符串(此圖像的路徑)添加到數據庫。

但是我不能在第二個if語句中使用變量$ filepath。 我可以在圖片上傳後回顯,但不能在其他情況下使用。

你能幫助我嗎? 在此先感謝。

這裏是代碼:

<?php session_start(); 
    if (!isset($_SESSION['logged-in'])) 
    { 
    header('Location: index.php'); 
    exit(); 
    } 
?> 
<?php 
include('db_connect.php'); 
if(isset($_POST['btn_upload'])) { 
    $filetmp = $_FILES["file_img"]["tmp_name"]; 
    $filename = $_FILES["file_img"]["name"]; 
    $filetype = $_FILES["file_img"]["type"]; 
    $filepath = "photo/".$filename; 

    move_uploaded_file($filetmp,$filepath); 

    $result = mysqli_query($mysqli, "INSERT INTO upload_img (img_name,img_path,img_type) VALUES ('$filename','$filepath','$filetype')"); 

    echo '<img src="' . $filepath . '" alt="">'; 
    echo $filepath; 
} 

if (isset($_POST['add'])) { 
    $title = strip_tags($_POST['title']); 
    $content = strip_tags($_POST['content']); 
    $image = strip_tags($filepath); 
    $statement = $mysqli->prepare("INSERT bikes (title,image,content) VALUES (?,?,?)"); 
    $statement->bind_param("sss",$title,$image,$content); 
    $statement->execute(); 
    $statement->close(); 
    header('Location: admin.php'); 
} 
?> 


<form method="post" action="" class="ui form"> 
    <div class="required field"> 
    <label>Title</label> 
    <input type="text" name="title" id="title"> 
    </div> 
    <div class="required field"> 
    <label>Content</label> 
    <textarea name="content" id="content" cols="30" rows="10"></textarea> 
    </div> 
    <div class="required field"> 
    <label>Image</label> 
    <input type="text" name="image" id="image"> 
    </div> 
    <input type="submit" class="ui primary button" id="add" name="add" value="Add article"></input> 
</form> 

<form action="addbike.php" method="post" enctype="multipart/form-data"> 
    <input type="file" name="file_img" /> 
    <input type="submit" name="btn_upload" value="Upload"> 
</form> 

回答

0

btn_upload是相互排斥的補充,所以if語句,其執行的btn_upload不還運行附加。

如果你想要它是一個兩階段的過程(上傳圖片,然後添加),那麼你必須設置一個隱藏的輸入,其值是文件路徑。

但是,理想情況下,用戶將填寫姓名並提供圖像,然後將它們一起提交。爲了做到這一點,將所有輸入放在同一個表單元素中,並遠程「添加」按鈕。

+0

謝謝你的男人。 我試了一下,它的工作原理。 我永遠不會認爲它會如此簡單。 –

1

由於您的兩個表單都是獨立工作的(彼此之間有任何關聯關係),所以$filepath變量在第二個if區塊中將無法訪問。但是,您可以做的是將兩個表單合併在一起,這樣您的表單的所有文本數據和圖像都可以在一個提交按鈕中訪問。

HTML:

<form method="post" action="" class="ui form" enctype="multipart/form-data"> 
    <div class="required field"> 
     <label>Title</label> 
     <input type="text" name="title" id="title"> 
    </div> 
    <div class="required field"> 
     <label>Content</label> 
     <textarea name="content" id="content" cols="30" rows="10"></textarea> 
    </div> 
    <div class="required field"> 
     <label>Image</label> 
     <input type="text" name="image" id="image"> 
    </div> 
    <input type="file" name="file_img" /> 
    <input type="submit" class="ui primary button" id="add" name="add" value="Add article"></input> 
</form> 

PHP:

if (isset($_POST['add']) && is_uploaded_file($_FILES["file_img"]["tmp_name"])) { 
    $filetmp = $_FILES["file_img"]["tmp_name"]; 
    $filename = $_FILES["file_img"]["name"]; 
    $filetype = $_FILES["file_img"]["type"]; 
    $filepath = "photo/".$filename; 

    if(move_uploaded_file($filetmp, $filepath)){ 
     $result = mysqli_query($mysqli, "INSERT INTO upload_img (img_name,img_path,img_type) VALUES ('$filename','$filepath','$filetype')"); 
     if($result){ 
      $title = strip_tags($_POST['title']); 
      $content = strip_tags($_POST['content']); 
      $image = strip_tags($filepath); 
      $statement = $mysqli->prepare("INSERT bikes (title,image,content) VALUES (?,?,?)"); 
      $statement->bind_param("sss",$title,$image,$content); 
      $statement->execute(); 
      $statement->close(); 

      header('Location: admin.php'); 
      exit(); 
     }else{ 
      // error handling 
     } 
    }else{ 
     // error handling 
    } 
}