I am trying to post 3 variables via a Checkbox.
If a user ticks a Checkbox for each product, I am trying to send 3 variables:
<input type="checkbox" name="product[]" value="'. $rowAttr["reference"] .'-'. $rowAttr["price"] .'-'. $rowProd["unity"] .'">
The variables are definitely set as I have printed them all to the page where the user can see what Product they are selecting. However, when they submit the form, the variables from the checkbox are set to 1 characters? Where is this going wrong?
$selected = explode('-', $product);
$reference = $selected[0];
$price = $selected[1];
$unity = $selected[2];
echo '<table class="table table-striped">';
echo '<th>Product Reference</th><th>Price</th><th>Unit</th>';
if(isset($_POST['product'])) {
foreach($_POST['product'] as $product) {
print '<tr>';
print '<td>'. $product['reference'] .'</td>';
print '<td>'. $product['price'] .'</td>';
print '<td>'. $product['unity'] .'</td>';
print '</tr>';
}
}
echo '</table>';
try to run the code below
$product = $_POST['product'];
echo "<pre>";
var_dump($product);
echo "</pre>";
I think your array look like this
array(3){
[0]=>array(3) {[0]=>"some value",[1]=>"some value",[2]=>"some value",}
[1]=>array(3) {[0]=>"some value",[1]=>"some value",[2]=>"some value",}
[2]=>array(3) {[0]=>"some value",[1]=>"some value",[2]=>"some value",}
}
So do foreah or call $product[0][1], $product[0][2], $product[0][3]
instead.
Related
I have the following table created with a foreach loop.
**foreach($data2['wow_accounts']['0']['characters'] as $key => $item) {
echo '<tr>';
echo '<td>';
echo $item['name'];
echo '</td>';
echo '<td>';
echo $item['realm']['name'];
echo '</td>';
echo '<td>';
echo '<button class="btnSelect">Select</button>';
echo '</td>';
echo '</tr>';
}
echo '</table>';**
I want that the script checks inside of the table "y4qt2_jsn_users" of the mysql database and under a certain id number, if the "params" entry is "ja". If this is true then this certain table row should get another tr class.
My idea is something like that, but how can i combine this with my foreach table loop?
$result = mysqli_query("SELECT params FROM xxx_users WHERE params = 'ja' AND id= '$id'");
if(mysqli_num_rows($result) == 0) {
// row not found, just loop without a certain <tr class=""
} else {
// row found, give this row a <tr class=""
}
Here is a screenshot of what I want. If the mysql condition "params=ja" is true the whole row should get a new tr styleclass, not just a cell.
Screenshot
Screenshot-Database
Assuming I understand correctly, this should work. Please sanitize database queries (especially if there is user input at any point). But as mentioned in the comments, I don't know where $id is set, and actually presume it's a value in the $item array, so maybe replaced with $item['Id']
foreach($data2['wow_accounts']['0']['characters'] as $key => $item) {
$result = mysql_query("SELECT params FROM y4qt2_jsn_users WHERE params = 'ja' AND
id= '$id'");
if(mysql_num_rows($result) == 0) {
$class_string = '';
} else {
$class_string = ' class="my-additional-class"';
}
echo '<tr'.$class_string.'>';
echo '<td>';
echo $item['name'];
echo '</td>';
echo '<td>';
echo $item['realm']['name'];
echo '</td>';
echo '<td>';
echo '<button class="btnSelect">Select</button>';
echo '</td>';
echo '</tr>';
}
There are a lot of ways to clean this up, and if you wanted fewer lines of code you can replace the entire if else block and the $class_string variable by using ternary operators inline. The goal was to make it easy for you to read and simple to understand. (I also prefer very verbose code myself)
So I'm new to coding and I was looking at arrays and I want to know if it's possible to display the last piece of data from an array first and the first piece of data to be last. This is the code I have.
<?php
$trans = array
(
array("10/3/22",1,54),
array("10/48/32", 54,54),
array("3/29/2018", 54, 128.84)
);
echo '<table border="1">';
echo '<tr><th>Date</th><th>Before Balance</th><th>After Balance</th></tr>';
foreach ($trans as $tran) {
echo '<tr>';
foreach( $tran as $data ) {
echo '<td>' . $data . '</td>';
}
echo '</tr>';
}
echo '</table>';
Use
array_reverse($array);
For more info http://php.net/manual/en/function.array-reverse.php
use array_reverse as follows in your forloop
foreach (array_reverse($trans) as $tran) {
echo '<tr>';
foreach( $tran as $data ) {
echo '<td>' . $data . '</td>';
}
echo '</tr>';
}
At the moment I'm trying to understand the template view pattern using PHP.
I got a table that gets filled by a command (using command pattern). At the moment the array gets iterated and filled in a table using foreach. I want to split the program logic and the displaying of the table but I don't know where to declare the table and how to fill it.
I understood it generally. I'm able to display a single information.
Two questions:
How to implement it when I want to display a table from a database?
How to implement the content that should be displayed on all pages?
Unfortunately everything I found is about template engines that I don't want to use at the moment.
Here is the command combined with a table generator. I want to split that into a command that retrieves the data and a view that displays the table.
$domains = ConcreteDomainFactory::getAllDomains();
echo '<table class="domain-table">';
echo '<thead>';
echo '<tr>';
echo '<th>ID</th>';
echo '<th>Domain</th>';
echo '<th>Beschreibung</th>';
echo '<th>aktiviert</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';
if((is_array($domains) ===true) && (count($domains) > 0)){
$line_number = 1;
foreach($domains as $domain){
echo '<tr>';
echo '<td>' . $domain->getPkDomainId() . '</td>';
echo '<td>' . $domain->getDomain() . '</td>';
echo '<td>' . $domain->getDescription() . '</td>';
echo '<td>';
if($domain->getActive()){
echo 'ja';
}
else{
echo 'nein';
}
echo '</td>';
echo '</tr>';
}
}
echo '</tbody>';
echo '</table>';`
Hi there this is a bit hard to word so I'm trying my best to explain what is happening. Pretty much I have a form where I had a selection box. I had to fill it with the following.
<?
$PROVINCES = array("--" => "---Please Select Provinces---",
"nf"=>"Newfoundland",
"pe"=>"PrinceEdwardIsland",
"nb"=>"New Brunswick",
"ns"=>"Nova Scotia",
"qc"=>"Quebec",
"on"=>"Ontario",
"mb"=>"Manitoba",
"sk"=>"Saskatchewan",
"ab"=>"Alberta",
"bc"=>"British Columbia",
"nt"=>"Northwest Territories");?>
So I did that:
<select name = "province[]" multiple size = "12" <?if ($_SERVER['REQUEST_METHOD'] == 'POST'){if (isset($errorList['province']))
{
echo "class=\"error\"";
}}?>>
<?php foreach($PROVINCES as $key => $value) { ?>
<option value="<?php echo $key ?>"<?= (in_array($key, $_POST['province'] ) )?'selected':'';?>><?php echo $value?></option>
<?php }?>
</select>
Now the next step was to make a table of all the values in $_POST
but the problem is since the values are nf, pe, nb etc it will write those in the table and not PrinceEdwardIsland, New Brunswick, Nova Scotia.
echo '<table border="1" style="width:100%">';
foreach($_POST as $name => $out)
{
echo '<tr>';
echo '<td>';
echo '<strong>';
echo strtoupper($name);
echo '</strong>';
echo '</td>';
echo '<td>';
if (is_array($out))
{
count($_POST);
$arrayOutput = implode(", ", $out);
echo $arrayOutput;
}
else if (strlen($out) <= 0)
{
echo "---None supplied---";
}
else
{
echo $out;
}
echo '</td>';
echo '</tr>';
}
echo '</table>';
But as you can see from here we have multiple different $name from $_POST when we call it in our foreach loop.
And as you can see when I do is_array($out) I implode the array and split it out by ","'s I only need to get the full names for provinces, I had a checkbox for Status and it only has to display what the value in the checkbox was. I'm trying to figure out how I can get the $key of $PROVINCES to replace the imploded values in $_POST['province']
Hopefully I explained it well enough for people to understand.
i have the following code:
foreach($result->response->Results as $entry) {
echo '<tr class="'. $entry->EmailAddress.'">';
echo '<td>'. $entry->EmailAddress.'</td>';
echo '<td></td><td>';
foreach($unsubscribers->response->Results as $entry2) {
echo $entry2->EmailAddress; }
echo '</td><td></td>';
echo '<td></td>';
echo '<td></td>';
echo '</tr>';
}
the first loop pulls in a list of recipients email address's via the campaign monitor api, the second loop pulls in the people who have unsubscribed.
My problem is, there are 100 subscribers that get pulled in, and currently 1 of them have unsubscribed. That 1 unsubscriber gets looped through 100 times, and obviously gets displayed.
How would i go about adapting the above to make it so the unsubscriber doesn't show however many times there are subscribers.
Do you mean something like this?
// Add the unsubscribers to an array
$unsubs = array();
foreach($unsubscribers->response->Results as $entry2) {
$unsubs[] = $entry2->EmailAddress;
}
// Loop through the subscribers
foreach($result->response->Results as $entry) {
echo '<tr class="'. $entry->EmailAddress.'">';
echo '<td>'. $entry->EmailAddress.'</td>';
echo '<td></td><td>';
// If the subscriber is in our unsubscriber array, output the email again
if(in_array($entry->EmailAddress, $unsubs)) {
echo $entry->EmailAddress;
}
echo '</td><td></td>';
echo '<td></td>';
echo '<td></td>';
echo '</tr>';
}
It will only output the email in the second column if that subscriber is also in the unsubscribers array
check this codes its probably work for your way.
foreach($result->response->Results as $entry){
echo '<tr class="'. $entry->EmailAddress.'">';
echo '<td>'. $entry->EmailAddress.'</td>';
echo '</tr>';
}
foreach($unsubscribers->response->Results as $entry2){
echo '<tr class="'. $entry2->EmailAddress.'">';
echo '<td>'. $entry2->EmailAddress.'</td>';
echo '</tr>';
}