imgrooot
-
Posts
383 -
Joined
-
Last visited
-
Days Won
1
Posts posted by imgrooot
-
-
For eg. I have this code. Right now it only inserts 1 row with 1 value each. How can I make it in a array so that it inserts 2 rows with 2 different values each?
<?php $title = $_POST['title']; $desc = $_POST['description']; $insert = $db->prepare("INSERT INTO record(title, description) VALUES(:title, :description)"); $insert->bindParam(':title', $title); $insert->bindParam(':description', $desc); if($insert->execute()) { echo 'success.'; } else { echo 'failed.'; } ?> <input type="text" name="title[]" value="" /> <input type="text" name="title[]" value="" /> <input type="text" name="description[]" value="" /> <input type="text" name="description[]" value="" />
-
Make sure you are referencing the timer javascript file (and jquery) before the foreach loop?
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> <script type="text/javascript" src="timer.js"></script>
Ahh yes. I had it in the footer originally. I didn't think it mattered if I put it in the header or footer, but apparently it does. It works now.
Thank you so much Ch0cu3r. Your simple steps really made it clear for me to understand. Other wise I would be chasing in circles from all the other tutorials.
-
You will have to create a new timers inside the foreach loop. Example
foreach($rows as $k => $row) { $target_date = $row['target_date']; $timeLeft = (strtotime($target_date) - time()) * 1000; // append the array key to make a unique name for each counter $counterName = "counter_$k"; ?> <input type="hidden" class="target-date" value="<?php echo $timeLeft; ?>" /> <div class="counter <?php echo $counterName ?>"> <span class="hour">00</span> <span class="min">00</span> <span class="sec">00</span> </div> <script> // initiate new timer new Timer($('.<?php echo $counterName; ?>'), <?php echo $timeLeft; ?>); </script> <?php }
Can you please double check your above code? It's giving me an error "ReferenceError: Timer is not defined".
Which is this line.
new Timer($('.<?php echo $counterName; ?>'), <?php echo $timeLeft; ?>);
-
So the target date is coming from the database. In that case use PHP to calculate the difference between the two dates. Then have PHP set the value for the timeLeft javascript variable
// subtract the two dates and then multiply by 1000 to get milliseconds $timeLeft = (strtotime($target_date) - time()) * 1000; <script> $(document).ready(function(){ // echo $timeLeft value to set timeLeft javascript variable var timeLeft = <?php echo $timeLeft ; ?>; var timer = new Timer($('#counter'), timeLeft); }); </script>
That does work.
One last thing. I am retrieving multiple records from the db. Each of the records have their own unique countdown timer. Right now, it's only showing the countdown timer for the newest record created, while the rest of the records(that are not expired) show 00:00:00. So I was wondering, what can I do so that the countdown works for all the records?
Here is the setup of foreach loop.
foreach($rows as $row) { $target_date = $row['target_date']; $timeLeft = (strtotime($target_date) - time()) * 1000; ?> <input type="hidden" class="target-date" value="<?php echo $timeLeft; ?>" /> <div id="counter"> <span class="hour">00</span> <span class="min">00</span> <span class="sec">00</span> </div> <?php }
-
You don't need to use cookie at all.
All you need to do is to dynamically calculate the timeLeft value by subtracting todays date/time from your target date/time.
For example if you want your timer to countdown until 8pm today (16th October 2015). Then do
// get todays date today = new Date(); // the target date, this will get the date/time for 8PM 16th October 16th 2015 targetDate = new Date(2015, 9, 16, 20); // subtract the two dates to get the difference in millisecons var timeLeft = targetDate - today;
Ahh yes that does work.
Now my question is, since you are using two dates to find the difference in time left, how can I properly add the php date into the javascript "targetDate"? I can't seem to get it to work.
Here is the full code.
// this is the date format when adding to mysql db $target_date = date('Y-m-d H:i:s'); // this is how the date looks in the html when getting the value from the db <input type="hidden" class="target-date" value="2015-10-17 00:17:21" /> // this is the variable I am using to get the above input value to the javascript/jquery var getDate = $(".target-date").val(); // so all together, this is what the code looks like, with your code included. <script> $(document).ready(function(){ var getDate = $(".target-date").val(); // get todays date today = new Date(); // the target date, this will get the date/time for 8PM 16th October 16th 2015 targetDate = new Date(2015, 9, 16, 20); // subtract the two dates to get the difference in millisecons var timeLeft = targetDate - today; var timer = new Timer($('#counter'), timeLeft); }); </script>
-
Simply put, I would like the countdown timer to NOT reset if the page is refreshed. From what I know, I have to use cookies for that. Can you tell me how I can incorporate a cookie in the following code?
I am using this example. http://www.onextrapixel.com/2011/12/01/creating-a-groupon-like-count-down-timer/
The setup is like this.
<html> <head> <!-- 1 --> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> <script type="text/javascript" src="timer.js"></script> <!-- 3 --> <script> $(document).ready(function(){ var timeLeft = 12796000; // this is in milliseconds. var timer = new Timer($('#counter'), timeLeft); }); </script> <!-- 4 --> <style> div#counter{ margin: 100px auto; width: 305px; padding:20px; border:1px solid #000000; } div#counter span{ background-color: #00CAF6; padding:5px; margin:1px; font-size:30px; } </style> </head> <body> <!-- 2 --> <div id="counter"> <span class="hour">00</span> <span class="min">00</span> <span class="sec">00</span> </div> </body> </html>
timer.js
function Timer(container, timeLeft) { // get hour, minute and second element using jQuery selector var hoursContainer = $(container).find('.hour'); var minsContainer = $(container).find('.min'); var secsContainer = $(container).find('.sec'); // hold time left var currentTimeLeft = timeLeft; // 1 second = 1000 ms var secondsForTimer = 1000; // hold ID value return by setInterval() var timerInterval; // call setInteval() only when timeLeft is greater than 0 if (currentTimeLeft == 0) { return; } else { //Call setInterval()function and store ID value to timerInterval. timerInterval = setInterval(countdown, secondsForTimer); } //function being passed to setInterval() function countdown() { currentTimeLeft = parseInt(currentTimeLeft - secondsForTimer); if (currentTimeLeft == 0) { //stop calling countdown function by calling clearInterval() clearInterval(timerInterval); return; } else { //calculate hours left var wholeSeconds = parseInt(currentTimeLeft / 1000,10); var wholeMinutes = parseInt(currentTimeLeft / 60000,10); var wholeHours = parseInt(wholeMinutes / 60,10); //calculate minutes left var minutes = parseInt(wholeMinutes % 60,10); //calculate seconds left var seconds = parseInt(wholeSeconds % 60,10); //prefix 0 to hour, min and second counter $(hoursContainer).text((wholeHours < 10 ? "0" : "") + wholeHours + (wholeHours <=0 ? " hr" : " hrs")); $(minsContainer).text((minutes < 10 ? "0" : "") + minutes + (minutes <=0 ? " min" : " mins")); $(secsContainer).text((seconds < 10 ? "0" : "") + seconds + (seconds <=0 ? " sec" : " secs")); } } }
How would you add form input values array into multiple rows in MySQL table?
in PHP Coding Help
Posted
Well that's a unique approach. One more thing. What if I want to insert a unique non array field in the same stmt as the array fields?
Like this. Where would I add that in your code?