如何输入数据和使用get变量

时间:2011-12-29 01:05:30

标签: php mysql post

我试图编写一个允许用户输入帖子的页面,并在提交时打开一个带有帖子的新页面。这意味着必须先将帖子输入数据库,然后才能在另一页面上检索。这类似于有人在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>

4 个答案:

答案 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函数)