繁体   English   中英

php变量中另一个变量的值

[英]php variable in another variable's value

因此,我有一个定义文件位置的变量,但是在该变量中,我必须将文本与另一个变量组合。 这是我想出的代码:

$id = $_GET["id"];
$file = "../posts/$id.txt";

但是该代码只会找到一个名为.txt的文件

任何帮助表示赞赏

更新

网址为example.com/edit.php?id=0

更新

  <?php session_start();
  $id = $_GET["id"];
  $_SESSION["postId"] = $id;
  if (!isset($_SESSION["loggedin"])) {
  header("location: ../index.php");
  }
          function Read() {
           $id = $_SESSION["postId"];
           $file = "../posts/$id.txt";
           echo file_get_contents( $file);
           }

          function Write() {
               $id = $_SESSION["postId"];
               $file = "../posts/$id.txt";
               echo $file;
               $fp = fopen($file, "w");
               $data = $_POST["tekst"];
               fwrite($fp, $data);
               fclose($fp);

           }
    ?>

<?php
if ($_POST["submit_check"]){
Write();
};
if ($_POST["submit_check"]){
echo '<div class="info">Text updated</div>';
};
?>      

<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<textarea rows="30" cols="200" name="tekst" id="alltext"><?php Read(); ?></textarea><br>
<input type="submit" name="submit" value="Update text">
<input type="hidden" name="submit_check" value="1">
</form>

如果您想要任何文件名,只需:

$filename = $_GET["filename"];
$file = '../posts/'.$filename;

但是,请注意黑客会做一些时髦的事情,例如

$_GET["filename"]="../../../../etc/passwd\x00"; 

;)

另外,我建议改变

<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">

<form action="?" method="post">

尝试像这样更改表单操作:

<form action="<?php echo $_SERVER['PHP_SELF'].'?'.http_build_query($_GET) ?>" method="post">

所以问题在于表单正在重定向到其自身,但是随后它将丢失其参数,因此我从中更改了表单操作:

<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">

对此:

<form action="/users/edit.php?id=<? echo($id); ?>" method="post">

嗯,有一种众所周知的方法来处理涉及登录和会话的重定向,而不是尝试多次从$ _SESSION写入/检索,我只会重定向到另一个页面(在这种情况下为login.php或index.php)使用当前URL的查询字符串(您要返回的位置)。 像这样的东西:

<?php // example.com/edit.php?id=0 

if ($_SESSION["loggedin"]) {
    # REQUEST_URI: URL + query string
    header('Location: login.php?next=' . $_SERVER['REQUEST_URI']);
}

# moving $_GET here
$id = $_GET["id"];
$filename = sprintf('../posts/%s.txt');

function Read($filename) {}

function Read($filename) {}

//...

还有另一个页面(也许是login.php?):

<?php //index.php, login.php (whatever)

# do login, checks...

$redirect_back = $_GET['next']; # sanitize???

header('Location: ' . $redirect_back );

我认为这种方式很实用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM