display number in dashboard to start from 1 every year - javascript

I have a table that I wish to display in my .php file, as it will display every number of each row but when it comes to a brand new year, it will changes to begin at 1 once again.
.php file html code:
<table id="example">
<thead>
<tr>
<th style="width: 40px">Year</th>
<th style="width: 40px">Id</th>
</tr>
</thead>
<tbody>
<?php
include('include/config1.php');
$query = "SELECT * from table ORDER BY Id DESC";
$result = mysqli_query($db, $query);
while ($row = mysqli_fetch_assoc($result)) {
?>
<tr>
<td><?php
if($row['status']!=3){ //display the year from the date according to status
echo date("Y",strtotime($row['sdate'])); }
else{
echo date("Y",strtotime($row['ssdate']));
} ?>
//the years are the same for both columns in each row
</td>
<td>//The ID that auto starts from 1 every year with an increment of 1 to the newest (not the same as the unique id from the table </td>
<?php}?>
</tbody>
</table>
What kind of javascript functions I must implement to make this work?
NOTE: all the data inserted into the MySQL table will not be removed from the database, the status will only change to delete, that's all.

First of all, If you want your records to be sorted year after year, you also have to sort by the date field!
"SELECT * from table ORDER BY sdate,Id DESC";
And secondly you will have to remember your previous year in a loop, and compare it to the current. If it is different, then reset your ID to 1
<?php
include('include/config1.php');
$query = "SELECT * from table ORDER BY sdate, Id DESC";
$result = mysqli_query($db, $query);
$currentYear = null;
$data = [];
while ($row = mysqli_fetch_assoc($result)) {
$year = ($row['status'] == 3) ? date("Y", strtotime($row['ssdate'])) : date("Y", strtotime($row['sdate']));
$data[$year][] = $row;
}
?>
<table id="example">
<thead>
<tr>
<th style="width: 40px">Year</th>
<th style="width: 40px">Id</th>
<th style="width: 80px">Machine No</th>
<th style="width: 80px">Project Name</th>
<th style="width: 80px">PIC</th>
<th style="width: 80px">Purpose of Service</th>
</tr>
</thead>
<tbody>
<?php
foreach ($data as $year => $oneYear) {
for ($i = count($oneYear); $i >= 1; $i--) {
?>
<tr>
<td><?= $year ?></td>
<td><?= $i ?></td>
<td><?= $oneYear[$i]['Machine_No']; ?></td>
<td><?= $oneYear[$i]['projectName']; ?></td>
<td><?= $oneYear[$i]['pic']; ?></td>
<td><?= substr(str_replace('\r\n', "\r\n", $row['Purpose_of_Service']), 0, 50); ?></td>
</tr>
<?php
}
}
?>
</tbody>
</table>

Based on #Dmitriy Gritsenko's Help I've managed to did it, but the problem is that the other data from the columns of the table couldn't be display
<table id="example" >
<thead>
<tr>
<th style="width: 40px">Year</th>
<th style="width: 40px">Id</th>
<th style="width: 80px">Machine No</th>
<th style="width: 80px">Project Name</th>
<th style="width: 80px">PIC</th>
<th style="width: 80px">Purpose of Service</th>
</tr>
</thead>
<tbody>
<?php
include('include/config1.php');
$query = "SELECT * from table ORDER BY sdate DESC, Id DESC";
$result = mysqli_query($db, $query);
$currentYear = null;
$data = [];
while ($row = mysqli_fetch_assoc($result)) {
$year = ($row['status'] == 3) ? date("Y", strtotime($row['ssdate'])) : date("Y", strtotime($row['sdate']));
$data[$year][] = $row;
}
foreach ($data as $year => $oneYear) {
for ($i = count($oneYear); $i >= 1; $i--) {
?>
<tr>
<td><?= $year ?></td>
<td><?= $i ?></td>
<td><?php echo $row['Machine_No']; ?></td>
<td><?php echo $row['projectName']; ?></td>
<td><?php echo $row['pic']; ?></td>
<td><?php
$row['Purpose_of_Service'] =substr( $row['Purpose_of_Service'],0,50);
echo (str_replace('\r\n', "\r\n", $row['Purpose_of_Service']));
?>
</td>
<?php
}}
?>
</tbody>
</table>

Related

How to print using iframe? ID does not get when print button is click

I want to print information that depends on the $stud_no using iframe. When I show the iframe in the table, it generates a correct $stud_no. But when I click the print button it only shows the First $stud_no. It's like the button didn't GET the id in admin_print-app-form-view.php
admin_print-app-form.php
<table id="dataTable2" class="text-center">
<thead class="text-capitalize">
<tr>
<th>NO.</th>
<th>LAST NAME</th>
<th>FIRST NAME</th>
<th>MIDDLE NAME</th>
<th>SEX</th>
<th>CONTACT NO.</th>
<th>ENTRY</th>
<th>ACTION</th>
</tr>
</thead>
<tbody>
<?php
$sql = "SELECT * FROM stud_acc";
$result = $con->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$iframeId = 'studframe' . $row['stud_no'];
$stud_no = $row['stud_no'];
$lastname = $row['lastname'];
$firstname = $row['firstname'];
$middlename = $row['middlename'];
$sex = $row['sex'];
$contact = $row['contact'];
$entry = $row['entry'];?>
<tr>
<td><?php echo $stud_no ?></td>
<td><?php echo $lastname ?></td>
<td><?php echo $firstname ?></td>
<td><?php echo $middlename ?></td>
<td><?php echo $sex ?></td>
<td><?php echo $contact ?></td>
<td><?php echo $entry ?></td>
<td>
<iframe src="admin_print-app-form-view.php?id=<?php echo "$stud_no"?>" name="frame" id="<?= $iframeId ?>" style="visibility:hidden;height:0px;width:0px"></iframe>
<button type="button" class="btn btn-roundedtb btn-info" onclick="document.getElementById('<?= $iframeId ?>').print();"><i class="fa fa-print"></i><span class="icon-name"> Print</span></button>
</td>
</tr>
} }?>
</tbody>
</table>
admin_print-app-form-view.php
<?php
session_start();
include("connection.php");
$stud_no = $_GET['id'];
?>
This is the print preview.The number in the Red circle should be the $stud_no that I clicked, but it always gives me first stud_no
The issue is that when you give the same name and id to every iframe, javascript will only give you the first match it finds, returning the same iframe for all buttons.
We need to give them unique id's (we can skip the name altogether).
Note: This code assumes that stud_no is a unique value, like the tables primary key.
In your while-loop, create a unique id:
while($row = $result->fetch_assoc()) {
// Create a unique id using the stud_no
$iframeId = 'studframe' . $row['stud_no'];
Now give the iframe that id:
<iframe ... id="<?= $iframeId ?>" ... ></iframe>
And make sure the button refers to that id:
<button ... onclick="document.title=''; document.getElementById('<?= $iframeId ?>').print();">...</button>
In the above code, I've created unique id's by prefixing them with studframe and then added the stud_no so it becomes id="studframe1", id="studframe2" and so on.
Then when referring to that specific iframe, we're fetching the iframe based on that unique id.

Don't display values by using Json decode()

I stored some values in HTML table to MySQL database. It successfully stored in the database, but when I fetched the data using Json decode(), the Html table nothing shows any data in the web page, but nothing error occurred.
Here is the php code:
<table class="table table-bordered mb-0">
<thead>
<tr>
<th>Medicine Name</th>
<th>Morning</th>
<th>Noon</th>
<th>Noght</th>
</tr>
</thead>
<tbody>
<?php
require_once 'auth/dbconnection.php';
$sql = "SELECT * FROM prescription";
if($result = mysqli_query($conn, $sql)){
if(mysqli_num_rows($result) > 0){
$medRecords = json_decode($row['med_records'],true);
if (is_array($medRecords) || is_object($medRecords)) {
foreach($medRecords as $key => $object) {
?> <tr>
<td><?php echo $object->medname ?></td>
<td><?php echo $object->morning ?></td>
<td><?php echo $object->noon ?></td>
<td><?php echo $object->night ?></td>
</tr>
<?php
} }}}
?>
</tbody>
</table>
Here is my database table
I don't know where I went wrong. How to improve the code segments?
Notice that you missing the fetch itself: $result->fetch_assoc()
You using the var $row but from where?
I think you code should be as:
$sql = "SELECT * FROM prescription";
if($result = mysqli_query($conn, $sql)){
if(mysqli_num_rows($result) > 0){
while ($row = $result->fetch_assoc()) { <---- Notice this line
$medRecords = json_decode($row['med_records'],true);
if (is_array($medRecords) || is_object($medRecords)) {
foreach($medRecords as $key => $object) {
...

display image from left to right php

<table>
<tr>
<th>image</th>
</tr>
<?php
$query = "SELECT * FROM collage";
$result = mysqli_query($con, $query);
while($row = mysqli_fetch_array($result))
{
?>
<tr>
<td><img src="img/collage/<?php echo $row['file'] ?>"></td>
</tr>
<?php
}
?>
</table>
hello genius programmers!
my above code display images like this:
and i wanted it to become like this :
Set <tr></tr> out of <?php ?>
try this
<table>
<tr>
<th>image</th>
</tr>
<tr>
<?php
$query = "SELECT * FROM collage";
$result = mysqli_query($con, $query);
while($row = mysqli_fetch_array($result))
{
?>
<td><img src="img/collage/<?php echo $row['file'] ?>"></td>
<?php
}
?>
</tr>
</table>
You are currently looping for table rows. You need an inner loop for table cells in order to get the table design you've mentioned.
Here is a reference: http://www.w3schools.com/html/html_tables.asp
It will be something like this:
<?php
$query = "SELECT * FROM collage";
$result = mysqli_query($con, $query);
while($row = mysqli_fetch_array($result))
{
?>
<td><img src="img/collage/<?php echo $row['file'] ?>"></td>
<?php
}
?>

2nd data table don't show "no data available" message

I have 2 data tables:
Table 1
<table id="properties_list" class="table">
<thead>
<tr class="backend_tab_header">
<th>Status</th>
<th>Photo</th>
<th>Property ID</th>
<th>Address</th>
<th>Date Created</th>
<th>Owner</th>
</tr>
</thead>
<tbody>
<?php
foreach ($properties as $property)
{
?>
<tr>
<td><?php print $property["status"]; ?></td>
<td class="pic_prop_table"><img class="img-responsive" src="<?php print $property["url"]; ?>" ></td>
<td><?php print $property["prop_id"]; ?></td>
<td><?php print $property["address"]; ?></td>
<td><?php print $property["date_created"]; ?></td>
<td><?php print $property["first_name"]; ?> <?php print $property["last_name"]; ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
Table 2
<table id="messages_list" class="table">
<thead>
<tr class="backend_tab_header">
<th>Property ID</th>
<th>Subject</th>
<th>Message</th>
<th>Received</th>
</tr>
</thead>
<tbody>
<?php
foreach ($properties as $property)
{
?>
<tr>
<td><?php print $messages["from_user"]; ?></td>
<td><?php print $messages["subject"]; ?></td>
<td><?php print $messages["message"]; ?></td>
<td><?php print $messages["date_sent"]; ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
and to fill the arrays call my php functions on top of the page:
$properties = $auth_user->getPropertiesByUser($_SESSION['user_session']);
$messages = $auth_user->getMessages($_SESSION['user_session']);
The data tables are create with JS
jQuery(document).ready(function() {
jQuery('table#properties_list').DataTable( {
//ajax: '../ajax/data/arrays.txt',
scrollY: 200,
scrollCollapse: true,
paging: false
} );
jQuery('table#messages_list').DataTable( {
//ajax: '../ajax/data/arrays.txt',
scrollY: 200,
scrollCollapse: true,
paging: false
} );
});
My problem is that when the first array($properties) return empty the first table show the message "No data available in table" and also when both arrays($properties and $messages) return empty both tables show the message "No data available in table", but when $properties array return with info and $messages array return empty the 2nd table(messages)don't show the "No data available in table" and also creates as much <td> elements as <td> elements in the firs table(properties). Can anyone tell me what could be the cause of this behaviour?
Thanks in advance
probably it's because both of the for each in pop use the $properties. On second loop, it gets the $prperties of the first.
Try to set $properties = array() before getting the values or use another variable name.

Delete data from database using PHP & JavaScript

I am working on a PHP file. I am trying to make a table that shows the list of products from database. There will be also a button for deleting any product. I have used javascript for deleting products from database. I have written the code and could not find anything wrong. When I click delete button, it shows me the confirmation box, but does not delete the product. Here is the code:
<?php
$con=mysql_connect("localhost","root","");
mysql_select_db("grocery_shop",$con);
error_reporting(E_ALL^E_NOTICE);
session_start();
$sql = mysql_query("select * from products");
if($_GET['did']){
mysql_query("delete from products where product_id='$_GET[did]'");
header("Location: product.php");
}
?>
<table border="1px" style="width:100%">
<tr>
<th>Serial No</th>
<th>Product Name</th>
<th>Product Type</th>
<th>Quantity</th>
<th>Price</th>
<th>Delete Product</th>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<?php
$i=1;
while ($u = mysql_fetch_array($sql)) {
?>
<tr>
<td><?php echo $i; ?></td>
<td><?php echo $u['product_name'];?></td>
<td><?php echo $u['product_type'];?></td>
<td><?php echo $u['quantity'];?></td>
<td><?php echo $u['price'];?></td>
<td><?php echo "Delete";?></td>
</tr>
<?php
$i++;
}
?>
<script>
function delproduct(id){
var msg = confirm("Are you sure you want to delete this product?");
if (msg) {
window.location = "product.php?did="+product_id;
}
}
</script>
</table>
The problem is in your javascript, the product_id doesn't exist
if (msg) {
window.location = "product.php?did="+id;
}
For debugging purposes try to replace this with your code and let us know the error message you get.
if($_GET['did']){
mysql_query("delete from products where product_id='".$_GET['did']."'");
echo "delete from products where product_id='".$_GET['did']."'";
echo mysql_errno() . ": " . mysql_error() ;
die();
//header("Location: product.php");
}
additionally also try to run the query without the single quotes, i am assuming product_id is an integer.
so mysql_query("delete from products where product_id=".$_GET['did']);
You forgot the '' around did in $_GET[did]:
mysql_query("delete from products where product_id='{$_GET['did']}'");
Also, as #chris85 noted, is not a good idea to use $_GET or $_POST directly, remember to sanitize these values before using it in a query.
$did = filter_input(INPUT_GET, 'did', FILTER_SANITIZE_NUMBER_INT);
mysql_query("delete from products where product_id={$did}");
<?php
$con=mysql_connect("localhost","root","");
mysql_select_db("grocery_shop",$con);
error_reporting(E_ALL^E_NOTICE);
session_start();
$sql = mysql_query("select * from products");
if($_GET['did']){
mysql_query("delete from products where product_id='$_GET[did]'");
header("Location: product.php");
}
?>
<table border="1px" style="width:100%">
<tr>
<th>Serial No</th>
<th>Product Name</th>
<th>Product Type</th>
<th>Quantity</th>
<th>Price</th>
<th>Delete Product</th>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<?php
$i=1;
while ($u = mysql_fetch_array($sql)) {
?>
<tr>
<td><?php echo $i; ?></td>
<td><?php echo $u['product_name'];?></td>
<td><?php echo $u['product_type'];?></td>
<td><?php echo $u['quantity'];?></td>
<td><?php echo $u['price'];?></td>
<td><?php echo "Delete";?></td>
</tr>
<?php
$i++;
}
?>
<script>
function delproduct(id){
var product_id = id;
var msg = confirm("Are you sure you want to delete this product?");
if (msg) {
window.location = "product.php?did="+product_id;
}
}
</script>
</table>
You should try: delproduct($u[product_id]) instead of delproduct(id=$u[product_id])
mysql_query("delete from products where product_id='".$_GET['did']."'");
while ($u = mysql_fetch_array($sql)) {
?>
<tr>
<td><?php echo $i; ?></td>
<td><?php echo $u['product_name'];?></td>
<td><?php echo $u['product_type'];?></td>
<td><?php echo $u['quantity'];?></td>
<td><?php echo $u['price'];?></td>
<td><?php echo "Delete";?></td>
</tr>
<?php
$i++;
}

Categories