【发布时间】:2011-06-16 05:44:37
【问题描述】:
在下面的脚本中,您将看到以“shorturl”形式提交的值。最终,我想采用该值并使用它来生成一个唯一的 URL,以显示表单中所有提交的数据。
这是用户提交数据的表单:
<html>
<body>
<p>Required fields are <b>bold</b></p>
<form action="contact.php" method="post">
<p><b>Author's Name:</b> <input type="text" name="author" /><br />
<p>Company Name: <input type="text" name="company" /><br />
<p>Address:<br /><textarea name="address" rows="5" cols="40"></textarea></p>
<p>Phone Number: <input type="text" name="phone" /><br />
<b>Title:</b> <input type="text" name="title" /><br />
<p><b>One Word Description:</b> <input type="text" name="shorturl" /><br />
<p><b>Full Description:</b><br />
<textarea name="comments" rows="10" cols="40"></textarea></p>
<p><input type="submit" value="submit"></p>
<p> </p>
</form>
</body>
</html>
下一段代码是contact.php页面,它将输出用户数据:
<?php
/* Check all form inputs using check_input function */
$author = check_input($_POST['author'], "Enter your name");
$company = check_input($_POST['company']);
$address = check_input($_POST['address']);
$phone = check_input($_POST['phone']);
$shorturl = check_input($_POST['shorturl'], "Provide a single word description");
$title = check_input($_POST['title'], "Write a title");
$comments = check_input($_POST['comments'], "Provide a full description");
/* Functions we used */
function check_input($data, $problem='')
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
if ($problem && strlen($data) == 0)
{
show_error($problem);
}
return $data;
}
function show_error($myError)
{
?>
<html>
<body>
<b>Please correct the following error:</b><br />
<?php echo $myError; ?>
</body>
</html>
<?php
exit();
}
?>
<head>
<title><?php echo $_POST['title']; ?></title>
</head>
<body>
<p>
<b><?php echo $_POST['title']; ?></b><br>
Created by:<br>
<?php echo $_POST['author']; ?><br>
<?php echo $_POST['company']; ?><br>
Contact: <br>
<?php echo $_POST['phone']; ?><br>
<?php echo $_POST['address']; ?><br>
Flyer Description: <br>
<?php echo $_POST['comments']; ?><br>
</p>
</body>
</html>
如果您运行此表单,您将看到,该功能非常基本。这是我需要帮助的地方。在初始形式中,采用“shorturl”值。 shorturl值的作用如下:
如果此表单托管在 examplesite.com 上,那么我最终希望创建的表单可以与 examplesite.com/shorturl 上的提交答案一起使用
首先,我如何通过 PHP 验证这实际上是一个单词?如果用户将 shorturl 值提交为“House”,那么我需要表单将值返回为 true,但如果用户提交“Big House”,则该值为 false,他们需要将值更改为可接受的值,例如作为“大房子”
其次,我需要验证 shorturl 值对于该站点是唯一的。换句话说,一旦使用了 shorturl,就需要将该值发送到 MySQL 数据库,这样它就不会被其他用户复制。继续我们的示例,如果有人已经将“House”作为其 shorturl 值,则 examplesite.com/House 的完整 URL 已被采用。然后,如果有新用户来尝试使用“House”,则提交将产生一条错误消息,指出该名称已被占用。
最后,我如何获取所有这些信息来自动生成带有表单结果的独特网页?例如,让我们继续 examplesite.com/House 现在,当用户提交表单时,数据会显示在 examplesite.com/contact.php 上。如何生成一个 URL,该 URL 将显示表单数据并按照 shorturl 的定义是唯一的,并且在不提交新数据的情况下可供第三方网站访问者查看?
哇。我希望一切都说得通。
我知道这里有几个问题,所以如果你只能协助完成一个步骤,那很好。如果您可以解决整个问题,那么您将拥有更大的力量:)
我对此进行了大量研究,我认为前两个问题应该能够用 PHP 解决,但第三个问题可能涉及某种 mod_rewrite 函数。我非常感谢您对我的查询进行了这么多,如果您能提供解决方案,非常感谢。
【问题讨论】:
-
发帖后我意识到这个论坛帖子就是一个很好的例子。例如,我提交了整个问题,现在我有了这个可以与他人共享的唯一 URL:stackoverflow.com/questions/6367601/… 我需要知道如何从表单提交中创建这样的唯一 URL。
-
这似乎是一个常见问题。对于 1,我认为您需要一个正则表达式。对于 2,MySQL 数据库是可以的,但可能不适合该任务。除非您对 MySQL 有其他用途,否则另一个数据库(可能是非 SQL)可能更有效。 3,关于 mod_rewrite,你是对的。您可能应该捕获所有 URL 并将它们传递给脚本以进行进一步处理。抱歉,评论太长了,但我稍后可能会写一个完整的答案。
标签: php mysql apache forms mod-rewrite