简述PHP_SELF参数
本文简述PHP_SELF参数的含义,并运用该参数将具有多个功能的php程序合并到一个文件中,这是一种常用的方法。
变量 $_SERVER[‘PHP_SELF’] 包含了当前php文件的相对访问路径,在form表单中将action参数设置为它,可以实现对当前php文件提交申请。结合if判断即可组合多功能到同一个php文件中。使用PHP_SELF的好处是不用担心修改php文件名导致程序无法正常运行,从而使代码始终保持通用性。
if 判断条件中可以使用 isset() 函数判断任意一个表单项是否存在于 $_GET 或$_POST数组中,如果存在表示用户已经提交了请求,否则表示用户初次访问该页面。以此实现同一php文件中不同功能的流量控制。
以下程序组合了多个功能,首页为功能选择页,每个功能还需要实现表单输入页和最终结果页。因此使用两层嵌套判断用户当前所在页面。
我还为表单添加了onsubmit属性,其中使用自定义函数beforeSubmit()判断用户的表单输入是否为空,若有任意项目为空则告警并返回false,表单不会继续执行action操作。
<!DOCTYPE html> <html> <head> <title>Combinational Function</title> <script type="text/javascript"> function beforeSubmit() { var input_boxes = document.getElementsByTagName("input"); for (var b = 0; b < input_boxes.length; b++) { if (! input_boxes[b].value) { alert("User input cannot be empty.") return false; } } return true; } </script> </head> <body> <?php if (isset($_GET['mode'])) { $mode = $_GET['mode']; switch ($mode) { case 'temp': echo '<h1>Temperature Conversion Page</h1>'; if (isset($_GET['temp'])) { $c = $_GET['temp']; $f = ($c * 9 / 5) + 32; echo ($c . " degrees Celsius is " . $f . " degrees Fahrenheit"); } else { echo ' <p>Please enter a temperature in Celsius to convert to Fahrenheit</p> <form action="' . $_SERVER['PHP_SELF'] . '" onSubmit="return beforeSubmit();"> <input type="hidden" name="mode" value="temp"> <input type="text" name="temp" id="temp" /> <input type="submit" value="Convert" /> </form>'; } break; case 'circle': echo '<h1>Calculate Circle</h1>'; if (isset($_GET['radius'])) { $r = $_GET['radius']; $s = pi() * pow($r, 2); $c = 2 * pi() * $r; echo ('Radius of the circle: ' . $r . '<br>'); echo ('Area: ' . round($s, 2) . '<br>'); echo ('Circumference: ' . round($c, 2)); } else { echo ' <p>Please enter the radius of a circle</p> <form action="' . $_SERVER['PHP_SELF'] . '" onSubmit="return beforeSubmit();"> <input type="hidden" name="mode" value="circle"> <input type="text" name="radius" /> <input type="submit" value="Calculate" /> </form>'; } break; case 'sphere': echo '<h1>Calculate Sphere</h1>'; if (isset($_GET['radius'])) { $r = $_GET['radius']; $s = 4 * pi() * pow($r, 2); echo ('Radius of the sphere: ' . $r . '<br>'); echo ('Surface area: ' . round($s, 2) . '<br>'); } else { echo ' <p>Please enter the radius of a Sphere</p> <form action="' . $_SERVER['PHP_SELF'] . '" onSubmit="return beforeSubmit();"> <input type="hidden" name="mode" value="sphere"> <input type="text" name="radius" /> <input type="submit" value="Calculate" /> </form>'; } break; case 'cylinder': echo '<h1>Calculate Cylinder</h1>'; if (isset($_GET['radius'])) { $r = $_GET['radius']; $h = $_GET['height']; $s = 2 * pi() * pow($r, 2) + 2 * pi() * $r * $h; echo ('The surface area of a cylinder with height ' . $h . ' and radius ' . $r . ' is ' . round($s, 2) . '.'); } else { echo ' <form action="' . $_SERVER['PHP_SELF'] . '" onSubmit="return beforeSubmit();"> <input type="hidden" name="mode" value="cylinder"> The height: <input type="text" name="height" /><br> The radius: <input type="text" name="radius" /><br> <input type="submit" value="Calculate" /> </form>'; } break; case 'initials': echo '<h1>Calculate Name</h1>'; if (isset($_GET['firstN'])) { $first_name = $_GET['firstN']; $surname = $_GET['surN']; echo ('Your initials: ' . strtoupper(substr($first_name,0,1)) . '.' . strtoupper(substr($surname,0,1)) . '.'); } else { echo ' <form action="' . $_SERVER['PHP_SELF'] . '" onSubmit="return beforeSubmit();"> <input type="hidden" name="mode" value="initials"> First Name: <input type="text" name="firstN" /><br> Surname: <input type="text" name="surN" /><br> <input type="submit" value="Calculate" /> </form>'; } break; case 'age': echo '<h1>Judge Age</h1>'; if (isset($_GET['age'])) { $age = $_GET['age']; echo ($age > 17); } else { echo ' <p>Please enter your age</p> <form action="' . $_SERVER['PHP_SELF'] . '" onSubmit="return beforeSubmit();"> <input type="hidden" name="mode" value="age"> <input type="text" name="age" /> <input type="submit" value="Judge" /> </form>'; } break; default: echo '* Error: Unexpected argument.'; break; } } else { echo ' <h1>Combinational Function</h1> <form action="' . $_SERVER['PHP_SELF'] . '"> What would you want to do? <br><br> <select name="mode"> <option value="temp">Convert Temperature</option> <option value="circle">Calculate Circle</option> <option value="sphere">Calculate Sphere</option> <option value="cylinder">Calculate Cylinder</option> <option value="initials">Get Name Initials</option> <option value="age">Judge Age</option> </select> <input type="submit" value="Do it!"> </form>'; } ?> </body> </html>