How to pass php variable outside of while loop within same page - php

I have faced small problem regarding passing php variable outside of PHP loop. I have created table and form in same page. First table is displayed and the through edit link in form pop up dialog box appears. I want to pass dynamic ID to dialog box after click edit link. My page includes a php table and form.
PHP/HTML Table
<table>
<th>ID</th>
<th>Title</th>
<th>Edit</th>
<?php
$query="select * from video order by id desc";
$result=$con->query("SELECT * FROM video ORDER by id DESC") or die($con->error);
while($row=$result->fetch_assoc()){
$id=$row['id'];
$heading=$row['heading'];
?>
<tr>
<td>
<?php echo $id ?>
</td>
<td>
<?php echo $heading ?>
</td>
<td>
Edit
</td>
</tr>
<?php } ?>
</table>
After this table, I want to display data in this form
PHP Form in dialog box
<div class="remodal" data-remodal-id="modal2" role="dialog" aria-labelledby="modal2Title" aria-describedby="modal2Desc">
<form action="" method="POST" enctype="multipart/form-data">
<table>
<tr>
<th>Video ID</th>
<td>
<input type="number" value="<?php echo $id?>" name="id" readonly></input>
</td>
</tr>
<tr>
<th>Video Title</th>
<td>
<input type="text" value="<?php echo $heading?>" name="title"></input>
</td>
</tr>
</table>
</form>
</div>
I know that while loop can't connect to popup dialog box form, so my code prints only data of first row. If I include whole code within while loop, my table structure become mess. Is there any idea to pass ID outside of while loop ? I tried using global variable method, but it doesn't work. Perhaps I can't properly use global variable. Thanks

In your while loop store values in to array like this:
<?php
$query="select * from video order by id desc";
$result=$con->query("SELECT * FROM video ORDER by id DESC") or die($con->error);
$array = [];
while($row=$result->fetch_assoc()){
$id=$row['id'];
$heading=$row['heading'];
$array[$id] = $heading;
?>
And in your html table like this :
<table>
<tr>
<th>Video ID</th>
<th>Video Title</th>
<?php foreach ($array as $key => $val){ ?>
<td>
<input type="number" value="<?php echo $key?>" name="id" readonly></input>
</td>
<td>
<input type="text" value="<?php echo $val?>" name="title"></input>
</td>
<?php } ?>
</tr>
</table>

Related

Making a table with foreach, trying to submit data using each table row

So its been over 10 years since writing any code what so ever so i might be way off here. I have a table showing all students in a classroom populated by a foreach loop with an added box to input their grade. I need 1 submit button to insert one new row per student in the grades table in my database with their grade and the assignment name that is selected above.
I know i need to identify each grade value im just unsure how and it's only posting the person in the last row.
global $wpdb;
$asnames = $wpdb->get_results( "SELECT * FROM assignments" );
$results = $wpdb->get_results( "SELECT * FROM enrolled" );
?>
<div class="container"><center>
<form action ="<?php echo $_SERVER['REQUEST_URI']; ?>" method ="post">
<table class="form-table" id='topper'>
<tbody>
<tr>
<th>Assignment Name</th>
</tr>
<tr>
<td>
<select name="Assignment">
<?php foreach($asnames as $asname) { ?>
<option value="<?php echo $asname->id ?>"><?php echo $asname->assign_name ?></option>
<?php
} ?>
</select>
</td>
</tr>
</tbody>
</table></center>
</div>
<br><br>
<div class="container"><center>
<form action ="<?php echo $_SERVER['REQUEST_URI']; ?>" method ="post">
<table class="form-table" id='student'>
<tbody>
<tr>
<th>Students Name</th>
<th>Points</th>
</tr>
<?php foreach($results as $row){ ?>
<tr>
<td><?php echo "$row->student_name" ?></td>
<td><input type="text" class="regular-text" name="Grade"></td>
</tr>
<?php } ?>
<!-- </tbody> -->
</table>
<p><input type="submit" name="submitinsert" id="submitinsert" class="button button-primary" value="Submit"/></p> </form>
</center></div>
<?php
if ($_POST['submitinsert']){
$result = $wpdb->insert(
'grades',
array(
"student_name" => $row->student_name,
"assignment_id" => $asname->id ,
"grade" => $_POST['Grade']
)
);
}
I cant seem to get it to grab each row as it is in the table to insert, only the last row gets put in.
EDIT: I got the grade input worked out now just trying to get each loop put into the database with the single submit button.

PHP how to Submit many records after search

I tried to look in this site but none of the question which relate exactly like mine. I need help on this problem since am very new in PHP.
Iam developing students result application which used to collect scores of the students. My problem is, I fail to submit all information I get like (idnumber, names and subject), after searching records of students of a certain class, here is my scripts.
<?php
$number = $courseObj->sele_ct_class($class, $year);
?>
<table class="table table-bordered" style="border-radius: 100px" border="0">
<tr style="font-size: medium; background-color: lavenderblush">
<td>#</td>
<td>Admission Number</td>
<td>Student name</td>
<td>Max.Mark</td>
<td>Mark</td>
</tr>
</thead>
<tbody>
<?php
$i = 1;
$notaVilableId = $courseObj->seleId($class, $year); // Select_all From curClass according to aguments (return all idnumber)
foreach ($notaVilableId AS $haika) {
$classIdnumber = $haika->idnumber;
$jina = $haika->jina;
?>
<tr>
<td style="width: 5%"><?php echo $i++; ?></td>
<td><?php echo $classIdnumber ?></td> <!-- this display idnumber -->
<td><?php echo $jina ?></td> <!-- this display name -->
<td>100</td>
<td class="col-sm-2"><input type="number" id="subject" name="subject" class="form-control"></td> <!-- this fiels used to input score marks -->
</tr>
<?php } ?> <!-- end foreach -->
<tr>
<td colspan="20px">
<button class="btn btn-success" type="submit" name="fee_submit" id="fee_submit">Save
</button> <!-- submission button -->
</tr>
Problem is here, I get only idnumber of one student and the rest not appear, can any one show me how I could get all information like (idnumber, name and subject score which entered for each student). I mean that I want all information displayed to be submited with there scrored marks. Thank
<?php
if (isset($_POST['fee_submit'])) {
$classIdnumber;
$jina;
$score = sanitize($_POST['subject']);
$courseObj->insertseTExams($classIdnumber, $jina, $score); // function used to insert data
}
change this
<input type="number" id="subject" name="subject" class="form-control">
to note name="subject[]" change
<input type="number" id="subject" name="subject[]" class="form-control">
getting the data in php
i=0;
$number=count($_POST["subject"];
while ($i < $number ){
$score = sanitize($_POST['subject'][$i]);
//instert your data or do whatever else
$i++;
}
it seems you have assigned $classIdnumber,$jina to read its values from the $_POST super global variable.. And also, any data that is to be submitted to a server page for processing should be in-between form tags,this way you can access this values through the $_POST super global

PHP While loop only works for first two of three results?

I know I am a beginner, but I have an issue I can't figure out. I've searched everywhere. Please don't be mean:) I'm trying to learn!:)
SO I have a while loop that is making an HTML table for me, and two of the three row[] echoes work every time, but the third echoes only the ID of the last entry in the table.
My code:
<?php
$searchsql = "SELECT * FROM `students` WHERE `fname` LIKE '%" . $searchvalue1 . "%' LIMIT 0, 10 ";
$search1result = mysql_query($searchsql);
while($search1row=mysql_fetch_array($search1result)){?>
<h3>
<table align="center">
<thead>
<tr>
<td>First Name</td>
<td>Last Name</td>
<td>Select</td>
</tr>
</thead>
<tbody>
<tr>
<td><?php echo $search1row['fname'];?></td>
<td><?php echo $search1row['lname'];?></td>
<td>
<form method="post" action="4.php">
<input type="hidden" id="voteid" name="voteid" class="inputbutton" value="<?php echo $search1row['studentid'];?>">
<input type="submit" class="inputbutton" value="SELECT">
</td>
</tr>
</tbody>
</table>
</h3>
<?php }?>
So if the table returned is (see picture)
The select button from within that form always posts the studentid from the LAST row... Every select button posts Jane's ID number. So John, Jason, Jane, and their last names are echoed correctly, but their corresponding ID numbers are not... if that makes any sense.
I have to keep it a form because of the way my site works (not a link with get variables).
Any ideas on how to get the ID to echo inside of that form?
You're not closing the form at the end of each loop. So each time the voteid input is getting overwritten which is why it always posts the id for the last row.
Add a closing form tag:
...
<form method="post" action="4.php">
<input type="hidden" id="voteid" name="voteid" class="inputbutton" value="<?php echo $search1row['studentid'];?>">
<input type="submit" class="inputbutton" value="SELECT">
</form>
...

Saving the selected rows by checkbox to database in php

I have a query to display all the records of the ebooks table from the database.
I displayed it in a table with a checkbox from the first column.
I'm trying to save the rows from the selected checkbox in the table width the Name of School but I don't have any idea.
I'm just a beginner in php, any help is appreciated. Here is my codes:
HTML codes:
$result1 = mysql_query("SELECT * FROM school GROUP BY SCHOOL_NAME");
while($row1=mysql_fetch_array($result1)) {
?>
<option><?php echo $row1['SCHOOL_NAME'];?></option>
<?php } ?>
</select>
<table class="table table-striped table-hover table-bordered datatable">
<thead style="background: #a83535; color: black;">
<tr>
<th style="width: 50px;"></th>
<th style="color: #3b3b3b;">Ebook Title</th>
<th style="color: #3b3b3b;">Category</th>
<th style="color: #3b3b3b;">File Name</th>
</tr>
</thead>
<tbody>
<?php
$result = mysql_query("SELECT * from ebooks ORDER BY EBOOK_TITLE");
$count = mysql_num_rows($result);
while($row=mysql_fetch_array($result)) {
?>
<tr>
<td>
<center><input type="checkbox" name="check[]" ></center>
</td>
<td><input type="" name="ebookname[]" value="<?php echo $row['EBOOK_TITLE'];?>"></label></td>
<td><input type="" name="ebookcategory[]" value="<?php echo $row['EBOOK_CATEGORY'];?>"></label></td>
<td><input type="label" name="ebookfilename[]" value="<?php echo $row['EBOOK_FILENAME'];?>"></label></td>
</tr>
<?php } //end of while loop ?>
</tbody>
</table>
<button type="submit" class="btn btn-hg btn-primary" name="AddEbooks">Submit</button>
I want to save the rows selected by the checkbox to database:
Table: school_management
Columns: ID_NUMBER, SCHOOL, EBOOK, FILE_NAME, DATE_ASSIGN
Values (from the HTML table to database): ('','$school_ebook','$ebookname','$ebookfilename','')
Here is the screenshot:
First, you will need to assign an ID number to the checkboxes so that you can differentiate each record. Using the ID_NUMBER would be ideal here. In your current script where you are displaying the checkbox, your line that reads this:
<center><input type="checkbox" name="check[]" ></center>
Should include the ID_NUMBER like this in the name. Additionally, a value should be assigned to the checkbox so we can verify later.
<center><input type="checkbox" name="check[<?php echo $row['ID_NUMBER'];?>]" value="1"></center>
Now you can go ahead and set up something that gets triggered when your form is submitted. You can essentially loop through each record and check it against the "check[ID_NUMBER]" checkbox to see if the value is 1. If the value is 1 then the record had been checked to save and you can then carry on saving the record.
How you want to handle the form is up to you - you could do AJAX to avoid reloading the entire page or you could do a simple form action="page_name_here.php" and handle the submission there. If you go about doing a simple form post without AJAX, it could be something like this -
Current page form tag:
<form name="" action="page_name_here.php" method="POST">
If you want to use the school_ebook var you need to assign the select options for the school_ebook a value:
<option value="<?php echo $row1['SCHOOL_NAME']'?>">
page_name_here.php:
<?php
/* Get the school name */
$school_ebook=$_POST["school_ebook"];
/* Query your books DB to get the records */
$result=mysql_query("SELECT * from ebooks ORDER BY EBOOK_TITLE");
$count=mysql_num_rows($result);
while($row=mysql_fetch_array($result)) {
$bookID=$row['ID_NUMBER'];
/* Get the Book ID and now we have to fetch from $_POST the value from the form */
if (array_key_exists($bookID, $_POST["check"])) {
$ischecked=$_POST["check"][$bookID];
/* See if this has a value of 1. If it does, it means it has been checked */
if ($ischecked==1) {
/* It is checked, so now in this area you can finish the code to retrieve the data from the row and save it however you like */
}
}
}
?>
Once completed with your inserts, etc., it should accomplish what you need.

Store PHP/SQL foreach form items in variables

Sorry I'm a bit of a noob when it comes to PHP but I just wondered if someone had an idea on how I could solve this PHP/SQL problem.
I have a PDO statement that gets all users from a database.
With the array of users from the database I create a foreach loop to display all of the users in a table which I want to use to select a specific user, enter a number in the row of the user I select, then click submit and store the users name and also the number. I will use this information to populate another database later.
My question is, I cant seem to reference the user or the number in the table to extract the user and number I enter. When I try and request the numbered entered in the index.php, it will only ever display a number if I enter a number for a the final user in the table. When I try and view the FullName it never works and I get 'Undefined index: FullName' error.
I also specified to 'POST in the form but it doesnt seem to be doing that.
Does anyone have any ideas?
Thanks
//function.php
function getName($tableName, $conn)
{
try {
$result = $conn->query("SELECT * FROM $tableName");
return ( $result->rowCount() > 0)
? $result
: false;
} catch(Exception $e) {
return false;
}
}
//form.php
<form action "index.php" method "POST" name='form1'>
<table border="1" style="width:600px">
<tr>
<th>Name</th>
<th>Number Entered</th>
<tr/>
<tr>
<?php foreach($users as $user) : ?>
<td width="30%" name="FullName">
<?php echo $user['FullName']; ?>
</td>
<td width="30%">
<input type="int" name="NumberedEntered">
</td>
</tr>
<?php endforeach; ?>
</table>
<input type="submit" value="submit"></td>
</form>
//index.php
$users = getName('users', $conn);
if ( $_REQUEST['NumberedEntered']) {
echo $_REQUEST['NumberedEntered'];
echo $_REQUEST['FullName'];
}
The variable FullName isn't transmitted by your form to index.php. Only values of form elemnts are sent. You can add a hidden form field, that contains FullName like this:
<input type="hidden" name="FullName" value="<?php echo $user['FullName']">
But your second problem is, that your foreach loop will create several input fields with the exact same name. You won't be able to recieve any of the entered numbers, except the last one. have a look at this question for possible solutions.
Update
Putting each row in individual form tags should solve your problem:
<?php foreach($users as $user) : ?>
<form action="index.php" method="POST">
<tr>
<td align="center" width="40%" >
<?php echo $user['FullName']; ?>
<input type="hidden" name="FullName" value="<?php echo $user['FullName']; ?>" />
</td>
<td width="30%">
<input name="NumberedEntered"/>
</td>
<td>
<input type="submit" value="submit"/>
</td>
</tr>
</form>
<?php endforeach; ?>

Categories