how can I submit the value of an unchecked checkbox - javascript

I have a user edit page with a set of user permissions. Each permission is basically a checkbox. If checked the user has the permission if unchecked the user does not have the permission. So if I want to remove a permission I would uncheck the box and vice versa to add a permission.
I got everything to work using a hidden input, but the problem that I am having is that it is submitting both the hidden input and the checkbox value. For example even if I don't make a change and click the update button, I get a message that reads:
Removed access from 1 permission levels
Added access to 1 permission levels
I will show you my code below. Something to keep in mind is that each input calls a different function.
Here is the inputs:
<ul class="list-group permission-summary-rows">
<?php //List of permission levels user is apart of
foreach ($permissionData as $v1) {
if(isset($userPermission[$v1['id']])){
?>
<li class="list-group-item">
<?php echo $v1['name']; ?>
<span class="pull-right">
<input type="hidden" name="removePermission[<?php echo $v1['id'] ?>]" id="removePermission[<?php echo $v1['id'] ?>]" value="<?php echo $v1['id'] ?>" >
<input type="checkbox" checked data-toggle="switch" name="addPermission[<?php echo $v1['id'] ?>]" id="addPermission[<?php echo $v1['id'] ?>]" value="<?php echo $v1['id'] ?>" >
</span>
</li>
<?php
}
}
?>
<?php //List of permission levels user is not apart of
foreach ($permissionData as $v1) {
if(!isset($userPermission[$v1['id']])){
?>
<li class="list-group-item">
<?php echo $v1['name']; ?>
<span class="pull-right">
<input type="checkbox" data-toggle="switch" name="addPermission[<?php echo $v1['id'] ?>]" id="addPermission[<?php echo $v1['id'] ?>]" value="<?php echo $v1['id'] ?>" >
</span>
</li>
<?php
}
}
?>
Here is the PHP:
//Remove permission level
if(!empty($_POST['removePermission'])) {
$remove = $_POST['removePermission'];
if ($deletion_count = removePermission($remove, $userId)) {
$successes[] = lang("ACCOUNT_PERMISSION_REMOVED", array ($deletion_count));
} else {
$errors[] = lang("SQL_ERROR");
}
}
// Add permission level
if(!empty($_POST['addPermission'])) {
$add = $_POST['addPermission'];
if ($addition_count = addPermission($add, $userId)) {
$successes[] = lang("ACCOUNT_PERMISSION_ADDED", array ($addition_count));
} else {
$errors[] = lang("SQL_ERROR");
}
}
Even if I add the hidden input underneath the checkbox input I receive the same message. I know it has something to do with using different functions so can anyone guide me in the right direction? Should I use some JS code to find if it is checked or not?

If you want to use that trick... you must to name the same both arrays!
<input type="hidden" name="Permission[<?php echo $v1['id'] ?>]" id="removePermission[<?php echo $v1['id'] ?>]" value="0" >
<input type="checkbox" <?php echo ($v1['id']=='YES')?'checked':'' ?> data-toggle="switch" name="Permission[<?php echo $v1['id'] ?>]" id="AddPermission[<?php echo $v1['id'] ?>]" value="1" >
Take a look at "$v1['id']=='YES'" and use the correct comparison. Remember, name must be the same and a value of 0 will be disabled and 1 enabled.
Good luck.

Both the hidden input and the checkbox values are submitted because they're of different input types.
You don't need to hardcode checked explicitly. Write a php if loop to check if the user has permission and echo "checked" accordingly.

//EDIT:
This is the code I would use for this problem. Just overwrite all rules for the user in the DB. Only thing you have to know is the amount of rules (represented by the constant).
<html>
<body>
<?PHP
define("NUMBEROFINPUTS",5);
if(isset($_GET["permissions"])){
$dbperms = array();
foreach($_GET["permissions"] as $permission) {
$dbperms[$permission] = 1;
}
//$dbperms: 0->Input is not set; 1-> Input is set
for($i=0;$i<NUMBEROFINPUTS;$i++){
if(isset($dbperms[$i])) {
echo "Input ".$i." is set<br />";
}
else{
echo "Input ".$i." is not set<br />";
}
}
}
else {
echo '<form>';
for($i = 0;$i<NUMBEROFINPUTS;$i++){
echo 'Permission '.$i.': <input type="checkbox" name="permissions[]" value="'.$i.'" checked /><br />';
}
echo '<input type="submit" /></form>';
}
?>
</body>
</html>
I hope I could help.

use this in jQuery
$("input[type=checkbox]:not(:checked)").attr("value");
well for get and do some with all unchecked checkbox you can collect it into array... and send it on submit to server
var aUnchecked = new Array();
$("input[type=checkbox]:not(:checked)").each(fucntoin(){
aUnchecked.push($(this).attr("name"));
}

Related

Having trouble with assigning a PHP echo varible to document.getElementById

This works: note-($i = 1)
document.getElementById("range1").setAttribute("value", javascript_array[<?php echo $j++; ?>]);</script>
<p><input type="text" name="range<?php echo $i; ?>" id="range<?php echo $i; ?>" />
This does not work:
document.getElementById("range").setAttribute("value", javascript_array[]);
input type="text" name="range" id="range" />
If I replace "range1" with "range" /not working/
I have read allot and tried several options (+, &, move the "" around) to add to that location but will not work. If I put in "range1" works but not "range". I have the PHP echo in other locations and it works: "value",.., <input type.. name=, id="range<?...
I tried this too and didn't work:
var rangex = "range" + ;
alert(rangex);
document.getElementById(rangex).setAttribute("value", javascript_array[<?php echo $j++; ?>]);</script>
<p><input type="text" name="range<?php echo $i; ?>" id="range<?php echo $i; ?>" />
The alert does come up with "range1" but still will not work. Not sure why StackOF is cutting off the "does not work code"?
Thank you for any help!

Combining two or more submit buttons into one

I have submit buttons for different section of the webpage. The submit button is used to update the forms and database with the text value in the form fields. Currently, each submit button updates the forms (tied to their respective PKEY id, "consideration_no") only in their own sections. I want to update all the sections forms with one button click.
As you can see from the code below, there are 2 submit buttons. I have tried to link two together through IDs but it did not work for me.
// Include config file
require_once "config.php";
// Define variables and initialize with empty values
$question = $answer = "";
$question_err = $answer_err = "";
if(isset($_POST["dg_no"]) && !empty($_POST["dg_no"])){
//counter for array
$counter = 0;
// Get hidden input value
$dg_no = $_POST['dg_no'];
$consideration_no = $_REQUEST['consideration_no'];
$answer = $_POST['answer'];
// Check input errors before inserting in database
if(empty($answer_err)){
// Validate address address
$input_answer = trim($_POST["answer"]);
if(empty($input_answer)){
$answer_err = "Please enter an answer.";
} else{
$answer = $input_answer;
$answer1[$counter] = $input_answer;
}
// Prepare an Submit statement
$sql = 'Update "PDPC".consideration SET answer=:answer WHERE consideration_no = :consideration_no';
if($stmt = $pdo->prepare($sql)){
$stmt->bindParam(":answer", $param_answer);
$stmt->bindParam(":consideration_no", $param_consideration_no);
//$stmt->bindParam(":dg_no", $param_dg_no);
//Set Parameter in while loop, hence new set of parameter for every new form is created and executed.
//Could change the counter loop to a dynamic loop with foreach array.
while ($counter<15){
$param_answer = $answer[$counter];
$param_consideration_no = $consideration_no[$counter];
$stmt->execute();
//$param_dg_no = $dg_no;
// Attempt to execute the prepared statement
//debugggggg
/* $message = $consideration_no[$counter];
$message1 = $answer[$counter];
$message2 = 'lol';
echo "<script type='text/javascript'>alert('$message, $message1, $message2 ');</script>"; */
$counter++;
//apparently redirecting can be placed in the loop, and fields will still get changed.
//header("location: home1.php?dm_no=".$_GET["dm_no"]);
header("location: home1.php?dm_no=".$_GET["dm_no"]);
}
}
if($stmt->execute()){
//Records Submitd successfully. Redirect to landing page
header("location: home1.php?dm_no=".$_GET["dm_no"]);
exit();
} else{
echo "Something went wrong. Please try again later.";
}
// Close statement
unset($stmt);
}
// Close connection
unset($pdo);
} else{
/* --- DISPLAY/READ TABLE, SEE SECTIONS AND ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
// Check existence of dg_no parameter before processing further
if(isset($_GET["dg_no"]) && !empty(trim($_GET["dg_no"]))){
// Get URL parameter
$dg_no = trim($_GET["dg_no"]);
// Prepare a select statement
$sql = 'SELECT * FROM "PDPC".consideration WHERE (dg_fkey = :dg_no AND code_no = 1) ORDER BY consideration_no';
if($stmt = $pdo->prepare($sql)){
// Bind variables to the prepared statement as parameters
$stmt->bindParam(":dg_no", $param_no);
// Set parameters
//$param_no = $dg_no;
$param_no = trim($_GET["dg_no"]);
// Attempt to execute the prepared statement
if($stmt->execute()){
if($stmt->rowCount() > 0){
SubSection($subsection1_1); //Consent Collection Subsection
while($row = $stmt->fetch()){
// Retrieve individual field value
$consideration_no = $row["consideration_no"];
$question = $row["question"];
$answer = $row["answer"];
$dg_no = $_GET['dg_no'];
//...time to show the questions and answers with the while loop...
?>
<form action="<?php echo htmlspecialchars(basename($_SERVER['REQUEST_URI'])); ?>" method="post">
<div class="form-group <?php echo (!empty($answer_err)) ? 'has-error' : ''; ?>">
<label><?php echo $question; ?></label>
<input type="text" name="answer[]" class="form-control" value="<?php echo $answer; ?>">
<span class="help-block"><?php echo $answer_err;?></span>
<input type="hidden" name="consideration_no[]" value="<?php echo $consideration_no; ?>"/>
<input type="hidden" name="dg_no" value="<?php echo $dg_no; ?>"/>
</div>
<?php
}
//...after the loop, show the Submit and Cancel button, coz we only need 1 set each section.
?>
<input type="Submit" name = "$consideration_no[]" class="btn btn-primary" value="Submit">
Cancel
</form>
</div>
<?php
}
}
else{
echo "Oops! Something went wrong. Please try again later.";
}
}
Section($section2); //Collection section
// Prepare a select statement
$sql = 'SELECT * FROM "PDPC".consideration WHERE (dg_fkey = :dg_no AND code_no = 2) ORDER BY consideration_no';
if($stmt = $pdo->prepare($sql)){
// Bind variables to the prepared statement as parameters
$stmt->bindParam(":dg_no", $param_no);
// Set parameters
//$param_no = $dg_no;
$param_no = trim($_GET["dg_no"]);
// Attempt to execute the prepared statement
if($stmt->execute()){
if($stmt->rowCount() > 0){
SubSection($subsection2); //Consent Collection Subsection
while($row = $stmt->fetch()){
// Retrieve individual field value
$consideration_no = $row["consideration_no"];
$question = $row["question"];
$answer = $row["answer"];
$dg_no = $_GET['dg_no'];
//...time to show the questions and answers with the while loop...
?>
<form action="<?php echo htmlspecialchars(basename($_SERVER['REQUEST_URI'])); ?>" method="post">
<div class="form-group <?php echo (!empty($answer_err)) ? 'has-error' : ''; ?>">
<label><?php echo $question; ?></label>
<input type="text" name="answer[]" class="form-control" value="<?php echo $answer; ?>">
<span class="help-block"><?php echo $answer_err;?></span>
<input type="hidden" name="consideration_no[]" value="<?php echo $consideration_no; ?>"/>
<input type="hidden" name="dg_no" value="<?php echo $dg_no; ?>"/>
</div>
<?php
}
//...after the loop, show the Submit and Cancel button, coz we only need 1 set each section.
?>
<input type="Submit" name = "$consideration_no[]" class="btn btn-primary" value="Submit">
Cancel
</form>
</div>
<?php
}
}
else{
echo "Oops! Something went wrong. Please try again later.";
}
}
// Close statement
unset($stmt);
// Close connection
unset($pdo);
}
else{
// URL doesn't contain dg_no parameter. Redirect to error page
header("location: error.php");
exit();
}
}
I want it to update all the fields, in different sections, with one submit button
your code was bit difficult to read, but from what i understood you are trying to combine two or more form submissions into one. It's quiet simple
<form method="POST" action="save.php">
<input type=text name=name[] />
<input type=text name=name[] />
</form>
by using the [] to identify the input element you can have multiple values with the same name where you can access them from the PHP script as an array.
For example the above example will produce an array as follows
<?php
print_r($_POST['name']); //("name" => Array....
is this clear enough for you? if not drop a comment, i will explain more. As a side note i do recommend you look into using template engine, and also a framework in your coding project.
Here's what I see when i separate the html into a new file. I tried to remove the excess forms but when I open the last collapsible section, it instantly executes a submit action and brings me back to the home page.
<button class="collapsible"><?php echo $section ?></button>
<div class="content">
<button class="collapsible"><?php echo $subsection ?></button>
<form action="<?php echo htmlspecialchars(basename($_SERVER['REQUEST_URI'])); ?>" method="post">
<?php
//while loop start
?>
<form action="<?php echo htmlspecialchars(basename($_SERVER['REQUEST_URI'])); ?>" method="post">
<div class="form-group <?php echo (!empty($answer_err)) ? 'has-error' : ''; ?>">
<label><?php echo $question; ?></label>
<input type="text" name="answer[]" class="form-control" value="<?php echo $answer; ?>">
<span class="help-block"><?php echo $answer_err;?></span>
<input type="hidden" name="consideration_no[]" value="<?php echo $consideration_no; ?>"/>
<input type="hidden" name="dg_no" value="<?php echo $dg_no; ?>"/>
</div>
<?php
//while loop ends
?>
<input type="Submit" name = "$consideration_no[]" class="btn btn-primary" value="Submit">
Cancel
</form>
</div>
<?php
//while loop start
?>
<form action="<?php echo htmlspecialchars(basename($_SERVER['REQUEST_URI'])); ?>" method="post">
<div class="form-group <?php echo (!empty($answer_err)) ? 'has-error' : ''; ?>">
<label><?php echo $question; ?></label>
<input type="text" name="answer[]" class="form-control" value="<?php echo $answer; ?>">
<span class="help-block"><?php echo $answer_err;?></span>
<input type="hidden" name="consideration_no[]" value="<?php echo $consideration_no; ?>"/>
<input type="hidden" name="dg_no" value="<?php echo $dg_no; ?>"/>
</div>
<?php
//while loop ends
?>
<input type="Submit" name = "$consideration_no[]" class="btn btn-primary" value="Submit">
Cancel
</form>
</div>
<?php

How to get radio button value dynamically in JavaScript

I have six radio button whose id is coming dynamically in foreach loop now i have to get that value outside foreach loop. If any body know solution than please help. Below is my code
<div class="person_option-block">
<h5>No of Person</h5>
<?php
$no_of_persons = $this->Mdl_home->no_of_person_all();
foreach($no_of_persons as $no_of_person){ ?>
<label class="person_option">
<?php echo $no_of_person['person']; ?>
($ <?php echo $no_of_person['price']; ?>/person)
<input type="radio" class="person-radio" name="no_person" id="<?php echo $no_of_person['id']; ?>" value="<?php echo $no_of_person['id']; ?>"
onchange="get_makeup_service(<?php echo $no_of_person['person']; ?>)">
<input type="hidden" id="person_<?php echo $no_of_person['person']; ?>" value="<?php echo $no_of_person['person']; ?> ($<?php echo $no_of_person['price']; ?>/person)">
</label>
<?php } ?>
</div>
<div class="pull-right">
<a href="javascript:void(0);" class="custom-btn" id="step1-next-btn">
Next
<i class="fa fa-angle-double-right" aria-hidden="true"></i>
</a>
</div>
When i click on next button the id of particular radio button should alert
$('#step1-next-btn').click(function(){
$('#step1-block').hide();
$('#step2-block').show();
});
Use $('input[name=no_person]:checked').val(); expression to get the selected radio button value.
Try Using,
$(function(){
if($("#radioID").prop("checked")) {
var radioValue = $("#radioID").val();
}
});

javascript checkbox (click image - checks box) help w/php

I have the following, I would like to add a feature that will allow me to click the image displayed and checkbox above becomes checked, is it possible? Seems lines 29-32. I found an example, but didn't work for me.
thanks
<html>
<head>
<title>This is a simple PHP script to delete select images.</title>
</head>
<body>
<?php
if (isset($_POST['image_list'])) {
foreach ($_POST['image_list'] as $imagename) {
if (file_exists($imagename)) {
unlink($imagename);
}
}
}
?>
<form action="images_view.php" method="POST">
<p>Please select multiple images you want to remove. Please note that the selected images will be removed from server as well.</p>
<?php
$files = glob("videos/THUMBNAILS/*.*");
for ($i=0; $i<count($files); $i++)
{
$image = $files[$i];
$supported_file = array(
'jpg',
);
$ext = strtolower(pathinfo($image, PATHINFO_EXTENSION));
if (in_array($ext, $supported_file)) {
echo '<input type="checkbox" name="image_list[]" style="margin-right:10px;" value="'.$image.'" />';
echo '<input type="checkbox" name="image_list[]" style="margin-right:10px;" value="'.$image.'" />';
echo basename($image)."<br />"; // show only image name if you want to show full path then use this code // echo $image."<br />";
echo '<img src="'.$image .'" style="max-width: calc(100% - 20px); alt="Random image" />'."<br /><br />";
} else {
continue;
}
}
?>
<input type="submit" name="submit" style="width:300px;height:60px;margin-left:20px;" value="Delete" />
</form>
</body>
</html>
You can just wrap the checkbox input and the image by a label:
<label>
<input type="checkbox" name="image_list[<?php echo $imageId; ?>]" />
<img src="https://lh3.googleusercontent.com/ez8pDFoxU2ZqDmyfeIjIba6dWisd8MY_6choHhZNpO0WwLhICu0v0s5eV2WHOhuhKw=w170" />
</label>
Demo
In backend you can simply do a foreach and delete the according images:
foreach (array_keys($_POST['image_list']) as $imageId) {
// delete image by id.
}

HTML fields are shown empty when they contain value

I have an edit user form. When a user visits this page, details regarding to him are shown in the fields. He can edit the fields if he want to, and then submit the form.
<form id="edit-form"method="post" action="<?php echo $_SERVER['PHP_SELF'] ; ?>">
<input id="txtalias" name="txtalias" type="text" value="<?php echo 1; ?>" >
<input type="text" id="txthour_max" name="txthour_max" value="<?php echo 2; ?>" >chk1
<input type="text" id="txtminute_max" name="txtminute_max" value="<?php echo 3; ?>" >chk2
<input type="text" id="txthour_def" name="txthour_def" value="<?php echo 4; ?>" >chk3
<input type="text" id="txtminute_def" name="txtminute_def" value="<?php echo 5; ?>">chk4
<button id="serv_butn" type="submit">Save settings</button>
</form>
This is the PHP part:
if((isset($_POST['txtalias']))&&(isset($_POST['txthour_max']))&&(isset($_POST['txtminute_max']))&&(isset($_POST['txthour_def']))&&(isset($_POST['txtminute_def'])))
{
$z = $_POST['txtalias'];
$y= $_POST['txthour_max'];
$w=$_POST['txtminute_max'];
$x = $_POST['txthour_def'];
$u = $_POST['txtminute_def'];
}
And if the user, doesn't want to make any changes & he clicks the submit button,
Notice: Undefined variable
is shown, even though the text fields have values stored in them.
How to solve this issue?
<input id="txtalias" name="txtalias" type="text" value="<?php echo $env; ?>" >
If this is a textbox, and when i click submit button, following notice is shown
Notice: Undefined variable: env in C:\wamp\www\project\mypage.php on line 212 Call Stack #TimeMemoryFunctionLocation 10.0010163472{main}( )..\mypage.php:0 ">
your
<input id="txtalias" name="txtalias" type="text" value="<?php echo $env; ?>">
$env has not define;
please check when you declare $env

Categories

Resources