0

Can anyone tell me how to retrieve records from database one at a time..
I am attaching a sample code here:

include('connection.php');
$sql1="SELECT * FROM question_master";
$result=mysql_query($sql1);
while($row = mysql_fetch_array($result))
{
echo $row['Question'];
}

Let me explain the code..

There is a table named "question_master" (containing some questions) in database with a field named "Question".
This code display all the questions stored in the table into the screen.

My problem is here

I want to display the questions one by one. Like when we click the next button it will display the next question and so until all the records are displayed.

Help me out with the main logic I should use to implement it. Or help me with the script.

4
Contributors
9
Replies
21
Views
6 Years
Discussion Span
Last Post by diafol
0

This should work:
First Question:

include('connection.php');
$sql1="SELECT * FROM question_master limit 1";
$result=mysql_query($sql1);
while($row = mysql_fetch_array($result))
{
echo $row['Question'];
}

2nd Question:

include('connection.php');
$sql1="SELECT * FROM question_master LIMIT 1 OFFSET 1";
$result=mysql_query($sql1);
while($row = mysql_fetch_array($result))
{
echo $row['Question'];
}

Third Question:

include('connection.php');
$sql1="SELECT * FROM question_master LIMIT 1 OFFSET 2";
$result=mysql_query($sql1);
while($row = mysql_fetch_array($result))
{
echo $row['Question'];
}

etc.

1

A better way to do this is to use loop
take a variable (let it be 'a') and initialize it equal to 1.
Then inside loop use this statement:

$sql1="SELECT * FROM question_master LIMIT 1 OFFSET '$a' ";
'instead of above line you can also like query as
'$sql1="SELECT * FROM question_master LIMIT '$a',1 ";
$result=mysql_query($sql1);
while($row = mysql_fetch_array($result))
{
echo $row['Question'];
}

after that make a submit button and on it's click event run a javascript to increment the value of the variable by 1.
Repeat this loop until it is equal to the max number of questions...

OR

Other way is to use POST method of form....

<?php
echo "<form method='POST' action=''>";
if(!isset($a))
{
$_POST['a']=1
}
else
{

}
include('connection.php');
$sql1="SELECT * FROM question_master LIMIT '$_POST['a'],1";
$result=mysql_query($sql1);
while($row = mysql_fetch_array($result))
{
echo $row['Question'];
}
$b=$_POST['a']+1;
echo "<input type='hidden' value='$b' name='a'>";
echo "<input type='submit' value='submit' name='submit'>";
?>

For the second alternative it may contain certain error as i havenot checked that command for now....it was just for your knowledge purpose...

Edited by IIM: n/a

Votes + Comments
Quite good altternatives to work on...
0

You could use ajax to help you here:

1. hidden form field with q no.
2. next button click: js function reads form fields (inc. hidden field).
3. js passes data to php script
4. php script takes data, stores answers, retrieves next question (based on value from hidden field)
5. output passed back to js script.
6. js updates the question area in the page.

ALthough this looks complciated, it's a trivial operation - especially if you use something like jQuery.

Just a thought.

0

@all Thanks to all of you for the suggestions.
If I use LIMIT 1 and OFFSET as variable, it will display the 1st row first and then 2nd row (after incrementing the OFFSET using javascript) and so on from the table. What if I want the questions to be displayed randomly using rand().

0
$q = shuffle(range(0,19));

Will give you randomized offsets between 0 and 19 for the first 20 questions. You need to keep this alive between questions, so few ways:

easiest may be to shove $q as a session variable.

Edited by diafol: n/a

0

@ardav But how will I use your code in the following code?

<?php
	if(isset($_POST['next']))
	{
		$a=$_POST['a'];
	}
	if(!isset($a))
	{
		$a=0;
	}
	include('connection.php');
	$sql1="SELECT * FROM question_master WHERE Sub_Id='9' LIMIT 1 OFFSET $a";
	$result=mysql_query($sql1);
	echo "<form method='post' action=''>";
	while ($row = mysql_fetch_array($result))
	{
		echo $row['Question']. "<br/>";
		echo "<input type='radio' value='answer1' name='answer'>" .$row['Answer1'];
		echo "<input type='radio' value='answer1' name='answer'>" .$row['Answer2'];
		echo "<input type='radio' value='answer1' name='answer'>" .$row['Answer3'];
		echo "<input type='radio' value='answer1' name='answer'>" .$row['Answer4']. "<br/>";
	}
	$b=$a+1;
	echo "<input type='hidden' value='$b' name='a'>";
	echo "<input type='submit' name='next' value='next'> ";
	echo "<input type='reset' name='reset' value='Reset'>";
	echo "</form>";
?>

This code is working properly without randomization.

1

quiz intialize:

session_start();
$q = shuffle(range(0,19));
$_SESSION['q'] = $q;

THen in your display page:

<?php
        session_start(); //MUST BE AT TOP OF PAGE
	if(isset($_POST['next'])){
		$a=$_POST['a'];
	}
	if(!isset($a)){
		$a=0;
	}
        $q = $_SESSION['q']['a'];
	include('connection.php');
	$sql1="SELECT * FROM question_master WHERE Sub_Id='9' LIMIT 1 OFFSET $q";
	$result=mysql_query($sql1);
	echo "<form method='post' action=''>";
	while ($row = mysql_fetch_array($result))
	{
		echo $row['Question']. "<br/>";
		echo "<input type='radio' value='answer1' name='answer'>" .$row['Answer1'];
		echo "<input type='radio' value='answer1' name='answer'>" .$row['Answer2'];
		echo "<input type='radio' value='answer1' name='answer'>" .$row['Answer3'];
		echo "<input type='radio' value='answer1' name='answer'>" .$row['Answer4']. "<br/>";
	}
	$a=$a+1;
	echo "<input type='hidden' value='$a' name='a'>";
	echo "<input type='submit' name='next' value='next'> ";
	echo "<input type='reset' name='reset' value='Reset'>";
	echo "</form>";
?>

Edited by diafol: n/a

Votes + Comments
nice work man
0

@ardav Thanks a lot for the help.. I'll try it...

Another little help...

In the display page I am using radio button for the answers. How will I store the results that the users checked so that I can evaluate them after clicking the final submit button (the submit button after the last question)?

0

you can use session again.

echo "<input type='radio' value='1' name='answer'>" .$row['Answer1'];
		echo "<input type='radio' value='2' name='answer'>" .$row['Answer2'];
		echo "<input type='radio' value='3' name='answer'>" .$row['Answer3'];
		echo "<input type='radio' value='4' name='answer'>" .$row['Answer4'].

Then

$ans = $_POST['answer'];
array_push($_SESSION['ans'],$ans);

then art the end use the two session arrays to build a SQL statement.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.