【问题标题】:Accessing a POST variable in another PHP File [duplicate]访问另一个 PHP 文件中的 POST 变量 [重复]
【发布时间】:2013-01-15 13:45:05
【问题描述】:

可能重复:
Simplest method of passing one php variable in a url

我正在制作一个测验应用程序。在教师端,教师可以输入主题名称(我将使用它形成一个虚 URL),然后输入 3 个带有可能选项的问题,包括其中一个的答案。每次教师创建测验时,都会创建一个包含问题、选项和答案的新表格。

我的 db.php 文件:

<?php
mysql_connect("localhost","root","");
mysql_select_db("quiz");
?>

我的faculty.php 文件:

<form action="fac_handler.php" method="POST">
Quiz Topic:<br><input type="text" name="topic"><br><br>Enter Questions:<br><br>
<?php
$a="a";
$b="b";
$c="c";
$d="d";
for ($i=1; $i<=3;$i++) 
{ 
?>
Question <?php echo $i?>:<br>
<textarea type="text" name="<?php echo "q".$i;?>"></textarea><br>
<br>
<input type="text" name="<?php echo $a.$i; ?>">&nbsp;&nbsp;
<input type="text" name="<?php echo $b.$i; ?>">&nbsp;&nbsp;
<input type="text" name="<?php echo $c.$i; ?>">&nbsp;&nbsp;
<input type="text" name="<?php echo $d.$i; ?>">&nbsp;&nbsp;<br><hr>
<?php
}
?>
<br>
<input type="submit" value="Submit">
</form>

我的 fac_handler.php 文件:

<?php
require "db.php";

if(isset($_POST['topic']) && !empty($_POST['topic']))
{
$topic=$_POST['topic'];

if(isset($_POST['q1'])&&isset($_POST['a1'])&&isset($_POST['b1'])&&isset($_POST['c1'])&&isset($_POST['d1'])) 
{
if(!empty($_POST['q1']) && !empty($_POST['a1']) && !empty($_POST['b1']) && !empty($_POST['c1']) && !empty($_POST['d1'])) 
{
$q1=$_POST['q1'];
$a1a=$_POST['a1'];
$a1b=$_POST['b1'];
$a1c=$_POST['c1'];
$a1d=$_POST['d1'];  
}
else
{
    echo "Please Set the Questions and the Options!";
    die();
}
} 
if(isset($_POST['q2'])&&isset($_POST['a2'])&&isset($_POST['b2'])&&isset($_POST['c2'])&&isset($_POST['d2']))
{
if(!empty($_POST['q2']) && !empty($_POST['a2']) && !empty($_POST['b2']) && !empty($_POST['c2']) && !empty($_POST['d2']))
{
$q2=$_POST['q2'];
$a2a=$_POST['a2'];
$a2b=$_POST['b2'];
$a2c=$_POST['c2'];
$a2d=$_POST['d2'];  
}
else
{
    echo "Please Set the Questions and the Options!";
    die();
}
}
if(isset($_POST['q3'])&&isset($_POST['a3'])&&isset($_POST['b3'])&&isset($_POST['c3'])&&isset($_POST['d3']))
{
if(!empty($_POST['q3']) && !empty($_POST['a3']) && !empty($_POST['b3']) && !empty($_POST['c3']) && !empty($_POST['d3']))
{
$q3=$_POST['q3'];
$a3a=$_POST['a3'];
$a3b=$_POST['b3'];
$a3c=$_POST['c3'];
$a3d=$_POST['d3'];  
}
else
{
    echo "Please Set the Questions and the Options!";
    die();
}
}  
$ans1=$a1a;
$ans2=$a2a;
$ans3=$a3a;

$qtbname="q_".$topic;
$top=$_SESSION['topic']=serialize($_POST['topic']);
$new="q_".$top;

$create_table="CREATE TABLE $qtbname(id int NOT NULL AUTO_INCREMENT,question VARCHAR(500),answer VARCHAR(30),optiona VARCHAR(30),optionb VARCHAR(30),optionc VARCHAR(30),optiond VARCHAR(30),PRIMARY KEY (id))";
mysql_query($create_table);

$query1="INSERT INTO $qtbname VALUES('','$q1','$ans1','$a1a','$a1b','$a1c','$a1d')";
$query2="INSERT INTO $qtbname VALUES('','$q2','$ans2','$a2a','$a2b','$a2c','$a2d')";
$query3="INSERT INTO $qtbname VALUES('','$q3','$ans3','$a3a','$a3b','$a3c','$a3d')";

$result1=mysql_query($query1);
$result2=mysql_query($query2);
$result3=mysql_query($query3);

header("Location: student.php");
}
else
{
    echo "Please Set the Quiz Topic";
}
?>

现在您可以看到,在每次使用表前缀动态创建表后,它会被重定向到如下所示的 student.php 文件。

我的 student.php 文件:

<?php
require "db.php";

$query="SELECT * FROM $new";
$result=mysql_query($query);
$n="1";
$i="a";

while($row=mysql_fetch_assoc($result))
{
echo "Question ".$n." : ".$row['question'];
echo "<br>";
$ansr=$row['answer'];
?>
<form action="std_handler.php" method="POST">
<input type="radio" name="<?php echo $i; ?>" value="<?php echo $row['optiona']; ?>"><?php echo $row['optiona']; ?>
<input type="radio" name="<?php echo $i; ?>" value="<?php echo $row['optionb']; ?>"><?php echo $row['optionb']; ?>
<input type="radio" name="<?php echo $i; ?>" value="<?php echo $row['optionc']; ?>"><?php echo $row['optionc']; ?>
<input type="radio" name="<?php echo $i; ?>" value="<?php echo $row['optiond']; ?>"><?php echo $row['optiond']; ?><br>
<?php
++$i;
++$n;
}
?>
<input type="submit" value="Submit">
</form>

这个 student.php 文件的第四行,查询,$query="SELECT * FROM $new";,我需要访问我刚刚在教员端创建的表以文本和单选按钮格式显示问题和答案。

这是我的 std_handler.php 文件:

<?php
if(isset($_POST['a']))
{
$ans=$_POST['a'];
echo $ans;
echo "<br>";
}
if(isset($_POST['b']))
{
$ans=$_POST['b'];
echo $ans;
echo "<br>";
}
if(isset($_POST['c']))
{
$ans=$_POST['c'];
echo $ans;
echo "<br>";
}
?>

在教师处理程序文件中,验证后,我尝试使用会话并获取变量,我尝试将其设为全局,我尝试对其进行序列化,我无法成功使用并选择动态表名student.php 页面。

我想要的是,一旦我被重定向到 student.php 页面,我想选择之前立即创建的表,我该怎么做?如何访问我创建表并在教员端执行查询的变量?

我不断收到此错误:注意:未定义变量:C:\xampp\htdocs\quiz\student.php 第 4 行中的新变量

请帮我解决这个问题。谢谢你。

【问题讨论】:

  • 不要为每个测验创建一个新表!了解数据库规范化。
  • 我正在为我的大学做这个,所以老师们不时会做很多测验。我要将结果存储在另一个表中。但我会考虑一下 DB 规范化。
  • 我的问题与您提供的链接不重复。我相信这是完全不同的。我不是说在这里在 url 中传递 php 变量。我在问如何在另一个 php 文件的查询中使用变量。
  • 我为您翻译错误:$new 没有值。那么将其传递给页面?
  • 我明白错误的意思,先生。只是我正在努力解决我上面提到的问题。我的代码不正确,我需要一些帮助来修复它。

标签: php mysql sql forms variables


【解决方案1】:

你想要这样的东西吗:

不好的解决方案,但你可以看看如何传递变量

在 fac_handler.php 中:

改变

header("Location: student.php");

header("Location: student.php?url=". urlencode($new));

在学生页面上:

$query="SELECT * FROM " . mysql_real_escape_string($_GET["url"]);

这是一种方法,但如果我在你的位置,我会以其他方式执行此操作。

我会怎么做

创建一个您发送的 ID,并将该名称解析为乘车数据库名称。

【讨论】:

  • 我之前也想过ID这件事。我正在和我的朋友一起做这个。无论如何,我将标题更改为您所说的内容,并将该查询替换为您提供的查询。我仍然收到我上面提到的关于未定义变量的通知。
  • 几乎解决了,我收到一个新警告:警告:mysql_fetch_assoc() 期望参数 1 是资源,布尔值在第 9 行的 C:\xampp\htdocs\quiz\student.php 中给出跨度>
  • @trollster 表示查询失败。使用这个:php.net/manual/en/function.mysql-error.php 例如:$result=mysql_query($query) 或 die(mysql_error());
  • 或者当你想要一个不错的错误消息时:this: $result = mysql_query($query) or die("fatal error
    Query: " . $query . "
    错误: " .mysql_errno() . " " .mysql_error());
  • 您的 SQL 语法有误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ':5:\"aaaaa\"' 附近使用正确的语法
【解决方案2】:

如果我不得不猜测,我会这么说。当它给你这个错误时:注意:未定义的变量:第 4 行的 C:\xampp\htdocs\quiz\student.php 中的新变量 这是因为它就是这样。如果我们看这里的代码:

require "db.php";

$query="SELECT * FROM $new";
$result=mysql_query($query);
$n="1";
$i="a";

这是你的学生.php ^^^

您没有设置 $new 的值。

所以你需要实际定义值。

$new = $_GET['x'];
$query="SELECT * FROM $new";
$result=mysql_query($query);
$n="1";
$i="a";

其中 x 是您作为查询值传递的任何内容。

或类似的东西。

【讨论】:

  • 我想访问我每次在教师端动态创建的表名。
  • 让我试一试。
  • 请参阅@Laurence 以传递变量,然后获取您传递的任何内容。但我同意他的观点,我个人会以另一种方式来做。
  • 所以 $new = $_GET['url'] 我相信。 @trollster
  • @trollster 没问题。祝你项目的其余部分好运。
【解决方案3】:

好的,我解决了这个问题,这就是我所做的。

我从 fac_handler.php 页面中删除了这两个:

$top=$_SESSION['topic']=serialize($_POST['topic']);
$new="q_".$top;

下面几行,我将标题位置更改为:

header("Location: student.php?url=".$qtbname); 

在 student.php 页面中,我将查询更改为:

$query="SELECT * FROM " . mysql_real_escape_string($_GET["url"]);

对于上面的最后两个修改,我衷心感谢劳伦斯。此外,Thunda 也非常感谢您给了我使用 GET 变量的想法。

deceze 和 tim.baker(在 cmets 中):也非常感谢您的建议,既然我解决了我的问题,我将按照您的建议进行标准化。

非常感谢stackoverflow,为此苦苦挣扎了很长时间。

【讨论】:

    猜你喜欢
    • 2020-02-09
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    相关资源
    最近更新 更多