473,396 Members | 1,799 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,396 software developers and data experts.

Client-side Javascript validation of "select multiple" for PHP

Has anyone here ever done a case where you have a select multiple form
element and you have to do both server-side and client-side validation?

I am honestly not sure how to do it in Javascript (I keep getting errors
thrown that I can't verify because the form processes onto itself too
quickly for me to check the Javascript errors) because the select multiple
form element name has to be in the form of "var[]" because PHP will then
recognize $var as an array and not as a scalar (if it sees "$var" it will
only capture the LAST element you entered in the select multiple, if it sees
"$var[]" it gets them all).

However, "var[]" is not friendly to Javascript either, at least as far as I
can tell. So, what I need to find out is how anyone out there has ever
dealt with select-multiple form elements for BOTH Javascript AND PHP.

Thanx
Phil

PS: Code below:

<?
require_once('/home/nordicnet.no/include/nordicnet_global_vars_functions.php
');
require_once("$ACTUAL_STARTPATH/reports/include/reports_global_vars.php");
require_once("$ACTUAL_STARTPATH/reports/include/reports_classes.php");

if ($hasChosenReport) {
/*
$stuff = '<html><head><title>stuff</title></head><body><b>Hello</b>
World</body></html>';
$fileName = 'stuff.doc';

header("Content-type: application/msword");
header("Content-Length: " . strlen(ltrim($stuff)));
header("Content-Disposition: inline; filename=" . $fileName);

echo ltrim($stuff);
*/
print_r($_POST);
print_r("<P>");
print_r($reportType);
}

if (!$hasChosenReport) {
$report = new Report;
$report->dbOpen();

?>
<html>
<head>
<title><?= $brand ?>s Report</title>
<link rel=stylesheet href=/stylesheets/nordicnet_style.css type=text/css>
</head>
<script>
<!--
function isValidReportOption() {
hasPickedUsers = false;
userArray = eval('document.reportForm.users' . String.fromCharCode(91) .
String.fromCharCode(93));
for (i = 0; i < userArray.length; i++) {
if (userArray[i].selected) {
hasPickedUsers = true;
break;
}
}
if (!hasPickedUsers) {
alert("Velg brukern for report");
return false;
}
hasPickedType = false;
for (i = 0; i < document.reportForm.reportType.length; i++) {
if (document.reportForm.reportType[i].checked) {
hasPickedType = true;
break;
}
}
if (!hasPickedType) {
alert("Velg reportstil");
return false;
}
hasPickedInfo = false;
for (i = 0; i < document.reportForm.reportInfo.length; i++) {
if (document.reportForm.reportInfo[i].checked) {
hasPickedInfo = true;
break;
}
}
if (!hasPickedInfo) {
alert("Velg reportinfo");
return false;
}
}
//-->
</script>
<body>
<h2><?= $font ?>Jeg vill få <?= $brand ?>s reporten!</font></h2>
<a href=<?= $PHP_SELF ?>>Reset for ny reporten</a>
<form name=reportForm method=post action="<?= $PHP_SELF ?>"
onSubmit="return isValidReportOption()">
<?= $font ?>Velg brukern for reporten:</font><br>

<?
$reportQuery = $report->getUsers();
echo $report->userDropdown($reportQuery);
?>

<p>
<?= $font ?>Velg reportstil:</font><br>

<? echo $report->getTypes($report->getReportStilTypes(), 'reportType'); ?>

<p>
<?= $font ?>Velg reportinfo:</font><br>

<? echo $report->getTypes($report->getReportInfoTypes(), 'reportInfo'); ?>

<p>
<input type=hidden name=hasChosenReport value=1>
<input type=submit name=submit value="Få Min Report Nu!"
class=blue_button>
</form>
</body>
</html>

<?
$report->dbClose();
$report = null;
}
?>
Jul 17 '05 #1
3 8587
Hello,

On 10/19/2003 05:34 PM, Phil Powell wrote:
Has anyone here ever done a case where you have a select multiple form
element and you have to do both server-side and client-side validation?

I am honestly not sure how to do it in Javascript (I keep getting errors
thrown that I can't verify because the form processes onto itself too
quickly for me to check the Javascript errors) because the select multiple
form element name has to be in the form of "var[]" because PHP will then
recognize $var as an array and not as a scalar (if it sees "$var" it will
only capture the LAST element you entered in the select multiple, if it sees
"$var[]" it gets them all).

However, "var[]" is not friendly to Javascript either, at least as far as I
can tell. So, what I need to find out is how anyone out there has ever
dealt with select-multiple form elements for BOTH Javascript AND PHP.


This class does exactly what you need:

http://www.phpclasses.org/formsgeneration

--

Regards,
Manuel Lemos

Free ready to use OOP components written in PHP
http://www.phpclasses.org/

Jul 17 '05 #2

"Phil Powell" <so*****@erols.com> schreef in bericht
news:HIBkb.89636$0Z5.7232@lakeread03...

I am honestly not sure how to do it in Javascript (I keep getting errors
thrown that I can't verify because the form processes onto itself too
quickly for me to check the Javascript errors) because the select multiple
form element name has to be in the form of "var[]" because PHP will then
recognize $var as an array and not as a scalar (if it sees "$var" it will
only capture the LAST element you entered in the select multiple, if it sees "$var[]" it gets them all).

The usage of $var[] is not mandatory when you are able to parse the
$HTTP_RAW_POST_DATA string, which will be the case when you have enabled the
option 'always_populate_raw_post_data' in your php.ini file.

When the form method is set to GET you should parse
$_SERVER['QUERY_STRING'].
However, "var[]" is not friendly to Javascript either, at least as far as I can tell. So, what I need to find out is how anyone out there has ever
dealt with select-multiple form elements for BOTH Javascript AND PHP.


You can get around it by accessing the JavaScript Form object's elements
array:

<script language="JavaScript">
function showSelected(form) {
var s = form.elements['var[]'];
for (var i = 0; i < s.length; i++) {
if (s[i].selected) alert (s[i].value);
}
}
</script>
.....
<form method="post">
<select name="var[]" multiple="true" size="4">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<br />
<input type="button" value="Check" onclick="showSelected(form)" />
</form>

BTW, this is a FAQ in the comp.lang javascript newsgroup. See
http://www.jibbering.com/faq/ for more info.
JW

Jul 17 '05 #3
Phil Powell wrote:
However, "var[]" is not friendly to Javascript either, at least as far as I
can tell.
You cannot use document.formname.elements.var[] because
`['...`]' is the index operator in JavaScript. Use
document.forms['formname'].elements['var[]'] instead.
<?
I suggest you disable short tags and use `<?php' instead.
<html>
<head>
<title><?= $brand ?>s Report</title>
<link rel=stylesheet href=/stylesheets/nordicnet_style.css type=text/css>
</head>
<script>
That's invalid HTML. The DOCTYPE declaration is missing before the `html'
element, the charset declaration with the `meta' element is missing in the
`head' element and the `type' attribute is missing for the `script' element.
Also attribute values that contain the `/' character must be enclosed
in single or double quotes. (You should always enclose attribute values in
quotes as there are more characters that require quotes and
lookup/correction takes time.)

---> http://validator.w3.org/
[...]
<script>
<!--
function isValidReportOption() {
hasPickedUsers = false;
The `var' keyword is missing, you are defining global variables which you
want to avoid.
userArray = eval('document.reportForm.users' . String.fromCharCode(91) .
String.fromCharCode(93));


eval(...) is evil[tm] and you are mixing PHP and JavaScript. In
JavaScript, the string concatenation operator is `+', not `.':

var userArray = document.forms['reportForm'].elements['users[]'];
F'up2 comp.lang.javascript

PointedEars

Jul 17 '05 #4

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

4
by: TJS | last post by:
how do I get "onSubmit" to work in .net ? <Form id="Form1" name="Form1" method="post" onSubmit="return validateStandard(this, 'error');" runat="server">
5
by: JJ_377 | last post by:
I want a JavaScript validation function to fire on an ASP.NET textbox's change event. Here's what I've been trying and it is not working. The following added in the webform's page load event: ...
3
by: Mike P | last post by:
I have a method that I use for Javascript validation (see below). What I want to do is change the alert title, buttons, icon etc. Does anybody know the correct syntax to do this? private void...
1
by: bill | last post by:
I need to be able to dynamically add items to a <asp:listbox> (or HTML <select runat=server>) using clientside javascript, and retrieve the items when the page is posted back. I use this code to...
1
by: karen987 | last post by:
I have a comment form, on a news website, ASP page, which users fill in and it adds comments to a news article. The reader clicks on a headline and the comments open up in a new window. It already...
1
by: ll | last post by:
Hi, I am working with a page that has both cfform elements and 'plain html' form elements. In particular, I am needing to validate my textarea form field and my email text field. On one of my...
1
by: shrin | last post by:
Hi all, I want to use asp.net validator and javascript validation function on a single form for different fields. also I want to execute some code on button click after the validation is completed....
2
by: John Kotuby | last post by:
Hi all, In ASP.NET 2.0 and VB.NET, I am trying to get the OnSelectedIndexChanged event to fire a Javascript function. There is no OnClientClick event for that control. When I try something...
21
by: kiran83 | last post by:
My Text box can accept all types of data like alphabets,numeric,special characters ... Should give an error message 'if space is not a valid value ' when i am clicking a button... in asp.net with...
1
by: jerrydigital | last post by:
Hello, I have a form that i use ASP to process the form to my access database. It works well but I'm struggling to get the javascript validation to work. I have posted a small version of my form...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.