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

时间:2017-07-02 17:50:39

标签: php variables if-statement

我有点问题。

我正在制作将简单文章提交到数据库的表单,然后将其显示在admin.php页面上。

除了图像,一切正常。 首先我将它上传到我的服务器,然后我尝试将字符串(此图像的路径)添加到数据库。

但是我不能在第二个if语句中使用变量$ filepath。 我可以在图片上传后回复它,但不能在其他if。

中使用 你帮我吗? 提前谢谢。

这是代码:

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

2 个答案:

答案 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
    }
}

答案 1 :(得分:0)

btn_upload是互斥的,因此为btn_upload执行的if语句也不会为add运行。

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

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