0

重複の可能性:
URL で 1 つの php 変数を渡す最も簡単な方法

クイズアプリを作っています。教職員の最後に、教師はトピック名 (これでバニティ URL を作成します) を入力し、3 つの質問を入力し、そのうちの 1 つに回答を含む選択肢を入力します。教師がクイズを作成するたびに、質問、オプション、および回答を含む新しいテーブルが毎回作成されます。

私の db.php ファイル:

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

私の教員.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 ファイルの 4 行目、クエリ$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>";
}
?>

教職員のハンドラーファイルで、バリデーション後、sessionを使って変数を取得しようとしたり、グローバルにしてみたり、シリアライズしてみたり、student.phpの動的テーブル名を使ったり選択したりできませんでした。ページ。

私が欲しいのは、student.php ページにリダイレクトされたらすぐに、以前に作成したテーブルをすぐに選択したいのですが、どうすればよいですか? テーブルを作成し、教員側でクエリを実行した変数にアクセスするにはどうすればよいですか?

このエラーが発生し続けます: Notice: Undefined variable: new in C:\xampp\htdocs\quiz\student.php on line 4

この問題を解決するのを手伝ってください。ありがとうございました。

4

3 に答える 3

3

このようなものが欲しいですか:

悪い解決策ですが、変数を渡す方法を見ることができます

fac_handler.php では:

変化する

header("Location: student.php");

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

学生ページ:

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

これは方法ですが、私なら別の方法でこれを行います。

これを行う方法

送信する ID を作成し、その名前をライド データベース名に解決します。

于 2013-01-15T13:56:58.167 に答える
1

私が推測しなければならないとしたら、私はこれを言うでしょう。このエラーが表示された場合: Notice: Undefined variable: new in C:\xampp\htdocs\quiz\student.php on line 4それだけだからです。ここのコードを見ると:

require "db.php";

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

これはあなたのstudent.phpです^^

$new の値を設定していません。

したがって、実際に値を定義する必要があります。

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

x は、クエリ値として渡すものです。

またはそれらの線に沿った何か。

于 2013-01-15T13:52:31.050 に答える
0

さて、私はこの問題を解決しました。これが私がしたことです。

fac_handler.php ページから次の 2 つを削除しました。

$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"]);

上記の最後の 2 つの変更について、Lawrence に心から感謝します。また、Thunda は、GET 変数も使用するというアイデアを私に与えてくれて、とても感謝しています。

deceze と tim.baker (コメントにあります): アドバイスもありがとうございます。問題を解決したので、あなたが提案したように正規化を進めます。

長い間これに苦労していたstackoverflowに感謝します。

于 2013-01-15T14:24:53.063 に答える