PHP如何使用另一个if语句中的变量?

问题描述:

我有一点问题。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> 

btn_upload是相互排斥的补充,所以if语句,其执行的btn_upload不还运行附加。

如果你想要它是一个两阶段的过程(上传图片,然后添加),那么你必须设置一个隐藏的输入,其值是文件路径。

但是,理想情况下,用户将填写姓名并提供图像,然后将它们一起提交。为了做到这一点,将所有输入放在同一个表单元素中,并远程“添加”按钮。

+0

谢谢你的男人。 我试了一下,它的工作原理。 我永远不会认为它会如此简单。 –

由于您的两个表单都是独立工作的(彼此之间有任何关联关系),所以$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 
    } 
}