Page 1 of 2
Can you add a count digit to the end of a $row->variable?
Posted: Mon Feb 18, 2013 6:29 am
by simonmlewis
I have a database with 12 fields (among others), and want to be able to produce what is in them, on the fly.
So rather than saying 12 times over:
Code: Select all
if ($row->titletick1 != NULL) { ... }
if ($row->titletick2 != NULL) { ... }
and so on....
I want the $row->titletick1 to be entered via a count. So if my client wants add a further 5, I just enter them into the database, and let the web site code handle the rest.
I'm pretty sure it's something like this, but not sure:
Code: Select all
$tickcount = 1;
while ($tickcount <= 12)
{
$titletick = $row->titletick . $tickcount;
$tickcount = $tickcount + 1;
echo "$titletick <br/>";
}
Re: Can you add a count digit to the end of a $row->variable
Posted: Mon Feb 18, 2013 6:48 am
by s.dot
You can make variable variables... $row['titletick' . $count]
Code: Select all
$it = 0;
while (whatever)
{
$row['titletick' . $it] = $whatever;
$it++;
}
However, this is best suited for an array.
Code: Select all
while (whatever)
{
$row['titletick'][] = $whatever;
//print_r($row);
}
And your database structure would insert a row into a database table rather than having a limited number of named columns.
Instead of titletick1, titletick2, titletick3 in a table You would have your own table with each row for a titletick.
Structure id | user_id | titletick
Then you could just SELECT * FROM `tablename` WHERE `user_id` = '$member'
This will allow for any number of titleticks.
Sorry if I misunderstood your question.
Re: Can you add a count digit to the end of a $row->variable
Posted: Mon Feb 18, 2013 6:53 am
by simonmlewis
Sorry I don't under that the "= whatever" part. What is the "whatever" meant to mean?
I have to use that $row->***** to query the database.
So it will count thru 12 of them, and if it find a result for $row->titletick1, 2 and 3, it will do things. If it doesn't find one for 4, it won't, and so on.
Simon
Re: Can you add a count digit to the end of a $row->variable
Posted: Mon Feb 18, 2013 6:59 am
by s.dot
In that case, if your structure is correct, I think you want this.
Code: Select all
$tickcount = 1;
while ($tickcount <= 12)
{
//variable variable for titletick count
$titletick = $row->{'titletick' . $tickcount};
//see if it exists
if (!empty($titletick))
{
echo $titletick . '<br />';
} else
{
echo 'title tick ' . $tickcount . ' does not exist';
}
$tickcount = $tickcount + 1;
}
Re: Can you add a count digit to the end of a $row->variable
Posted: Mon Feb 18, 2013 7:04 am
by simonmlewis
Not quite - I think you are concentrating more on showing if something does not exist - rather than showing what if it DOES exist.
If it doesn't, I just do nothing with it.
But if $row->titletick1, and $row->titletick2 etc DO have content, then I want to produce the results of that:
via echo "$row->titletick1".... but obviouslly cannot put it like that because it needs to be merged in the other "variable variable" you've coded here.
What I suppose I meant was, can you say:
echo "$row->titletick$count". Or echo "$row->titletick . $count" ?
That kind of thing.
Re: Can you add a count digit to the end of a $row->variable
Posted: Mon Feb 18, 2013 7:08 am
by s.dot
Yes.
echo $row->{'titletick' . $count} would produce for example, echo $row->titletick5;
Re: Can you add a count digit to the end of a $row->variable
Posted: Mon Feb 18, 2013 7:13 am
by simonmlewis
So I could therefore do a query:
Code: Select all
$count = 1;
while ($count <= 12)
{
if ($row->{'titletick' . $count} != NULL)
{
echo "$row->{'titletick'.$count} is available, look at stock code $row->{'stockcodetick' . $count}";
}
}
Re: Can you add a count digit to the end of a $row->variable
Posted: Mon Feb 18, 2013 7:17 am
by s.dot
Yes. It is still more suitable for arrays, though. There's an old rule I heard.. "If it ends in a number, it probably belongs in an array.".
Re: Can you add a count digit to the end of a $row->variable
Posted: Mon Feb 18, 2013 7:22 am
by simonmlewis
So how would do you the above that I have done, in an array, as I don't think your first array was the answer. With respect to a fellow coder!
Re: Can you add a count digit to the end of a $row->variable
Posted: Mon Feb 18, 2013 7:29 am
by s.dot
Thank you. I have no idea as I don't know your database structure for this or even what a title tick is or the purpose of the code.
However I think title ticks should be it's own table with the structure ID | USER_ID | titletick
Then you would query for all of the rows. Then use mysql_fetch_assoc() to get the rows, and loop through it.
But if it works, it works.

Re: Can you add a count digit to the end of a $row->variable
Posted: Mon Feb 18, 2013 11:01 am
by simonmlewis
Why is this timing out?
Code: Select all
$romancount = 1;
while ($romancount <= 12)
{
if ($row->{'romancodetick' . $romancount} != NULL)
{
$romancodetick = $row->{'romancodetick' . $romancount};
$titletick = $row->{'titletick' . $romancount};
$resultrccheck = mysql_query ("SELECT rcstock FROM products WHERE romancode = '$romancodetick' AND rcstock = 'in stock'");
$num_rcstock = mysql_num_rows($resultrccheck);
if ($num_rcstock != 0)
{
while ($rowrccheck = mysql_fetch_object($resultrccheck))
{
$xinclude = "X".$romancount."include";
$xitemcode = "X".$romancount."itemcode";
echo "<div><input type='checkbox' name='$xinclude' value='on' onclick=\"showMe('div$romancount', this)\">
Include $titletick
<input type='hidden' name='$xitemcode' value='$romancodetick'>
<div class='row' id='div$romancount' style='display:none; font-size: 11.2px; color: $color'>
$titletick cost shown in checkout</div></div>";
$romancount = $romancount + 1;
}mysql_free_result($resultrccheck);
}
}
}
If I set the last $$romancount = $romancount + 1; to be like this:
Code: Select all
$romancount = 1;
while ($romancount <= 12)
{
if ($row->{'romancodetick' . $romancount} != NULL)
{
$romancodetick = $row->{'romancodetick' . $romancount};
$titletick = $row->{'titletick' . $romancount};
$resultrccheck = mysql_query ("SELECT rcstock FROM products WHERE romancode = '$romancodetick' AND rcstock = 'in stock'");
$num_rcstock = mysql_num_rows($resultrccheck);
if ($num_rcstock != 0)
{
while ($rowrccheck = mysql_fetch_object($resultrccheck))
{
$romancountcheck = "in";
$xinclude = "X".$romancount."include";
$xitemcode = "X".$romancount."itemcode";
echo "<div><input type='checkbox' name='$xinclude' value='on' onclick=\"showMe('div$romancount', this)\">
Include $titletick
<input type='hidden' name='$xitemcode' value='$romancodetick'>
<div class='row' id='div$romancount' style='display:none; font-size: 11.2px; color: $color'>
$titletick cost shown in checkout</div></div>";
}mysql_free_result($resultrccheck);
}
}
$romancount = $romancount + 1;
}
It works, but I only want it to count "up" if something is found in stock.
It should still loop, but only add one to the count, if it is in stock. So I don't see why putting that in the section where something is found to be "in stock" should cause it to crash. I get no error messages. That part of the page just doesn't load.
Re: Can you add a count digit to the end of a $row->variable
Posted: Mon Feb 18, 2013 11:52 am
by simonmlewis
Now trying this to see if I can spot the error.
"romancodetick1" has an item "in stock", but romancodetick2 does NOT.
It now goes into a never-ending loop and shows romancodetick1 result over and over.
It's late in the day here, maybe that's why I cannot see where I've missed something....???
Code: Select all
if ($row->titletick1 != NULL)
{
echo "<font style='font-size: 12px'>";
if ($row->catid == "507") { $color = "#009900";} else { $color = "#ff5500";}
$romancount = 1;
while ($romancount <= 12)
{
if ($row->{'romancodetick' . $romancount} != NULL)
{
$romancodetick = $row->{'romancodetick' . $romancount};
$titletick = $row->{'titletick' . $romancount};
$resultrccheck = mysql_query
("SELECT rcstock FROM products WHERE romancode = '$romancodetick' AND rcstock = 'in stock'");
$num_rcstock = mysql_num_rows($resultrccheck);
if ($num_rcstock != 0)
{
while ($rowrccheck = mysql_fetch_object($resultrccheck))
{
$romanstockcheck = "yes";
$xinclude = "X".$romancount."include";
$xitemcode = "X".$romancount."itemcode";
echo "<div><input type='checkbox' name='$xinclude' value='on' onclick=\"showMe('div$romancount', this)\">
Include $titletick
<input type='hidden' name='$xitemcode' value='$romancodetick'>
<div class='row' id='div$romancount' style='display:none; font-size: 11.2px; color: $color'>
$titletick cost shown in checkout</div></div>";
} mysql_free_result($resultrccheck);
}
}
if (romanstockcheck == "yes") { $romancount = $romancount + 1; }
echo "$romancount, $romancodetick";
}
echo "</font>";
}
Re: Can you add a count digit to the end of a $row->variable
Posted: Mon Feb 18, 2013 1:21 pm
by Christopher
simonmlewis wrote:So how would do you the above that I have done, in an array, as I don't think your first array was the answer. With respect to a fellow coder!
I am baffled by this code. We have had a couple of posts computing database field names recently. It is certainly a sign that you should be using a link table rather than these numbered fields.
Beyond that ... why are you using mysql_fetch_object() and not mysql_fetch_assoc() ? Fetching associative arrays would simplify this problem -- it is one of the things that PHP does well. And why are you looping and fetching rows (as a $rowrccheck object) and not even using them?!? Or looping
while($romancount <= 12) but never decrementing $romancount in the loop?!? What is this code supposed to be doing?
Re: Can you add a count digit to the end of a $row->variable
Posted: Mon Feb 18, 2013 1:27 pm
by simonmlewis
This is it at the moment. It's going thru the loop, but it's still counting up from 1 at the bottom, when it shouldn't be.
The system now should be showing an "in stock" product for 1, out of stock for 2 (so NOT counting up), in stock for 3, and out of stock for 4 (so NOT counting up).
It's to show tick boxes on a product page when the product code shows it's in stock.
If I put the "++" code after this: $titletick cost shown in checkout</div></div>";
ie.
Code: Select all
$titletick cost shown in checkout</div></div>"; $romancount ++;
It throws a fit, and gives me a million 222222222222222222222222222 on the screen.
If I ask it to echo <font color='#ff0000'>$romancount</font> at the bottom, I get a 'yes' even if I shouldn't. I did spot that the previous "yes" will be remembered, so I set it to NULL at the end, but then that products the 222222222222222222222222222.
So am a little lost.
Your questions of why am I doing certain ways? Answer: because that'sthe method what I know.
Code: Select all
if ($row->titletick1 != NULL)
{
echo "<br/><font style='font-size: 12px'>";
if ($row->catid == "507") { $color = "#009900";} else { $color = "#ff5500";}
$romancount = 1;
while ($romancount <= 12)
{
if ($row->{'romancodetick' . $romancount} != NULL)
{
$romancodetick = $row->{'romancodetick' . $romancount};
$titletick = $row->{'titletick' . $romancount};
$resultrccheck = mysql_query ("SELECT rcstock FROM products WHERE romancode = '$romancodetick' AND rcstock = 'in stock'");
$num_rcstock = mysql_num_rows($resultrccheck);
if ($num_rcstock == 1)
{
$romanstockcheck = "yes";
$xinclude = "X".$romancount."include";
$xitemcode = "X".$romancount."itemcode";
echo "<div><input type='checkbox' name='$xinclude' value='on' onclick=\"showMe('div$romancount', this)\">
Include $titletick $romanstockcheck<font color='#009900'>$romancount</font>
<input type='hidden' name='$xitemcode' value='$romancodetick'>
<div class='row' id='div$romancount' style='display:none; font-size: 11.2px; color: $color'>
$titletick cost shown in checkout</div></div>";
}
}
if ($romanstockcheck == "yes")
{ $romancount ++; }
echo "<font color='#ff0000'>$romancount</font>";
}
echo "</font>";
}
Re: Can you add a count digit to the end of a $row->variable
Posted: Mon Feb 18, 2013 5:20 pm
by Christopher
simonmlewis wrote:Code: Select all
$titletick cost shown in checkout</div></div>"; $romancount ++;
It throws a fit, and gives me a million 222222222222222222222222222 on the screen.
If I ask it to echo <font color='#ff0000'>$romancount</font> at the bottom, I get a 'yes' even if I shouldn't. I did spot that the previous "yes" will be remembered, so I set it to NULL at the end, but then that products the 222222222222222222222222222.
The reason it does that your while() control logic is spread out in several places. I would recommend a for() loop from 1..12 to deal with each field in $row.Then only echo if the field is not null and there is data.
simonmlewis wrote:So am a little lost.
Your questions of why am I doing certain ways? Answer: because that'sthe method what I know.
We're glad to help. I would recommend fetching assoc arrays instead of objects unless you actually need objects.
It also helps to separate where you used PHP as a programming language from where you use PHP as a templating language. Mixing them is the basic way to do PHP, but as your code gets more complicated the separation makes things clearer. So in this case, have a separate function/method that get the row of data. Pass the data to a separate function/method that produces the HTML. If you post a little more of the code I can show you how it might be refactored.