变量未在链接中使用?

时间:2014-04-28 17:22:52

标签: php hyperlink location

我需要帮助 - 我真的不知道我在哪里做错了!

我需要在代码下面记住加载下一页的变量。该页面使用如下链接加载:

editgallery.php?folder=big_fish&id=459

现在我想让下面的代码记住文件夹变量:big_fish用于生成下一个链接。在代码的底部我使用"位置"加载下一页。它看起来像:

header("Location: galleries.php?folder".$folder." ");

点击"更新"它应该将用户发回到他们来自的页面。在以下代码中的形式:

if(!$_POST["submit"])
{
include "header.php";
$query = mysql_query("select name, type, folder, description , displaydate from galleries where id = '".$_GET["id"]."' ");
$row = mysql_fetch_row($query);
$name = $row[0];
$type = $row[1];
$folder = $row[2];
$description = $row[3];
$displaydate = $row[4];
?>

<form method="POST" action="<?=$_SERVER["PHP_SELF"]?>" name="myform" id="myform">
<center><table width="<?=$setting["tablewidth"]?>" class="admintable" cellpadding="<?=$setting["cellpadding"]?>">
<tr>
    <td class="adminheader" colspan="2">&nbsp;<b>Edit Gallery:</b></td>
</tr>

        <tr>    
            <td class="admincell">&nbsp;Name:</td>
            <td class="admincell">
<input type="text" name="name" value="<?=$name?>" size="40"></td>
</tr>
        <tr>    
            <td class="admincell">&nbsp;Category:</td><td class="admincell">

<?=$folder?>

</td>
</tr>
<tr valign="top">
<td class="admincell">&nbsp;Display Date:</td>
<td class="admincell" align="">
    <input style="border-style:hidden" type="text" value="<?=$displaydate?>" id="from" id="<?php echo $_REQUEST["from"]; ?>" name="displaydate" size="40">
    (yyyymmdd - Like <?=date('Ymd');?> or <?=date('Y-m-d');?>)</td>
</tr>
<tr valign="top">
<td class="admincell">&nbsp;Description:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td class="admincell">

<textarea id="Enter you description of the photo set here" name="description"><?=$description?></textarea></td>
<!-- http://ckeditor.com/ -->          
            <script>
                CKEDITOR.replace( 'description' );
            </script>
</tr>
<tr>
<td class="admincell" colspan="2"><input type="hidden" name="id" value="<?=$_GET["id"]?>"><center>
<input type="submit" name="submit" value="Update"></center></td>
</tr>

</table></center>
</form><center>
<p>



</table></center>

<?
include "footer.php";
}
else
{

mysql_query("update galleries set name = '".$_POST["name"]."', description = '".$_POST["description"]."' , displaydate = '" . $_POST["displaydate"] . "' where id = '".$_POST["id"]."' ");

header("Location: galleries.php?folder".$folder." ");
//header("Location: galleries.php");
}

任何人都可以看到为什么链接中的$文件夹名称没有保存到位置链接 - 为什么代码不能&#34;转移&#34;它来自editgallery.php?folder=big_fish&id=459链接,位于("Location: galleries.php?folder".$folder." ");

之类的位置

请建议。

4 个答案:

答案 0 :(得分:0)

我将在这里重新写下我的答案。

您的代码可以使用一些清理。以下是我要解决的一些问题:

<input style="border-style:hidden" 
       type="text" 
       value="<?=$displaydate?>" 
       id="from" 
       id="<?php echo $_REQUEST["from"]; ?>" 
       name="displaydate" 
       size="40">

你有两个身份证。没有bueno。

<textarea id="Enter you description of the photo set here" name="description"><?=$description?></textarea>

让您的ID包含空格并不是一个好主意。你的意思是使用title属性吗?

<input type="hidden" name="id" value="<?=$_GET["id"]?>">

这很好。我认为这是你的主要问题所在。 您需要使用文件夹

添加另一个隐藏的输入
<input type="hidden" name="folder" value="<?=$_GET["folder"]?>">

这样,当发布表单时,该文件夹将以$_POST['folder']的形式发送。

然后,在这里:

header("Location: galleries.php?folder".$folder." ");

应该成为:

header("Location: galleries.php?folder=".$_POST['folder']);

试试并告诉我们会发生什么。

答案 1 :(得分:0)

你错过了一个等号:

header("Location: galleries.php?folder".$folder." ");

应该是

header("Location: galleries.php?folder=".$folder." ");

您可能需要考虑使用http_build_query来处理构建网址。

答案 2 :(得分:0)

您容易受到SQL injection attacks的攻击,并且有错别字:

header("Location: galleries.php?folder=".$folder." ");
                                      ^---missing

基本上,您正在生成一个类似于

的链接
 galleries.php?folderfoo

而不是

 galleries.php?folder=foo

答案 3 :(得分:0)

除了缺少=之外,我没有看到你如何设置变量(或数据库连接......)。

您可能需要以下内容:

header("Location: galleries.php?folder=" . $_GET['folder']);

您还应该切换到PDO或mysqli和预处理语句,因为mysql_*函数已被弃用,并且您有SQL注入问题。

编辑:请注意,当设置POST请求/ $_POST["submit"]时,只会执行脚本的最后两行:

  • 没有数据库连接的mysql查询
  • 使用未定义的header()变量进行$folder调用。