Hi All,
I've spent a few days on this now and decided I'd better seek some help. I've been working to get a counter working across pages in PHP scripts. In the end I decided there must be something in my code interrupting the process so what I've done is boil it down to a minimalist approach by creating two pages in PHP that do nothing but initiate the counter and increment it. Hopefully, the code will speak for itself: The counter works but I can't figure how to get rid of the Warning.
Please consider:
Hi,
In troubleshooting the above, I've ended up creating two pages of as minimal code as I know how to make it <g>. I now have working code, BUT(t), it's throwing a warning I don't know how to address. ALL work is being done on my Local Apache Server (XAMPP) and PHP 5.3 (same as my Remote Server uses).
The session is almost working, and it IS incrementing properly. This is a code sample I picked up at php.net and it's supposedly applicable to version 4 and 5. I've removed an href to link to the next page and instead am now using a Submit Button: Same identical results whether the link line exists or not so I removed it and things still work the same.
By being as basic with the code as I have been, I've removed the implications of anything else in the code effecting it.
<?php
session_start();
// counter1.php
if (empty($_SESSION['cntr'])) {
$_SESSION['cntr'] = 1;
} else {
$_SESSION['cntr']++;
}
?>
<p>
Hello visitor, you have seen this page <?php echo $_SESSION['cntr']; ?> times.
</p>
<form action="counter2.php" method="post">
Type something: <input type="text" name = "type" <br />
<p> <input type="submit" value="NEXT">
<input type= "reset" value="Clear Form" /> <br />
</form>
</body>
</html>
Page 2:
<?php
session_start();
// counter2.php
echo $_SESSION["cntr"]. " Before increment. <br />";
$_SESSION["cntr"] = $_SESSION["cntr"]+ "1";
echo $_SESSION["cntr"] . " After increment";
?>
It's acting strangely, at least to me. The first time I run, with nothing initialized, Counter1.php, the results are:
======== start =================
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\counter1.php:2) in C:\xampp\htdocs\counter1.php on line 3
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\counter1.php:2) in C:\xampp\htdocs\counter1.php on line 3
Hello visitor, you have seen this page 1 times.
Type something:
Next Button
============ end =============
The input statement and Forms structure is only so I can use Submit instead of the link the original code used.
======== start =================
If I click Submit (Next), the second page displays:
Notice: Undefined index: cntr in C:\xampp\htdocs\counter2.php on line 4
Before increment: <nothing>
Notice: Undefined index: cntr in C:\xampp\htdocs\counter2.php on line 5
1 After increment
============ end =============
Off-hand, that seems right; but later it would increment differently; please read on.
Now, reloading/refreshing counter1.php results in the following screen display:
============== start ==========
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\counter1.php:2) in C:\xampp\htdocs\counter1.php on line 3
Hello visitor, you have seen this page 2 times.
Next (Submit)
=============== end =========
Note that it's only 1 Warning message this time, not two.
NOW counter2.php, the 2nd page, works as I expected and shows:
=========== start ============
2 Before increment.
3 After increment
=========== End =============
And so on, adinfinitum.
So the counter IS incrementing and displays properly on the counter1.php page with the exception now only one Warning appears, not two as in the first time it's run, where there were two statements returned.
So, to synopsize:
The very first time counter1.php runs, the counter shows "1" as expected, and two Warnings about headers being already sent.
Clicking to go to the next page, shows the two errors as above, meaning the unidentified vars. Successive views of that page will NOT show those two errors, but will show the echoed text as instructed in the code.
And after that, the first page shows only one Warning, and the 2nd page works flawlessly, as does the counter on the first page, now. That will continue until the session is closed or the browser closed.
Any solutions, thoughts, comments definitely appreciated! Even a different way of doing this would be acceptable if I can get my head around it! 🙂
Rivet`