Appending a character to a PHP output - php

I have a simple question.
echo "<tr>";
echo "<td>" . $row['Rep'] . "</td>";
echo "</tr>";
Assume that the above snippet outputs "1". How can I append a dot . in front of it in the above code? So that the output will be .1 instead of 1 only. I couldn't find a similar example on the web, so I decided to ask here. Thanks!

echo "<tr>";
echo "<td>" . "." . $row['Rep'] . "</td>";
echo "</tr>";
or in case it's not 1
echo "<tr>";
echo "<td>" . ($row['Rep'] == 1 ? "." . $row['Rep'] : $row['Rep']) . "</td>";
echo "</tr>";

Like
echo '<tr><td>.' . $row['Rep'] . '</td></tr>';

Related

PHP glob() Loop stops after a certain number of loops

I have a script that reads multiple XML files, takes data from them and lists it as HTML.
Here's the short version of the script (Slightly adjusted because of language and XML contents.):
<?php
$files = glob("./PDFs/*xml");
foreach($files as $filename) {
$xml=simplexml_load_file($filename) or die("Error: Cannot create object");
foreach($xml->xml->rechnung_list->rechnung as $data) {
$belegnr = $data->belegnr;
$file = glob("*" . "$belegnr.pdf");
echo '<tr>';
echo "<td>" . $data->auftrag . "</td>";
echo "<td>" . $data->belegnr . "</td>";
echo "<td>" . $data->kundennummer . "</td>";
echo "<td>" . $data->name . "</td>";
echo "<td>" . date("d. m Y" , strtotime($data->datum)) . "</td>";
echo "<td>" . "<a href='" . $file[0] . "'>DOWNLOAD</a>" . "</td>";
echo '</tr>';
}
}
?>
This code works and does exactly what I want, however it stops after a certain number of iterations.
My PHP memory_limit is set to 512M and the whole thing loads in about 30s so I don't feel like there should be a timeout.

Using two array expressions in single forEach loop

If I use two array expressions with two values, I do not get an error but I also get absolutely no output:
NOT WORKING:
<?php foreach ($zones as $zone) {
$body = $zone->get_body();
$domain_name = $zone->get_domain_name();
$name = $zone->get_name();
foreach ($domains as $domain) {
$status = $domain->get_status();
if (strstr($body, $ip)) {
echo "<tr>";
echo "<td>" . $domain_name . "</td>";
echo "<td>" . $status . "</td>";
echo "<td>" . $body . "</td>";
echo "</tr>";
$count++;
}
}
}
So I need to be able to target the $status variable also which uses $domain instead of $zones
When I use the below code for only zones, everything works fine and I get data that outputs.
WORKING:
<?php foreach ($zones as $zone) {
$body = $zone->get_body();
$domain_name = $zone->get_domain_name();
$name = $zone->get_name();
if (strstr($body, $ip)) {
echo "<tr>";
echo "<td>" . $domain_name . "</td>";
echo "<td>" . $name . "</td>";
echo "<td>" . $body . "</td>";
echo "</tr>";
$count++;
}
}

How can i put an href link in my foreach statement?

For starters i am fairly new at this.
I am trying to figure out how to a href link my row 'inspection_files' and i have tried just about everything. Is there anybody who could help me?
<?php
$i = 0;
foreach ($result as $r) {
echo "<tr>";
echo "<td>" . $r['last_inspection'] . "</td><td>" . strtolower(trim(($r['inspected_by_company']))) . "</td><td>" . strtolower(trim($r['inspection_files'])) . "</td>";
echo "</tr>";
$i++;
}
?>
Hey you can directly use <a> tag inside the <td>, just like below
echo "<td>" . $r['last_inspection'] . "</td><td>" . strtolower(trim(($r['inspected_by_company']))) . "</td><td><a href='" . strtolower(trim($r['inspection_files'])) . "'>" . strtolower(trim($r['inspection_files'])) . "</a></td>";
I hope $r['inspection_files'] this is your URL if this is not your redirect URL then just replace with your actual URL.

PHP read file match if statement

everyone I have the following file and I want to show lines that match on if condition and pass the other.
I have this TXT file:
Doc. number|Date|Price|Description|Name
100|11/11/2015|99|Test 1|Alex
101|11/11/2015|120|Test 2
102|11/11/2015|100|Test 3|John
102|11/11/2015|140||
103|11/11/2015|110|Test 4|
And this is my PHP code:
$file_handle = fopen("file.txt", "rb");
$i = 0;
echo "<table border='1'>";
echo "<tr><th>Doc. number</th><th>Date</th><th>Price</th><th>Description</th><th>Name</th></tr>";
while (!feof($file_handle)) {
$line_of_text = fgets($file_handle);
$parts = explode('|', $line_of_text);
if($i > 1) { // Pass the first line
echo "<tr>";
echo "<td>" . $parts[0] . "</td>"; // Doc. number
echo "<td>" . $parts[1] . "</td>"; // Date
echo "<td>" . $parts[2] . "</td>"; // Price
echo "<td>" . $parts[3] . "</td>"; // Description
echo "<td>" . $parts[4] . "</td>"; // Name
echo "</tr>";
}
$i++;
}
fclose($file_handle);
echo "</table>"
How I can check if there are no "Description" and/or "Name" in table and pass this line. I want to show(get) only line that match on if condition.
I will be very grateful if someone have idea. Thanks in advance.
As simple as
$file_handle = fopen("file.txt", "rb");
$i = 0;
echo "<table border='1'>";
echo "<tr><th>Doc. number</th><th>Date</th><th>Price</th><th>Description</th><th>Name</th></tr>";
while (!feof($file_handle)) {
$line_of_text = fgets($file_handle);
$parts = explode('|', $line_of_text);
if($i > 1 && !empty($parts[3]) && !empty($parts[4])) { // Pass the first line and lines without description / name
echo "<tr>";
echo "<td>" . $parts[0] . "</td>"; // Doc. number
echo "<td>" . $parts[1] . "</td>"; // Date
echo "<td>" . $parts[2] . "</td>"; // Price
echo "<td>" . $parts[3] . "</td>"; // Description
echo "<td>" . $parts[4] . "</td>"; // Name
echo "</tr>";
}
$i++;
}
fclose($file_handle);
echo "</table>"
Only print table row if we have name and description:
if($i > 1 && $parts[3] && $parts[4]) {
You can put condition before echo statement and if it will be false just skip "echo";
if (count($parts) === 5) {
$error = 0;
foreach ($parts as $part) {
if (empty($part)) error++;
}
if($i > 1 && $error === 0) {
echo "<tr>";
echo "<td>" . $parts[0] . "</td>"; // Doc. number
echo "<td>" . $parts[1] . "</td>"; // Date
echo "<td>" . $parts[2] . "</td>"; // Price
echo "<td>" . $parts[3] . "</td>"; // Description
echo "<td>" . $parts[4] . "</td>"; // Name
echo "</tr>";
}
}
I've a solution that can help you.
But why I think you need just scape the heading line. so I changed if($i > 1) to be if($i >0)
$file_handle = fopen("file.txt", "rb");
$i = 0;
echo "<table border='1'>";
echo "<tr><th>Doc. number</th><th>Date</th><th>Price</th><th>Description</th><th>Name</th></tr>";
while (!feof($file_handle)) {
$line_of_text = fgets($file_handle);
$parts = explode('|', $line_of_text);
if($i > 0) { // Pass the first line
if ( (!empty($parts[3])) && (!empty($parts[4])) ){
echo "<tr>";
echo "<td>" . $parts[0] . "</td>"; // Doc. number
echo "<td>" . $parts[1] . "</td>"; // Date
echo "<td>" . $parts[2] . "</td>"; // Price
echo "<td>" . $parts[3] . "</td>"; // Description
echo "<td>" . $parts[4] . "</td>"; // Name
echo "</tr>";
}
}
$i++;
}
fclose($file_handle);
echo "</table>"
Your file has a CSV structure, pipe delimited.
So parse it as a CSV.
Note the using of array_shift to get the header of the CSV and passing the delimiter parameter to fgetcsv.
Also consider using implode instead explicitly passing each member of the array between td tags.
Here's an example using two functions, one for parsing the CSV and returning the data,
and another one for displaying the data and doing the validation.
function getData($file){
$rows = array();
if (($handle = fopen($file, "r")) !== FALSE) {
while (($data = fgetcsv($handle, null, "|")) !== FALSE) {
$rows[] = $data;
}
fclose($handle);
}
return $rows;
}
function displayData($rows){
$header = array_shift($rows);
$output = '<table border="1">' . PHP_EOL;
$output .= '<tr><th>' . implode('</th><th>',$header) . '</th></tr>' . PHP_EOL;
foreach($rows as $row){
if (isset($row[3]) and isset($row[4]) and $row[3]!='' and $row[4]!=''){
$output .= '<tr><td>' . implode('</td><td>',$row) . '</td></tr>' . PHP_EOL;
}
}
$output .= '</table>';
return $output;
}
$rows = getData("pipe.txt");
print displayData($rows);
This will output the following
<table border="1">
<tr><th>Doc. number</th><th>Date</th><th>Price</th><th>Description</th><th>Name</th></tr>
<tr><td>100</td><td>11/11/2015</td><td>99</td><td>Test 1</td><td>Alex</td></tr>
<tr><td>102</td><td>11/11/2015</td><td>100</td><td>Test 3</td><td>John</td></tr>
</table>

php increment variable with onclick

I want to use the function onclick to increment a variable [increment the variable paid]
paid is by default at 0 i want to increment at 1.
I try this code : onclick='paid++' but is not working...
My Code
foreach($query as $index=>$row) {
echo ($colorCount++%2) ? "<tr class='alt'>" : "<tr>";
echo "<td class='" . getPaidColor($row['paid']) . "' onclick='paid++ '></td>";
echo "<td class='" . getDelayColor($row['hour']) . "' onclick='postDeleteForm(" . $index . ")'></td>";
foreach($columns as $column) {
echo "<td>" . $row[$column] . "</td>";
}
}

Categories