php-general Digest 12 Sep 2010 07:30:37 -0000 Issue 6936
Topics (messages 307956 through 307972):
Re: Elegance is the goal... Sticky form submit help
307956 by: Jason Pruim
307957 by: Jason Pruim
307958 by: Jason Pruim
307959 by: Jason Pruim
307962 by: Jim Lucas
307963 by: tedd
307964 by: tedd
307972 by: Tamara Temple
Re: Disabling an extension on a perdir basis.
307960 by: Richard Quadling
307961 by: Jim Lucas
New to PHP and the list
307965 by: MikeB
307966 by: Tom Sparks
307967 by: MikeB
307969 by: viraj
Re: How to handle a submitted form with no changes -- best practices sought
307968 by: viraj
307970 by: Shawn McKenzie
Re: php cli question
307971 by: Shawn McKenzie
Administrivia:
To subscribe to the digest, e-mail:
php-general-digest-subscr...@lists.php.net
To unsubscribe from the digest, e-mail:
php-general-digest-unsubscr...@lists.php.net
To post to the list, e-mail:
php-gene...@lists.php.net
----------------------------------------------------------------------
--- Begin Message ---
On Sep 11, 2010, at 11:55 AM, tedd wrote:
At 9:49 AM -0400 9/11/10, Jason Pruim wrote:
Hey everyone!
Hope you are having a great weekend, and I'm hoping someone might
be coherent enough to help me find a more elegant solution to a
problem that I have...
I have a form for submitting an event to a website, and if the form
is not submitted successfully (such as they didn't fill out a
required field) I want it to redisplay the form with inline errors
as to what happened and display the values they selected...
-snip-
Any ideas what I'm missing?
Jason:
I think what you are missing is that this data collection should be
split between client-side and server-side operations.
Hey tedd,
Thanks for the response but for this particular project I'm avoiding
using anything but standard HTML since it will be used almost
exclusively by people using screen readers and other assistive
technology so I'm going a little old school with it to make sure it
all works for everyone else first.
For client-side simply use javascript to monitor what they user
enters and then immediately respond to the requirements imposed upon
the user.
After the user fills out the information correctly and clicks
submit, then have your server-side scripts check the data again and
respond accordingly.
Here are a couple of examples:
http://webbytedd.com/c/form-calc/
http://webbytedd.com/c/form-submit/
I will definitely be checking out your examples though! Some of the
cleanest, well documented, and easiest to read code I have seen in a
long time!
--- End Message ---
--- Begin Message ---
Hey Ash,
On Sep 11, 2010, at 10:58 AM, a...@ashleysheridan.co.uk wrote:
For a month selector, using a loop to output the months is good, as
you can then within the loop check for that value sent and set the
selected html attribute for that select element.
that's what I was thinking too... Now just to work out the logic :)
I should warn you that your code will throw a warning when no data
has been posted to it. Consider using isset() instead to check for
posted values rather than comparing a value (which might not exist)
with true.
I have other code that will catch it if it's empty but a good
suggestion none the less! If I stick with that code for some reason
I'll be updating it to use isset()
Thanks Ash!
Thanks,
Ash
http://www.ashleysheridan.co.uk
----- Reply message -----
From: "Jason Pruim" <li...@pruimphotography.com>
Date: Sat, Sep 11, 2010 14:49
Subject: [PHP] Elegance is the goal... Sticky form submit help
To: "PHP-General list" <php-gene...@lists.php.net>
Hey everyone!
Hope you are having a great weekend, and I'm hoping someone might be
coherent enough to help me find a more elegant solution to a problem
that I have...
I have a form for submitting an event to a website, and if the form is
not submitted successfully (such as they didn't fill out a required
field) I want it to redisplay the form with inline errors as to what
happened and display the values they selected...
I have a working solution but was hoping for something a little more
elegant. And something that would work better for a month selector as
well... Here is the relevant code that I have that works:
<?PHP
if ($_POST['hidSubmit'] ==TRUE & $_POST['type'] == "meeting"):
echo <<<HTML
<select name="type" id="type">
<option value="0">-- select type --</option>
<option value="meeting" selected>Meeting</option>
<option value="event" >Event</option>
</select>
HTML;
elseif ($_POST['hidSubmit'] == TRUE & $_POST['type'] == "event"):
//if ($_POST['hidSubmit'] == TRUE & $_POST['type'] == "event") {
echo <<<HTML
<select name="type" id="type">
<option value="0">-- select type --</option>
<option value="meeting">Meeting</option>
<option value="event" selected>Event</option>
</select>
HTML;
else:
//if ($_POST['hidSubmit'] != TRUE):
echo <<<HTML
<select name="type" id="type">
<option value="0" selected>-- select type --</option>
<option value="meeting">Meeting</option>
<option value="event">Event</option>
</select>
HTML;
endif;
?>
which works BUT I don't want to have to have that for a month selector
or a day selector :)
Any ideas what I'm missing?
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
--- End Message ---
--- Begin Message ---
Hi Tamara,
On Sep 11, 2010, at 12:39 PM, Tamara Temple wrote:
Rather than repeating all that code, I suggest the following:
<select name="type" id="type>
<option value="0">-- select type --</option>
<option value="meeting" <?php echo (isset($_POST['hidSubmit'] &&
$_POST['hidSubmit'] == TRUE && $_POST['type'] == "meeting") ?
"selected" : '' ?>
<option value="event" <?php echo (isset($_POST['hidSubmit'] &&
$_POST['hidSubmit'] == TRUE && $_POST['type'] == "event") ?
"selected" : '' ?>
</select>
That's actually what I'm trying to get away from. I was hoping to do
it all in HEREDOC syntax. I've always thought it made it cleaner. But
that is a personal opinion :)
For a month selector, try:
<?php
// assume current month number is in $curr_month
$months = array(1 => "January", "February", "March", "April",
"May", "June", "July", "August", "September", "October", "November",
"December"); // will create an array of month names, with a starting
base of 1 (instead of zero)
echo "<select name=\"month\" id=\"month\">\n";
foreach ($months as $m => $mname) {
echo "<option value=\"$m\"";
if ($curr_month == $m) echo " selected ";
echo ">$mname</option>\n";
}
echo "</select>\n";
?>
There are other possiblities as well. One time, I didn't want to
actually store the month names, perhaps allowing them to be
localized. Instead I used strftime, which will return appropriate
names based on locale:
<?php
// assume current month number is in $curr_month
echo "<select name=\"month\" id=\"month\">\n";
for ($m = 1; $m <= 12; $m++) {
echo "<option value=\"$m\"";
if ($curr_month == $m) echo " selected ";
echo ">";
$mname = strftime("%B", 0,0,0,2010, $m, 1); // time, year and day
don't matter, all we're after is the appropriate month name set in
the locale
echo $mname;
echo "</option>\n";
}
echo "</select>\n";
?>
I'm actually doing something similar to that right now...
<?PHP
if (isset($_POST)) {
$date = date("n", $i);
echo $date;
$i++;
}
?>
Prints just the numeric reference to the month.
--- End Message ---
--- Begin Message ---
On Sep 11, 2010, at 1:03 PM, Debbie . wrote:
Jason,
I don't really understand the responses you got to this email, I
have attached the sticky form I made from a book called "PHP Visual
Quickstart guide. It uses an if conditional to print a response if
the field is empty.
If I'm not helping, sorry, I'm new!
Good luck!
live, love and be happy!
Deb
Hi Deb,
Welcome to the list! It will be the best and worse place you'll ever
come for help! :)
What you sent is helpful, but due to a personal preference I'm trying
to avoid going in and out of PHP like you do in there... Trying to use
HEREDOC for the entire page. It makes more sense to me that way :)
Thank you though! :)
--- End Message ---
--- Begin Message ---
Jason Pruim wrote:
Hi Tamara,
On Sep 11, 2010, at 12:39 PM, Tamara Temple wrote:
Rather than repeating all that code, I suggest the following:
<select name="type" id="type>
<option value="0">-- select type --</option>
<option value="meeting" <?php echo (isset($_POST['hidSubmit'] &&
$_POST['hidSubmit'] == TRUE && $_POST['type'] == "meeting") ?
"selected" : '' ?>
<option value="event" <?php echo (isset($_POST['hidSubmit'] &&
$_POST['hidSubmit'] == TRUE && $_POST['type'] == "event") ? "selected"
: '' ?>
</select>
That's actually what I'm trying to get away from. I was hoping to do it
all in HEREDOC syntax. I've always thought it made it cleaner. But that
is a personal opinion :)
For a month selector, try:
<?php
// assume current month number is in $curr_month
$months = array(1 => "January", "February", "March", "April", "May",
"June", "July", "August", "September", "October", "November",
"December"); // will create an array of month names, with a starting
base of 1 (instead of zero)
echo "<select name=\"month\" id=\"month\">\n";
foreach ($months as $m => $mname) {
echo "<option value=\"$m\"";
if ($curr_month == $m) echo " selected ";
echo ">$mname</option>\n";
}
echo "</select>\n";
?>
There are other possiblities as well. One time, I didn't want to
actually store the month names, perhaps allowing them to be localized.
Instead I used strftime, which will return appropriate names based on
locale:
<?php
// assume current month number is in $curr_month
echo "<select name=\"month\" id=\"month\">\n";
for ($m = 1; $m <= 12; $m++) {
echo "<option value=\"$m\"";
if ($curr_month == $m) echo " selected ";
echo ">";
$mname = strftime("%B", 0,0,0,2010, $m, 1); // time, year and day
don't matter, all we're after is the appropriate month name set in the
locale
echo $mname;
echo "</option>\n";
}
echo "</select>\n";
?>
I'm actually doing something similar to that right now...
<?PHP
if (isset($_POST)) {
$date = date("n", $i);
echo $date;
$i++;
}
?>
Prints just the numeric reference to the month.
Here is a combination of Tamara's method and they way that I would do it
based off her example. Some of hers didn't work for me out of the box,
so I modified it to my liking. Then I included your request to do
HEREDOC syntax for outputting the list.
<?php
$o = array();
for ($m = 1; $m <= 12; $m++) {
$sel = ($curr_month == $m ? ' selected="selected"':'');
$mname = date('F', mktime(0,0,0,$m));
$o[] = ' <option value="'.(int)$m.'"'.$sel.'>'.
htmlspecialchars($mname).'</option>';
}
$select_month_options = join("\n", $o);
echo <<<HTML
<select name="month" id="month">
{$select_month_options}
</select>
HTML;
?>
Jim
--- End Message ---
--- Begin Message ---
At 11:42 AM -0500 9/11/10, Tamara Temple wrote:
The debate on client-side vs. server-side form validation is
ongoing. Client-side is more responsive, and attempts to keep bad
data from ever reaching your application, but relies on javascript
being enabled. Since this is something easily turned off by users,
one can't always rely on it to do form validation. So server-side
validation is needed as well to allow your full application to
gracefully degrade in the absence of working javascript on the
client's side. Coding defensively helps!
It's not a debate.
You can provide progressive enhancement to your form to help your
users *IF* you want.
You should *always* validate all the information coming from the outside world.
The question of *if* you want to do both is your choice without any
debate. Those are only choices that you can elect to follow or not.
Cheers,
tedd
--
-------
http://sperling.com/
--- End Message ---
--- Begin Message ---
At 1:09 PM -0400 9/11/10, Jason Pruim wrote:
Hey tedd,
Thanks for the response but for this particular project I'm avoiding
using anything but standard HTML since it will be used almost
exclusively by people using screen readers and other assistive
technology so I'm going a little old school with it to make sure it
all works for everyone else first.
That goes without saying.
Regardless of *if* your users use screen readers, or not, progressive
enhancement should be followed.
Cheers,
tedd
--
-------
http://sperling.com/
--- End Message ---
--- Begin Message ---
On Sep 11, 2010, at 12:14 PM, Jason Pruim wrote:
On Sep 11, 2010, at 12:39 PM, Tamara Temple wrote:
Rather than repeating all that code, I suggest the following:
[snip]
That's actually what I'm trying to get away from. I was hoping to do
it all in HEREDOC syntax. I've always thought it made it cleaner.
But that is a personal opinion :)
Well, from a maintainability aspect, the way i showed makes more sense
because if there are changes to be made (such as adding another
option), you only have to make one change, not n changes.
--- End Message ---
--- Begin Message ---
On 11 September 2010 17:56, Jim Lucas <li...@cmsws.com> wrote:
> Richard Quadling wrote:
>>
>> Hi.
>>
>> Can't seem to see a way to do this.
>>
>> Is there a way to do this?
>>
>
> Are you talking about a PHP extension or a file extension?
>
I sat there for about a minute reading Ashley's comment, thinking
"what the f__k is he talking about!". Then your comment made it all
make sense.
I want to disable a PHP extension from 1 directory.
Initially I thought that I could use disable_class and
disable_function ini options, but these are php.ini only (according to
the docs).
--
Richard Quadling
Twitter : EE : Zend
@RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY
--- End Message ---
--- Begin Message ---
Richard Quadling wrote:
On 11 September 2010 17:56, Jim Lucas <li...@cmsws.com> wrote:
Richard Quadling wrote:
Hi.
Can't seem to see a way to do this.
Is there a way to do this?
Are you talking about a PHP extension or a file extension?
I sat there for about a minute reading Ashley's comment, thinking
"what the f__k is he talking about!". Then your comment made it all
make sense.
I want to disable a PHP extension from 1 directory.
Initially I thought that I could use disable_class and
disable_function ini options, but these are php.ini only (according to
the docs).
As I thought, looking through the docs, it looks like the only way to
set the options that are only settable via the php.ini file is to use a
per directory php.ini file. But, the problem with that is, it only
works with the CGI/FASTCGI SAPI version of php. It won't work with the
apache mod version.
So, I guess the question back to you is, what is your setup like? And
if it isn't CGI/FASTCGI SAPI are you willing to change to that setup?
Read More: http://www.php.net/manual/en/configuration.file.per-user.php
Jim
--- End Message ---
--- Begin Message ---
Hello, I'm new to PHP and also new to using newsgroups/mailing lists
directly. So if I make a mistake, please forgive me this once and I'll
try to do better in the future.
Please help me understand, my head is absolutely spinning and I can't
get my mind around this.
In the php.net site there is an example on uploading a file via a
form. http://www.php.net/manual/en/features.file-upload.post-method.php
This is the sample code for the form:
<form enctype="multipart/form-data" action="__URL__" method="POST">
<!-- MAX_FILE_SIZE must precede the file input field -->
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<!-- Name of input element determines name in $_FILES array -->
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
Is MAX_FILE_SIZE passed to PHP as $MAX_FILE_SIZE?
Assuming I want to make it a variable in my PHP code, can I do this:
<?php
$MAX_FILE_SIZE = 30000;
echo <<<_END
<form enctype="multipart/form-data" action="__URL__" method="POST">
<!-- MAX_FILE_SIZE must precede the file input field -->
<input type="hidden" name="MAX_FILE_SIZE" />
<!-- Name of input element determines name in $_FILES array -->
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
<<<_END
<?
In other words, simply omitting the "value" clause in the form field?
And can I make that value a global constant somehow so that I can
later also test the actual size of the uploaded file in another
function?
Or do I have to do this:
<?php
$MAX_UPLOAD_SIZE = 30000;
echo <<<_END
<form enctype="multipart/form-data" action="__URL__" method="POST">
<!-- MAX_FILE_SIZE must precede the file input field -->
<input type="hidden" name="MAX_FILE_SIZE"
value="$MAX_UPLOAD_SIZE"/>
<!-- Name of input element determines name in $_FILES array -->
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
<<<_END
<?
I'm also concerned that in the first instance, a malicious user can
modify the value and I will be hosed. Am I correct?
Thanks.
--- End Message ---
--- Begin Message ---
--- On Sun, 12/9/10, MikeB <mpbr...@gmail.com> wrote:
> From: MikeB <mpbr...@gmail.com>
> Subject: [PHP] New to PHP and the list
> To: php-gene...@lists.php.net
> Received: Sunday, 12 September, 2010, 9:37 AM
> Hello, I'm new to PHP and also new to
> using newsgroups/mailing lists directly. So if I make a
> mistake, please forgive me this once and I'll try to do
> better in the future.
>
> Please help me understand, my head is absolutely spinning
> and I can't
> get my mind around this.
>
> In the php.net site there is an example on uploading a file
> via a
> form. http://www.php.net/manual/en/features.file-upload.post-method.php
>
start off simpler with this version
http://www.w3schools.com/php/php_file_upload.asp
tom
--- End Message ---
--- Begin Message ---
On 9/11/2010 6:51 PM, Tom Sparks wrote:
--- On Sun, 12/9/10, MikeB<mpbr...@gmail.com> wrote:
From: MikeB<mpbr...@gmail.com>
Subject: [PHP] New to PHP and the list
To: php-gene...@lists.php.net
Received: Sunday, 12 September, 2010, 9:37 AM
Hello, I'm new to PHP and also new to
using newsgroups/mailing lists directly. So if I make a
mistake, please forgive me this once and I'll try to do
better in the future.
Please help me understand, my head is absolutely spinning
and I can't
get my mind around this.
In the php.net site there is an example on uploading a file
via a
form. http://www.php.net/manual/en/features.file-upload.post-method.php
start off simpler with this version
http://www.w3schools.com/php/php_file_upload.asp
I think I have that much under my belt, I'm more or less trying to dig a
little deeper.
--- End Message ---
--- Begin Message ---
On Sun, Sep 12, 2010 at 5:07 AM, MikeB <mpbr...@gmail.com> wrote:
> Hello, I'm new to PHP and also new to using newsgroups/mailing lists
> directly. So if I make a mistake, please forgive me this once and I'll try
> to do better in the future.
>
> Please help me understand, my head is absolutely spinning and I can't
> get my mind around this.
>
> In the php.net site there is an example on uploading a file via a
> form. http://www.php.net/manual/en/features.file-upload.post-method.php
>
> This is the sample code for the form:
>
> <form enctype="multipart/form-data" action="__URL__" method="POST">
> <!-- MAX_FILE_SIZE must precede the file input field -->
> <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
> <!-- Name of input element determines name in $_FILES array -->
> Send this file: <input name="userfile" type="file" />
> <input type="submit" value="Send File" />
> </form>
>
> Is MAX_FILE_SIZE passed to PHP as $MAX_FILE_SIZE?
err! print_r and var_dump is your friend!
>
> Assuming I want to make it a variable in my PHP code, can I do this:
>
> <?php
>
> $MAX_FILE_SIZE = 30000;
>
> echo <<<_END
> <form enctype="multipart/form-data" action="__URL__" method="POST">
> <!-- MAX_FILE_SIZE must precede the file input field -->
> <input type="hidden" name="MAX_FILE_SIZE" />
> <!-- Name of input element determines name in $_FILES array -->
> Send this file: <input name="userfile" type="file" />
> <input type="submit" value="Send File" />
> </form>
> <<<_END
> <?
>
> In other words, simply omitting the "value" clause in the form field?
>
> And can I make that value a global constant somehow so that I can
> later also test the actual size of the uploaded file in another
> function?
if this is about getting the size of the uploaded file, you better try
print_r($_FILES) after the form submit. there you have size in bytes.
MAX_FILE_SIZE in html form will be used to early notify the up-loader,
in case of a bigger file which exceeds the server side limit imposed
through php.ini. (see http://www.php.net/manual/en/ini.core.php file
uploads section)
>
> Or do I have to do this:
>
> <?php
>
> $MAX_UPLOAD_SIZE = 30000;
> <<<_END
> <?
>
> I'm also concerned that in the first instance, a malicious user can
> modify the value and I will be hosed. Am I correct?
and yes, never trust client side.
~viraj
>
> Thanks.
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
--- End Message ---
--- Begin Message ---
On Sat, Sep 11, 2010 at 10:22 PM, Tamara Temple <tamouse.li...@gmail.com> wrote:
> I have a general question and am looking for best practices.
>
> Is it worth the overhead of passing along the previous values in the table
> in hidden fields so that fields can be checked to see if they've been
without storing all the values in respective hidden fields, calculate
a 'checksum' on data and store in one hidden field. after the submit
and before you decide on the update, you can calculate the checksum of
submitted data, compare against the hidden field checksum and take the
decision.
if you maintain a session, storing checksum in session instead of
client side (hidden field in form) will be more safe/secure and will
help in improving the mechanism (persistent classes, serialized data
etc)
~viraj
> updated or not after the submit? Or is it worth reloading the old values
> from the table to check against the newly submitted form? Or is all that
> overhead not worth the time because an update that overwrites existing
> values with the same values is not that onerous?
>
> (Is that question clear enough?)
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
--- End Message ---
--- Begin Message ---
On 09/11/2010 11:52 AM, Tamara Temple wrote:
> I have a general question and am looking for best practices.
>
> Suppose I present a user with a form for editing an entry in a table,
> i.e., the form has filled in values from the existing table entry.
>
> Now, suppose they click on 'submit' without making any changes in the
> form. (Perhaps, say, rather than clicking 'Cancel' or 'Return to Main'
> or some other option which would get them out of that screen without
> submitting the form).
>
> Is it worth the overhead of passing along the previous values in the
> table in hidden fields so that fields can be checked to see if they've
> been updated or not after the submit? Or is it worth reloading the old
> values from the table to check against the newly submitted form? Or is
> all that overhead not worth the time because an update that overwrites
> existing values with the same values is not that onerous?
>
> (Is that question clear enough?)
I would just submit the query. Unless you have hundreds or thousands of
users per second that load the form and submit the form with no changes,
then there really is no problem.
It could however be a problem if there is a BOT or something that
continually submits to your page. In that case (and in general) I would
recommend using a form token that helps guard against this.
--
Thanks!
-Shawn
http://www.spidean.com
--- End Message ---
--- Begin Message ---
On 09/10/2010 11:13 AM, J Ravi Menon wrote:
> Hi,
>
> I have some basic questions on running php (5.2.x series on Linux
> 2.6) as a standalone daemon using posix methods (fork() etc..):
>
> #!/usr/bin/php
> <?php
>
> require_once ('someclass.php');
>
> // do some initializations
> .
>
> // main 'forever' loop - the '$shutdown' will
> // be set to true via a signal handler
>
> while(!$shutdown)
> {
> $a = new SomeClass();
>
> $a->doSomething()
>
> }
>
> // shutdown logic.
>
> The 'someclass.php' in turn will include other files (via require_once).
>
> The above file will be executed directly from the shell. The main loop
> could be listening to new requests via sockets etc..
>
> Few questions:
>
> 1) Does opcode cache really matter in such cli-based daemons? As
> 'SomeClass' is instantiated at every loop, I am assuming it is only
> compiled once as it has already been 'seen'.
> I am not very clear on how apc (or eaccelerator) works in such cases.
>
>
> 2) What about garbage collection? In a standard apache-mod-php setup,
> we rely on the end of a request-cycle to free up resources - close
> file descriptiors, free up memory etc..
> I am assuming in the aforesaid standalone daemon case, we would
> have to do this manually? In the loop above, would it be better to
> 'unset($a)' explicitly at the end of it before
> it goes to the next iteration?
>
> Note: I have written pre-forker deamons in php directly and
> successfully deployed them in the past, but never looked at in depth
> to understand all the nuances. Anecdotally, I have
> done 'unset()' at some critical places were large arrays were used,
> and I think it helped. AFAIK, unlike Java, there is no 'garbage
> collector' thread that does all the magic?
>
> Thanks,
> Ravi
If I have time when you reply I'll answer the questions, but I must ask:
Is this purely academic? Why is this a concern? Have you encountered
issues? If so, what?
--
Thanks!
-Shawn
http://www.spidean.com
--- End Message ---