我试图编写一个允许用户输入帖子的页面,并在提交时打开一个带有帖子的新页面。这意味着必须先将帖子输入数据库,然后才能在另一页面上检索。这类似于有人在stackoverflow上提出问题。问题出现在新页面上,页面被赋予唯一的ID,除了我希望这个唯一的id在get变量中。
当前页面的HTML(ask.php):
<form method=POST' action='ask.php?q<php echo $id ?>'>
<input type='text' id='post'>
<input type='submit' value='submit' name='submit'>
PHP:
$post=$_POST['post'];
//then run query to input data into database
}
$result=mysql_query("SELECT * FROM questions WHERE user='$user' AND time='$time'");
while ($row = mysql_fetch_assoc($result)){
$id=$row['id'];
}
ask_action.php:
<?php header("Location: http://localhost/biology/question.php?q=$id"); ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<?php
include '../connect.php';
if (isset($_POST['questionSubmit'])){
$question=mysql_real_escape_string($_POST['question']);
$detail=mysql_real_escape_string($_POST['detail']);
$date=date("d M Y");
$time=time();
$user=$_SESSION['id'];
$put=mysql_query("INSERT INTO questions VALUES ('','$question','$detail','$date','$time','$user','biology','0')");
$id=mysql_insert_id();
}
?>
</body>
</html>
答案 0 :(得分:1)
如果您不希望“询问”页面与您查看帖子的页面相同,则可以将其拆分为三页。
第1页: 包含人们撰写帖子并提交的表单的页面。第2页将在表格的行动部分。
第2页: 检索POST数据的页面。在这里,您将验证所有信息并将其提交到数据库。然后,您将检索插入ID并将用户重定向到要显示结果的页面。您可以在重定向中使用插入查询中的id。
第3页: 用户查看提交的信息的位置。
我注意到你已经尝试过以某种方式,但是你有一些需要纠正的错误。首先,您的 ask.php 页面需要改进。
你在POST方法之前缺少一个撇号('),你的行动需要纠正。请记住,表单操作应该转到验证和处理表单数据的页面。在这种情况下,它将是* ask_action.php *页面。因此, ask.php 页面应如下所示:
<form method='POST' action='ask_action.php'>
<input type='text' name='question' />
<input type='text' name='detail' />
<input type='submit'> value='submit' name='submit' />
</form>
* ask_action.php *将处理数据,验证数据并重定向到查看数据的页面。页面上不需要html来验证它。
<?php
include('../connect.php'); // your database connection etc.
if(isset($_POST['submit'])) { // only react if the submit button is pressed
$question = mysql_real_escape_string($_POST['question']);
$detail = mysql_real_escape_string($_POST['detail']);
$date = date("d M Y");
$time = time();
$user = $_SESSION['id'];
mysql_query("INSERT INTO questions VALUES('', '$question', '$date', '$time', '$user', 'biology', 0)");
$id = mysql_insert_id();
header("Location: view_page.php?id=$id");
} else {
echo "Nothing submitted.";
}
?>
然后你会有第三个页面显示从数据库中获取的数据。如果您注意到我使用的标题函数,它会将用户重定向到view_page.php。这是您将通过提供的ID号显示数据的位置。要获取ID号,只需使用$id = $_GET['id'];
。
我还注意到你正在使用time()和date(“d M y”)。这不是必要的。如果你read about time on php.net,你会看到时间函数生成当前的unix时间戳。您可以使用它以您希望的方式输出日期。例如:如果您要显示提交问题的日期和时间,可以使用此date("d M y H:i", $time)
,其中$ time是数据库表中的时间列。
这一切都可以合并在一个页面中,但我将它们分开,以便您更容易看到差异。
答案 1 :(得分:1)
这里的第一个问题是你的开场表格标签。它应该是:
<form method='post' action='ask.php?q=<?php echo $id ?>'>
或
<form method='post' action='ask.php?q=<?= $id ?>'>
您的输入标记应为:
<input type='text' name='post' id='post' />
我认为您正在寻找的功能由mysql_insert_id
提供,只要您的ID列自动递增即可。如果您没有自动递增id列,是否可以提供有关db表的更多信息?
答案 2 :(得分:0)
这里有一些问题。首先,您需要使用mysql_escape_string($_POST)
之类的东西来合成传入的代码。您还需要为文本字段命名,目前您正在尝试根据ID提取它并且无效
将<input type='text' id='post'>
更改为<input type='text' name='post' id='post'>
您的订单也是倒退的。不使用AJAX,最好的方法是加载你的帖子&amp; id在页面顶部使用PHP,然后在结果页面上实际写入数据库。
答案 3 :(得分:0)
在“提交”页面上,您需要让PHP代码插入数据库,然后使用mysql_insert_id检索该新帖子的ID。然后该页面可以使用刚刚检索到的ID作为GET参数将用户重定向到适当的页面(使用header函数)