kaijim

PHP Tutorial

30 posts in this topic

TESTING POST & AJAX SCRIPTSThis is a very simple technique that others must have discovered before me, but I don't recall seeing it mentioned anywhere, on this board or otherwise. Maybe because it's so incredibly obvious, or so incredibly wrong? FWIW, here it is.The problem. You design a PHP script that receives POST data. Testing it as written requires a form or AJAX. Maybe you have such a form already embedded in your page. If not, you must create one to test the script. Testing a script that you communicate with by AJAX is even trickier. Because data you echo isn't automatically displayed, you have to hack up your javascript with alerts and so forth to see what the responseText is.Wouldn't it be nice to run such a script right from your address bar? The results would appear immediately in your browser.Two things stand in the way. First, address-bar requests are GET requests. If your script extracts data from the $_POST array, no data will be there. Second: If you are using sessions for security, your script may require that a user be logged in before the script can be run.A partial solution is to write your script using the $_REQUEST array instead of the $_POST array. Now you can put test data into your ?query string and the script will not care if it comes by POST or GET. But using $_REQUEST is bad practice, so you'll have to go back and change all those references before your script is ready for action. That's extra work and creates the chance of a mistake (you might neglect to change one). And this does nothing to solve the login problem. For that, you'll have to comment out lines that reference the $_SESSION array. This is also extra work and creates chances for mistakes.A solution. Add the following line to the top of your script, right after your session_start statement (if you have one):

$_POST = $_SESSION = &$_GET;

Now you can test your script from your browser's address bar. Put all the POST and SESSION data your script requires into a big ?query string. (This might mean a lot of typing, but you'll only have to do most of it once.) The GET data gets copied into the $_POST array, and any existing SESSION data gets overwritten.Advantages:1. You can run your script in what is essentially a command-line environment.2. No login is required, so you don't have to worry about session timeout.3. No forms to load means not having to troubleshoot the form mechanism while you're testing the PHP mechanism.4. Same with AJAX.5. Instant feedback on scripts meant to run in an AJAX environment. Easy debugging that requires no changes to your javascript or HTML just for debugging purposes.6. The whole trick requires one line of code that can be deleted or commented out very easily.7. Depending on your set-up, cookie data will automatically be available as usual.8. Low overhead, if it matters, since we're copying the $_GET array by reference.Disadvantages:1. You can't transmit a lot of data into a GET request, and browsers limit the length of URLs permitted in the address bar. Smaller bits of test data may not be sufficient for some applications. (The limit is still pretty big, though. IE allows up to 2048 characters in the address bar. That's as long as a two-page essay.)2. You may need long, complicated query strings. (Copy/paste can simplify this problem. It also gives you the chance to really look at your data. It's real easy to muff a comma in a JSON string, and this technique lets you construct one that is 100% correct.)3. Potential security issues if you're developing in office-cubicle or school-lab environments.4. If your script uses the same keys in multiple superglobal arrays, they'll all evaluate to the same value. Chances are good they would do that anyway, but not in all situations, and part of your testing may involve routines for when they are different. I haven't thought of a way around this that doesn't involve modifying your script (which kind of defeats the purpose).Anyway, that's my Thanksgiving contribution to this thread. If anyone sees something stoopid I've missed, please show me. If the whole plan is wrongheaded, I'll just Hoover this post. If it needs tweaking, I'll tweak it.

Share this post


Link to post
Share on other sites

The PHP tutorials on w3schools are amazing! I doubted myself, but about half an hour of reading and I was able to make a nice web interface for a dynamically changing index of files.like this:

<?php$files=scandir("apps");for ($x=2; $x<count($files); $x++){echo "<li><a href='apps/" . $files[$x] . "'>" . $files[$x] . "</a></li>";}?>

:) ... sorry I just wanted to brag about my fortunes!

Share this post


Link to post
Share on other sites

You may also like to look at the glob() function.

Share this post


Link to post
Share on other sites
Spelling is over rated:I cdnuolt blveiee taht I cluod aulaclty uesdnatnrd waht I was rdgnieg The phaonmneal pweor of the hmuan mnid. Aoccdrnig to a rscheearch at Cmabrigde Uinervtisy, it deosn't mttaer inwaht oredr the ltteers in a wrod are, the olny iprmoatnt tihng is taht the frist and lsat ltteer be in the rghit pclae. The rset can be a taotl mses and you can sitll raed it wouthit a porbelm. Tihs is bcuseae the huamn mnid deos not raed ervey lteter by istlef, but the wrod as a wlohe.Amzanig huh?yaeh and I awlyas thought slpeling was ipmorantt!
This was so fun I wrote a script for it I know it's not the best script in the world but does the job :)
<form method="post" action="">	<textarea name="message"></textarea>	<input type="submit" value="Generate" /></form><?php	if(isset($_POST['message'])){		$message = htmlspecialchars($_POST['message']);				$newMessage = "";		$splitSpace = explode(" ", $message);		foreach($splitSpace as $key => $value){			$lenght = strlen($value) - 1;			if($lenght > 3){				$last = substr($value, $lenght);				if($last == "," or 				$last == "." or 				$last == ":" or 				$last == ";" or				$last == "'" or				$last == "!" or 				$last == "%" or 				$last == "?" or 				$last == "}" or 				$last == ")" or 				$last == "]" or 				$last == '"'){										$first = substr($value, 0,1);					if($first == "'" or					$first == '"' or					$first == "(" or					$first == "{" or					$first == "["){					}										$word = substr($value, 1, $lenght-1);										$first = $first.substr($word, 0,1);					$lenght = strlen($word) - 1;					$last = substr($word, $lenght).$last;					$word = substr($word, 1, $lenght-1);					$newWord = "";										while($word != ""){						$lenght = strlen($word) - 1;						$num = rand(0, $lenght);												$newWord = $newWord.substr($word, $num, 1);						$word = substr_replace($word, "", $num, 1);					}										$newWord = $first.$newWord.$last;									}else{					$first = substr($value, 0,1);					$lenght = strlen($value) - 1;					$last = substr($value, $lenght);					$word = substr($value, 1, $lenght-1);					$newWord = "";										while($word != ""){						$lenght = strlen($word) - 1;						$num = rand(0, $lenght);												$newWord = $newWord.substr($word, $num, 1);						$word = substr_replace($word, "", $num, 1);					}										$newWord = $first.$newWord.$last;				}			}else{				$newWord = $value;			}			$newMessage = $newMessage.$newWord." ";		}				echo $newMessage;	}?>

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.