PHP может разместить глобальную переменную внутри образца переменной: $ names = $ _FILES ["dfile"]; - PullRequest
1 голос
/ 24 августа 2009

Попытка построить админ-панель для загрузки текста и изображений здесь - HTML-страница. HTML-страница работает нормально, это php-страница, которая не работает html здесь просто для справки.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<title>Administartor Panel</title>
<head>
<link rel="stylesheet" type="text/css" href="admin.css" />
</head>
<body>
<h1>Heritage House Administartor Panel</h1>
<br/>
<h2>
<a href="#eone">Event One</a>&nbsp;
<a href="#etwo">Event Two</a>&nbsp;
<a href="#ethree">Event Three</a>&nbsp;
<a href="#efour">Event Four</a>&nbsp;
<a href="#efive">Event Five</a>&nbsp;
<a href="#esix">Event Six</a>&nbsp;
</h2>
<br/>
<table>
<tr>
<td id="eone">
<br/>
<p>Event One</P>
<p> Please name the picture file1 before uploading.</p>
<form action="upload.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="afile" id="afile" />
<br />
<input type="submit" name="submit" value="submit" />
</form>
<form action="WriteTxt1.php" method="post"
enctype="multipart/form-data">
<label for="file">Input Text for artical One:</label>
<textarea rows="25" cols="100" name="content">
</textarea>
<br />
<input type="submit" name="submit" value="Save" />
</form>
</td>
</tr>
<tr>
<td id="etwo">
<p >Event Two</P>
<p> Please name the picture file2 before uploading.</p>
<form action="upload.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="bfile" id="bfile" />
<br />
<input type="submit" name="submit" value="submit" />
</form>
<form action="WriteTxt2.php" method="post"
enctype="multipart/form-data">
<label for="file">Input Text for artical Two:</label>
<textarea rows="25" cols="100" name="content">
</textarea>
<br />
<input type="submit" name="submit" value="Save" />
</form>
</td>
</tr>
<tr>
<td id="ethree" >
<p >Event Three</P>
<p> Please name the picture file3 before uploading.</p>
<form action="upload.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="cfile" id="cfile" />
<br />
<input type="submit" name="submit" value="submit" />
</form>
<form action="WriteTxt3.php" method="post"
enctype="multipart/form-data">
<label for="file">Input Text for artical Three:</label>
<textarea rows="25" cols="100" name="content">
</textarea>
<br />
<input type="submit" name="submit" value="Save" />
</form>
</td>
</tr>
<tr>
<td id="efour" >
<p >Event Four</P>
<p> Please name the picture file4 before uploading.</p>
<form action="upload.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="dfile" id="dfile" />
<br />
<input type="submit" name="submit" value="submit" />
</form>
<form action="WriteTxt4.php" method="post"
enctype="multipart/form-data">
<label for="file">Input Text for artical Four:</label>
<textarea rows="25" cols="100" name="content">
</textarea>
<br />
<input type="submit" name="submit" value="Save" />
</form>
</td>
</tr>
<tr>
<td id="efive" >
<p >Event Five</P>
<p> Please name the picture file5 before uploading.</p>
<form action="upload.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="efile" id="efile" />
<br />
<input type="submit" name="submit" value="submit" />
</form>
<form action="WriteTxt5.php" method="post"
enctype="multipart/form-data">
<label for="file">Input Text for artical Five:</label>
<textarea rows="25" cols="100" name="content">
</textarea>
<br />
<input type="submit" name="submit" value="Save" />
</form>
</td>
</tr>
<tr>
<td id="esix" >
<p >Event Six</P>
<p> Please name the picture file6 before uploading.</p>
<form action="upload.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="ffile" id="file6" />
<br />
<input type="submit" name="submit" value="submit" />
</form>
<form action="WriteTxt6.php" method="post"
enctype="multipart/form-data">
<label for="file">Input Text for artical Six:</label>
<textarea rows="25" cols="100" name="content">
</textarea>
<br />
<input type="submit" name="submit" value="Save" />
</form>
</td>
</tr>
</body>
</html>

пытается переименовать загруженные файлы в зависимости от того, из какой они формы, на html-странице afile, bfile и т. Д. Я пробовал этот файл php несколькими различными способами. Я могу заставить его работать, когда я исключаю большой оператор IF и создаю 6 отдельных файлов для загрузки, но я надеялся сделать его одним файлом Это то, что, как я считаю, делает невозможным перемещение глобальных переменных в обычные переменные?

        <?php
    //This function separates the extension from the rest of the file name and returns it
    function findexts ($filename)
    {
    $filename = strtolower($filename) ;
    $exts = split("[/\\.]", $filename) ;
    $n = count($exts)-1;
    $exts = $exts[$n];
    return $exts;
    } 
    //This if statement assigns the new file name to a variable and displays a message.
    if (file_exists($_FILES["afile"]["tmp_name"]))
      {
      $new = "file1.";
      $type = $_FILES ["afile"] ["type"];
      $size = $_FILES ["afile"] ["size"];
      $error = $_FILES ["afile"] ["error"];
      $name = $_FILES ["afile"] ["name"];
      $tmpname = $_FILES["afile"]["tmp_name"];
      $names = "afile";
      echo "file1 Uploaded <br />";
      }
    elseif (file_exists($_FILES["bfile"]["tmp_name"]))
      {
      $new = "file2.";
      $type = $_FILES ["bfile"] ["type"];
      $size = $_FILES ["bfile"] ["size"];
      $error = $_FILES ["bfile"] ["error"];
      $name = $_FILES ["bfile"] ["name"];
      $tmpname = $_FILES["bfile"]["tmp_name"];
      $names = "bfile";
      echo "file2 Uploaded <br />";
      }
    elseif (file_exists($_FILES["cfile"]["tmp_name"]))
      {
      $new = "file3.";
      $type = $_FILES ["cfile"] ["type"];
      $size = $_FILES ["cfile"] ["size"];
      $error = $_FILES ["cfile"] ["error"];
      $name = $_FILES ["cfile"] ["name"];
      $tmpname = $_FILES["cfile"]["tmp_name"];
      $names = "cfile";
      echo "file3 Uploaded <br />";
      }
    elseif (file_exists($_FILES["dfile"]["tmp_name"]))
      {
      $new = "file4.";
      $type = $_FILES ["dfile"] ["type"];
      $size = $_FILES ["dfile"] ["size"];
      $error = $_FILES ["dfile"] ["error"];
      $name = $_FILES ["dfile"] ["name"];
      $tmpname = $_FILES["dfile"]["tmp_name"];
      $names = "dfile";
      echo "file4 Uploaded <br />";
      }
    elseif (file_exists($_FILES["efile"]["tmp_name"]))
      {
      $new = "file5.";
      $type = $_FILES ["efile"] ["type"];
      $size = $_FILES ["efile"] ["size"];
      $error = $_FILES ["efile"] ["error"];
      $name = $_FILES ["efile"] ["name"];
      $tmpname = $_FILES["efile"]["tmp_name"];
      $names = "efile";
      echo "file5 Uploaded <br />";
      }
    elseif (file_exists($_FILES["ffile"]["tmp_name"]))
      {
      $new = "file6.";
      $type = $_FILES ["ffile"] ["type"];
      $size = $_FILES ["ffile"] ["size"];
      $error = $_FILES ["ffile"] ["error"];
      $name = $_FILES ["ffile"] ["name"];
      $tmpname = $_FILES["ffile"]["tmp_name"];
      $names = "ffile";
      echo "file6 Uploaded <br />";
      }

    //This applies the function to our file
    $ext = findexts ($_FILES ['$names'] ['name']) ;
        //This assigns the subdirectory you want to save into.
        $targett = "forms/upload/";
        //This combines the directory, the new file name, and the extension
        $target = $targett . $new.$ext; 
        // makes sure image meets specs
    if ((($type == "image/gif")
    || ($type == "image/jpeg")
    || ($type == "image/pjpeg"))
    && ($size < 2000000))
      {
      if ( $error > 0)
        {
        echo "Return Code: " . $error . "<br />";
        }
      else
        {
        echo "Thank You! <br />";
        }
    //saves uploaded file
        if (file_exists("forms/upload/" . $name))
          {
          move_uploaded_file( $tmpname, $target);
          echo $name . " Old File Over Written. ";
          }
        else
          {
          move_uploaded_file( $tmpname, $target);
          echo "Stored in: " . "forms/upload/" . $name;
          }   
?> 

Может быть, мое утверждение elseif нарушено?

Я играю с этим php-материалом только около недели, так что, если я не в курсе, извините за потраченное время.

Может быть, если я попытаюсь сделать 6 функций с глобальными move_uploaded_file($_FILES["file"]["tmp_name"], $target);, чем поместить их в оператор elseif, это может сработать?

это копия рабочей страницы php

<?php
//This function separates the extension from the rest of the file name and returns it
function findexts ($filename)
{
$filename = strtolower($filename) ;
$exts = split("[/\\.]", $filename) ;
$n = count($exts)-1;
$exts = $exts[$n];
return $exts;
} 
//This applies the function to our file
$ext = findexts ($_FILES['afile']['name']) ;
    //This line assigns a random number to a variable. You could also use a timestamp here if you prefer.
    $new = "file1.";
    //This assigns the subdirectory you want to save into... make sure it exists!
    $targett = "forms/upload/";
    //This combines the directory, the random file name, and the extension
    $target = $targett . $new.$ext; 
if ((($_FILES["afile"]["type"] == "image/gif")
|| ($_FILES["afile"]["type"] == "image/jpeg")
|| ($_FILES["afile"]["type"] == "image/pjpeg"))
&& ($_FILES["afile"]["size"] < 2000000))
  {
  if ($_FILES["afile"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["afile"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["afile"]["name"] . "<br />";
    echo "Type: " . $_FILES["afile"]["type"] . "<br />";
    echo "Size: " . ($_FILES["afile"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["afile"]["tmp_name"] . "<br />";

    if (file_exists("forms/upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["afile"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["afile"]["tmp_name"], $target);
      echo "Stored in: " . "forms/upload/" . $_FILES["afile"]["name"];
      }
    else
      {
      echo "Invalid file";
      }

Ответы [ 4 ]

1 голос
/ 24 августа 2009

Это чертовски много повторного кода! Вам действительно нужно 6 отдельных HTML-форм? Почему бы не иметь одну форму с выпадающим списком для выбора события?

<select name="event">
    <option value="afile">Event One</option>
    <option value="bfile">Event Two</option>
    ...etc
</select>

Для ввода используйте:

<input type="file" name="userfile" id="file" />

Тогда вместо длинных предложений if / else просто сделайте что-то вроде этого:

if ( isset($_POST['event']) && file_exists($_FILES['userfile']['tmp_name']) )
{
    // base this code on the value of $_POST['event']
}
0 голосов
/ 26 августа 2009

Я просто хотел поблагодарить всех, кто оставлял ответы на мои вопросы, я был очень удивлен тем, как быстро я ответил на мой вопрос. После попытки и проверки ваших ответов я все еще не мог найти какое-либо реальное решение моей проблемы, и только когда я обнаружил, что забыл закончить утверждение if, я начал продвигаться к ответу.

 if ((($type == "image/gif")
    || ($type == "image/jpeg")
    || ($type == "image/pjpeg"))
    && ($size < 2000000))
      {

Теперь, когда это утверждение имеет окончание, и у меня было время изучить все ваши ответы, я уверен, что эта страница будет работать мне по вкусу в кратчайшие сроки. Это работает сейчас, но их еще предстоит усовершенствовать. Вот мои рабочие html и php страницы.

HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<!-- 
html admin page for HH 
-->
<title>Administartor Panel</title>
<head>
<link rel="stylesheet" type="text/css" href="admin.css" />
</head>
<body>
<h1>Heritage House Administartor Panel</h1>
<br/>
<table>
<tr>
<td id="eone">
<br/>
<p>Event Uploader</P>
<form action="formupload.php" method="post"
enctype="multipart/form-data">
<label for="selection">Please select the event you would like to edit.</label>
<select name="selection">
<option value="file1">Event1</option>
<option value="file2">Event2</option>
<option value="file3">Event3</option>
<option value="file4">Event4</option>
<option value="file5">Event5</option>
<option value="file6">Event6</option>
</select>
<br />
<p> Please upload your event picture file here.</p>
<p align="center">
<label for="file">Photo:</label>
<input type="file" name="file" id="file" />
<input type="submit" name="submit" value="Upload" />
</p>
</form>
<form action="WriteTxt1.php" method="post"
enctype="multipart/form-data">
<label for="file">Input Text for the event artical:</label>
<textarea rows="25" cols="100" name="content">
</textarea>
<br />
<input type="submit" name="submit" value="Save" />
</form>
</td>
</tr>

</form>
</td>
</tr>
</body>
</html>

PHP

    //This function separates the extension from the rest of the file name and returns it
    function findexts ($filename)
    {
    $filename = strtolower($filename) ;
    $exts = split("[/\\.]", $filename) ;
    $n = count($exts)-1;
    $exts = $exts[$n];
    return $exts;
    } 
    //This if statement assigns the new file name to a variable from the value of the options menu in the html form selection.
 $new = $_POST ["selection"] . "."; 
    //This applies the function to our file
    $ext = findexts ($_FILES ["file"] ["name"]) ;
        //This assigns the subdirectory you want to save into.
        $targett = "forms/upload/";
        //This combines the directory, the new file name, and the extension
        $target = $targett . $new.$ext; 
        // makes sure image meets specs
    if ((($_FILES ["file"] ["type"] == "image/gif")
    || ($_FILES ["file"] ["type"] == "image/jpeg")
    || ($_FILES ["file"] ["type"] == "image/pjpeg"))
    && ($_FILES ["file"] ["size"]< 2000000))
      {
      echo "file check pass<br />";
      }
      //makes an error if file does not meet standards 
      if ( $_FILES ["file"] ["error"] > 0)
        {
        echo "Return Code: " . $_FILES ["file"] ["error"] . "<br />";
        }
      else
        {
        echo "Thank You! <br />";
        }
    //saves uploaded file
        if (file_exists("forms/upload/" . $_FILES ["file"] ["name"]))
          {
          move_uploaded_file( $_FILES ["file"]["tmp_name"], $target);
          echo $_FILES ["file"] ["name"] . " Old File Over Written. ";
          }
        else
          {
          move_uploaded_file( $_FILES["file"]["tmp_name"], $target);
          echo "Stored in: " . "forms/upload/" . $_FILES ["file"] ["name"];
          }   
?>
<html>
<!-- 
html to return user to admin page 
-->
<title>
Upload Result
</title>
<head>
<p>
<br />
Back To Admin Page
</p>
</head>
<body>
<form action="">
<a href="adminarea.html">
<input type="button" value="Back" />
</a>
</form>
</body>
</html>

Примечание: я использую только notepad2 и firefox для редактирования и проверки ошибок моего кода. Я предполагаю, что их лучшие способы отладки php их права?

0 голосов
/ 24 августа 2009

Очень близко к работе на самом деле.

//Uses $names as a key in $_FILES - no single quotes for variable expansion....
$ext = findexts($_FILES[$names]['name']);

Могу ли я также предложить использовать какой-то цикл вместо большого elseif с кучей вставленного кода. Используются два улучшения: foreach в массиве $ _FILES и extract

foreach ($_FILES as $fileKey => $values)
{
  // Sets $type, $size, $name, $tmp_name, $error
  extract($values);
  //This applies the function to our file
  $ext = findexts($name) ;

  //This assigns the subdirectory you want to save into.
  $targett = "forms/upload/";
  //This combines the directory, the new file name, and the extension
  $target = $targett . $new.$ext; 
  // makes sure image meets specs
  if ((($type == "image/gif")
    || ($type == "image/jpeg")
    || ($type == "image/pjpeg"))
    && ($size < 2000000))
  {
    if ($error > 0)
    {
      echo "Return Code: " . $error . "<br />";
    }
    else
    {
      echo "Thank You! <br />";
    }
    //saves uploaded file
    if (file_exists("forms/upload/" . $name))
    {
      move_uploaded_file( $tmp_name, $target);
      echo $name . " Old File Over Written. ";
    }
    else
    {
      move_uploaded_file( $tmp_name, $target);
      echo "Stored in: " . "forms/upload/" . $name;
    }         
  }
}
0 голосов
/ 24 августа 2009

Может быть, вы должны использовать

isset($_FILES["afile"])

вместо

file_exists($_FILES["afile"]["tmp_name"])

- редактирование

, чтобы ответить на ваш вопрос в заголовке: это возможно, если, например, установлено $ _FILES ["afile"]. Таким образом, у вас будет массив в новой переменной.

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