I just need a basic php code so that I can edit it. Thanks.

Dani AI

Generated

For a simple, reliable tester you want the timing and validation to happen in the browser and use PHP only to store or display results. Server-only timing (hidden start + submit) is teachable and fine for a quick demo, but it will be affected by page load and network lag. 's server-side example is a useful reference, and is right to push for client-side checks — combine those ideas: JS for accurate timing/validation, PHP for recording results.

A minimal, easy-to-edit workflow:

  • present a fixed paragraph to type (so you can check correctness),
  • start timing on the first keystroke with a high-resolution timer (for example performance.now()),
  • block paste/cut to reduce cheating,
  • compare typed text to the target as you go to count correct characters and errors,
  • on finish compute and send only the metrics to PHP. Use these simple formulas: gross WPM = (total characters / 5) / minutes; accuracy = correctCharacters / totalCharacters 100; net WPM = gross WPM (accuracy / 100). Example: 300 chars in 60s -> gross = 60 WPM; at 90% accuracy net = 54 WPM.

Practical tips: make tests 30–60 seconds for stable results, show gross/net/accuracy, log raw counts and timestamps server-side for audits, detect mobile (auto-correct skews results), and be clear about rules. That gives a precise, editable base without relying on server time for measurement.

Recommended Answers

All 6 Replies

Yes you can get , I guess next question would be how to make it work ?

Although it is possible, you will find that the typing speed php calculates will be slower than the real typing speed due to page loading and submitting time. For this reason you should deduct about 1 second from the overall time if the page has no graphics.
As for how to make it work, I would suggest placing in a hidden field the time the page was loaded then when the page is submitted, that time that was recorded can be compared to the current time to work out how long it took. Then do number of characters they typed devided by 3. Then do time it took devided by the previous result (the devide by 3 result). Then do 1 devided by the result. Really simple stuff but as I mentioned, an online typing test will not be 100% accurate due to page loading time and the time for submitting the results. Also note that when timing typing speed, one word normally = 3 characters.

I just need a basic php code so that I can edit it. Thanks.

If it's simple, why can't you write it? And if you can't write it, what makes you think you can edit it?

If it's simple, why can't you write it? And if you can't write it, what makes you think you can edit it?

Well if you would like an example the following is a script which will do the job.

<?
error_reporting(E_ALL ^ E_NOTICE);
$time=date('G-i-s-u'); //nj
echo 'You may test yourself by typing in the below field and clicking submit. Timer immediately after the page loads.<br>';
if (isset($_POST['typetext'])) {
	$time_end=explode('-',$time);
	$time_start=explode('-',$_POST['timestart']);
	$time_start[0]=bcmul($time_start[0],'3600000000');
	$time_start[1]=bcmul($time_start[1],'60000000');
	$time_start[2]=$time_start[2]*1000000;
	$start_time=bcadd(bcadd($time_start[0],$time_start[1]),bcadd($time_start[2],$time_start[3]));
	$time_end[0]=bcmul($time_end[0],'3600000000');
	$time_end[1]=bcmul($time_end[1],'60000000');
	$time_end[2]=$time_end[2]*1000000;
	$end_time=bcadd(bcadd($time_end[0],$time_end[1]),bcadd($time_end[2],$time_end[3]));
	$totaltime=bcsub($end_time,$start_time);
	
	//above calculates the total time with great accuracy
	$totaltime=bcdiv($totaltime,1000000);
	if ($_SERVER['SERVER_NAME']!=='localhost') { $totaltime-=1000000; }
	if (strlen($_POST['typetext'])) {
		$chars=strlen($_POST['typetext']);
		$chars/=3;
		$subtime=60/$totaltime;
		$result=$totaltime/$chars;
		$result=$subtime/$result;
		}
	echo 'Your typing speed is: '.round($result,2).' words per minute.<br>';
	} else { unset($time); }
?>
<form method='post' style='margin:0px; padding:0px;'>
<input type='hidden' value='<? echo date('G-i-s-u'); ?>' name='timestart'>
<textarea name='typetext' style='width:50%; height:75px;'></textarea>
<input type='submit' value='submit'>
</form><br>
Note that the more you type the more accurate the test will be.

Also with the above script, the more you type the more accurate the test will be and you can type anything into the text box for the test.

PHP would not be the best way to do this, not only due to the fact that page load times need to be taken into consideration (as already mentioned) but also because alot of the typing speed tests also take into account accuracy of the words typed. The code by cwarn23 above will count how many characters/words have been typed into a textbox and how long it took (roughly) but this would not stop you typing gibberish or 'a a a a a a a '....etc into the box.

You would really need something client-side (JavaScript maybe if it must be a web app) and a preset paragraph(s) to be typed. The script would then need to analyze the text as it is typed to make sure the words are input correctly, and if they are not then to make this count against the user. While this could be done in PHP, it is not going to be the simplest or easiest solution.

This is not a matter of 'basic code'.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.