2015-02-24 wcdj
摘要:Web最吸引人的一个方面就是它是一个双向媒介,Web不仅能够发布信息,而且能够提供一种有效的方式从用户那里得到输入。本文记录如何使用PHP处理用户提交的Web表单。关于Web表单的学习可以参考www.w3schools.com网站。
从一个脚本向另一个脚本传递数据时,可以使用两种常见的方法:GET和POST。虽然GET是默认方法,但一般希望使用POST,因为它能处理更多地数据。如果使用POST,所有发送给PHP脚本的提交数据都必须使用$_POST语法来引用。
例子:笔者与朋友打算去香港购物,写了一个简单的调查页面whentohk.php,统计每个人时间情况,从而方便选择一个合适的集合时间。
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>初七几点去香港</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<label for="7am">早上7点到深圳湾口岸集合</label>
<input type="radio" name="time" id="7am" value="7" />
<br />
<label for="8am">早上8点到深圳湾口岸集合</label>
<input type="radio" name="time" id="8am" value="8" />
<br />
<label for="9am">早上9点到深圳湾口岸集合</label>
<input type="radio" name="time" id="9am" value="9" />
<br />
<label for="other">其他时间</label>
<input type="text" name="other" id="other" size="60" maxlength="128" />
<br />
<br />
<input type="submit" value="确定" name="submit" />
</form>
</body>
</html>
<?php
$time = $_POST['time'];
$other = $_POST['other'];
if (isset($_POST['time']))
{
if ($other != "")
{
printf("%s <br />", $other);
}
printf("OK, 明天%s点我们在深圳湾口岸集合<br />", $time);
printf("不见不散!<br />");
}
else if ($other != "")
{
printf("%s <br />", $other);
printf("让我考虑一下,等下答复你!<br />");
}
else if (isset($_POST['other']))
{
printf("你还没有回答我呢!<br />");
}
?>
为了方便,以上这个whentohk.php脚本,包含了html页面的代码和提交post请求后处理的php代码。但是上面只包含了基本的统计逻辑,还没有把统计的数据保存下来。
(1) 首先根据需求,创建db和table。
create database research;
create table whentohk(time varchar(128), info varchar(128));
(2) 修改whentohk.php脚本,并添加数据的保存和查询功能。
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>活动统计 v1.0 copyleft: gerryyang</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<label for="7am">早上7点到深圳湾口岸集合</label>
<input type="radio" name="time" id="7am" value="7" />
<br />
<label for="8am">早上8点到深圳湾口岸集合</label>
<input type="radio" name="time" id="8am" value="8" />
<br />
<label for="9am">早上9点到深圳湾口岸集合</label>
<input type="radio" name="time" id="9am" value="9" />
<br />
<label for="other">其他</label>
<input type="text" name="other" id="other" size="60" maxlength="128" />
<br />
<br />
<input type="submit" value="确定" name="submit" />
<input type="submit" value="查询" name="query" />
</form>
</body>
</html>
<?php
$time = $_POST['time'];
$other = $_POST['other'];
$query = $_POST['query'];
if (isset($_POST['time']))
{
if ($other != "")
{
printf("%s <br />", $other);
}
$info = sprintf("OK, 明天%s点我们在深圳湾口岸集合, 不见不散!", $time);
printf("%s <br />", $info);
do_save($info);
}
else if ($other != "")
{
$info = sprintf("%s", $other);
printf("%s <br />", $info);
do_save($info);
}
else if ($query == "查询")
{
do_query();
}
else if (isset($_POST['other']))
{
printf("你还没有回答我呢!<br />");
}
function connect_db(&$link)
{
$link = mysql_connect('localhost', 'test', '123456');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully <br \>';
$db = "research";
if (!mysql_select_db($db, $link))
{
die('Could not select database ' . $db);
}
}
function do_save($info)
{
connect_db($link);
$time = date('Y-m-d H:i:s');
$query = 'insert into whentohk(time, info) values(\'' . $time . '\', \'' . $info . '\')';
printf("%s <br />", $query);
$result = mysql_query($query, $link);
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $query;
die($message);
}
//mysql_free_result($result);
}
function do_query()
{
connect_db($link);
$query = 'select time, info from whentohk order by time desc';
printf("%s <br />", $query);
$result = mysql_query($query, $link);
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $query;
die($message);
}
echo "<hr />";
printf("统计结果如下:<br />");
while ($row = mysql_fetch_assoc($result))
{
printf("%s %s <br />", $row['time'], $row['info']);
}
mysql_free_result($result);
}
?>
问题记录
1,乱码问题。
<?php
header('Content-Type:text/html;charset=utf-8');// 避免输出乱码
?>
2,在ubuntu apaches上调试查看日志的方法。
tail -f /var/log/apache2/error.log /var/log/apache2/access.log
3,mysql_query返回值类型错误问题。
http://stackoverflow.com/questions/14527864/mysql-free-result-expects-parameter-1-to-be-resource
http://php.net/manual/en/function.mysql-query.php#refsect1-function.mysql-query-returnvalues