Jump to content

Using while loop to update variable names, not working.


Space_monkey

Recommended Posts

I have two pieces of code which basically fetch data from my database then display it on the page. It was working fine until I had two rows in the database. I decided I would try to use the while loop to update the variables name which would store my data by 1 each loop. So i would end up with a set of variables for each row. Then later on I could use a similar loop to display them.

<?php
$loopno = 0;
$i = 0;

$query = mysql_query("
	SELECT *
	FROM notes
	WHERE userid=$UserID AND level='2'
	");
while ($row = mysql_fetch_assoc($query))

{
	$level2content = $row['content'];
	$level2title = $row['title'];
	$level2noteid = $row['noteid'];


	${$level2content.$i} = $level2content;
	${$level2title.$i} = $level2title;
	${$level2noteid.$i} = $level2noteid;

	$loopno = $loopno + 1;
	$i = $i + 1;
}
?>

 

The data is then displayed using this

 

<?php

if (#condition to determine if 1 loop is needed)
{
$loopno = 0;
$a = 0;
while ($loopno != $loops_required)
	{		
	echo "<H4 class='childtitle' id='level2title' contenteditable='true'>".${$level2title.$a}."noteid=".${$level2noteid.$a}." </H4>";

	echo "<div class='level2content'>";
	echo "<div id='sendlevel2content' contenteditable='true'>";
	echo ${$level2content.$a};
	echo "</div>";

	echo "</div>";

	$loopno = $loopno + 1;
	$a = $a + 1;
	}
}

else
	die
?>

I thought this would work. To me it seems like the cleanest way to do it but when i try doing it with two rows in the database I end up with two sets of the last loop being displayed but only one of them is populated with data. I presume this means the first loop isn't working.

 

I also thought I could put the "display" part of the code inside the while loop of the "fetching" code. This would eliminate a while loop and I would not need to use my funny way of changing variable names which might be the problem? How would this normally be done? A few suggestions would be great.

Link to comment
Share on other sites

Instead of using variable variables, use an array:

<?php
$query = mysql_query("
	SELECT *
	FROM notes
	WHERE userid=$UserID AND level='2'
	");
$level2 = array();
while ($row = mysql_fetch_assoc($query))

{
                $level2[] = array('content'=>$row['content'],'title'=>$row['title'],'noteid'=>$row['noteid']);
}
?>

 

Display:

<?php

if (#condition to determine if 1 loop is needed)
{
        foreach ($level2 as $i => $content_array) {
	echo "<H4 class='childtitle' id='level2title' contenteditable='true'>{$content_array['title']} noteid={$content_array['noteid']}</H4>";
	echo "<div class='level2content'>";
	echo "<div id='sendlevel2content' contenteditable='true'>";
	echo $content_array['content'];
	echo "</div>";
	echo "</div>";
	}
}

else
	die
?>

 

Note: not checked for syntax errors.

 

Ken

Link to comment
Share on other sites

Thanks for the help guys! I think I am slowly getting it. I just have a couple more questions in relation to the foreach loop.

 

My problem is that I am using jQuery ajax to send, as one example, the contents of the "sendlevel2content" div back to the database. (Not sure if there is a better way to achieve this that I should look into.)

 

I think my jquery is pretty standard and looks like this.

// Sets contents of id to variables
    var sendlevel1content = $('#sendlevel1content').html();
var level1title = $('#level1title').html();
var sendlevel2content = $('#sendlevel2content').html();
var level2title = $('#level2title').html();

//Sends variables to appropriate PHP file.
     $.ajax({

                 url: 'saveToDb.php',

                 type: 'POST',

                 data:	{
                         sendlevel1content: sendlevel1content,
					 level1title: level1title,
					 sendlevel2content: sendlevel2content,
					 level2title: level2title,
					}
             });
}

 

So my question is how would I refer to each loop individually and send the contents of the div off to the database. Hope that made sense.

 

I tried putting a counter in the loop like:

<?php
$count	= 0;
foreach ($level2 as $i => $content_array)
	{
		echo "<H4 class='childtitle' id='level2title".$count."' contenteditable='true'>{$content_array['title']} noteid={$content_array['noteid']}</H4>";
		echo "<div class='level2content'>";
		echo "<div id='sendlevel2content".$count."' contenteditable='true'>";
		echo $content_array['content'];
		echo "</div>";
		echo "</div>";

		$count = $count + 1;
	}
?>

 

but it didn't seem to work.

Also had a look at a list of PHP array functions but nothing stood out as being helpful.

 

Any ideas?

Link to comment
Share on other sites

Anyone have a idea. I cant seem to find a solution, my google fu is failing me.

 

Although this might be more a of a javascript or jQuery question now, does anyone know how I would reference the divs in the foreach loop?

 

If its not possible I will have to try another approach, but i think any loop will have the same problem.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.