PHP всегда оценивает массив $ _POST isset /! Empty / sizeof> 0 в true для ввода html-формы - PullRequest
0 голосов
/ 02 мая 2018

У меня есть базовая форма для загрузки изображения:

<?php
  if(!empty($_POST['?upload_img'])) {
      echo "true<br>";
  } else { echo "false<br>"; }
?>

<html>
  <form action='' method='post' enctype='multipart/form-data'>
    <input type='file' name='input_img' id='input_img'><br>
    <input type='submit' value='Upload Image' name='?upload_img'>
  </form>
</html>

Я бы хотел, чтобы пара логический / оценочный PHP запускалась только один раз для каждой загрузки.

Я пытался оценить, используя !empty, isset, sizeof(foo)>0

Я также пытался найти решение, используя $_SESSION s

Есть ли правильное использование unset или $_POST=array() / $_FILE=array(), которое я пропустил?

Я могу добиться желаемого поведения с помощью сессий:

<?php
  session_start();
  if(!empty($_SESSION['foo'])) {
    echo "true<br>";
  } else { echo "false<br>"; }
?>

<html>
  <?php
    if(!sizeof($_SESSION['foo'])) {
      $_SESSION['foo']=array();
      $_SESSION['foo']['bar']="path/to/the/file.png";
    } else { $_SESSION=array(); }
  ?>
</html>

Как можно добиться того же с помощью ввода <form> вместо этого?

Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Для полноты излагаем общий подход к моей проблеме:

<!--filename:foo.php-->
<?php
  session_start();
  if(isset($_POST['?confirm'])) {
    $_SESSION['input']=$_FILES['input'];
    header("HTTP/1.1 303");
    header("Location: http://$_SERVER[HTTP_HOST]/foo.php");
    die;
  } else if(!empty($_SESSION['input'])) {
    echo "true<br>";
    session_unset();
    session_destroy();
  } else { echo "false<br>"; }
?>
<html>
  <form action='foo.php' method='post' enctype='multipart/form-data'>
    <input type='file' name='input' id='input'><br>
    <input type='submit' value='confirm' name='?confirm'>
  </form>
</html>

На основе Шаблон Post-Redirect-Get в PHP

0 голосов
/ 02 мая 2018

используйте токен

$token = md5(session_id().mt_rand().time());
$_SESSION['token'] = $token;

<input type="hidden" name="token" value="<?php echo $token; ?>" />

позже при обработке изображения удалите токен с помощью unset ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...