0

好的,所以基本上我想要做的是向我的网站添加一个问答组件(第一个网站,所以我目前的 php 知识很少)。我有记录用户输入并添加到数据库的 html 页面,但是我无法从数据库中提取特定信息。

我当前的 php 页面正在数据库中提取信息 where the questiondetail= the question detail( detail='$detail'),但是如果两个用户输入与他们的问题详细信息相同的信息,这可能会出现问题(不太可能,但仍然可能,特别是如果同一个人不小心提交了两次问题) )。我想要做的是根据数据库的 question_id(主键)加载页面,这是唯一始终唯一的东西。

HTML 代码:

<form id="question_outline" action="process.php" method="get">
<p><textarea name="title" id="title_layout" type="text"  placeholder="Question Title" ></textarea> </p>
<textarea name="detail"  id= "detail_layout" type="text" placeholder="Question Details"  ></textarea>
<div id="break"> </div>
<input id="submit_form" name="submit_question" value="Submit Question" type="submit" /> 
</form>

过程.PHP代码:

$name2 = $_GET['name2'];
$title = $_GET['title'];
$detail = $_GET['detail'];

$query= "INSERT INTO questions (title, detail) VALUES ('$title', '$detail')";

$result = mysql_query("SELECT * FROM questions where detail='$detail' ") 
or die(mysql_error());  

信息已正确存储在数据库中,并且在 detail=$detail 时成功提取,但我要做的是根据 question_id 将其提取出来,因为这是唯一始终唯一的值. 任何回应将不胜感激!

更新后的版本

QUESTION_EXAMPLE.PHP 代码

<?php
$server_name = "my_servername";
$db_user_name ="my_username";
$db_password = "my_password";
$database = "my_database";
$submit = $_GET['submit'];
$title = $_GET['title'];
$detail = $_GET['detail'];
$conn = mysql_connect($server_name, $db_user_name, $db_password);

mysql_select_db($database) or die( "Unable to select database");

$result = mysql_query("SELECT title, detail FROM questions WHERE id =" .
mysql_real_escape_string($_GET["id"]), $conn);

$row = mysql_fetch_assoc($result);

mysql_close($conn);

?>

<h1><?php echo htmlspecialchars($row["title"]);?></h1>
<p><?php echo htmlspecialchars($row["detail"]);?></p>
4

3 回答 3

2

首先,如果这是要在生产中使用的代码,请确保在将 SQL 参数插入语句之前转义它们。没有人喜欢 SQL 注入攻击。我建议改用 PDO,因为它支持准备好的语句和参数绑定,这要安全得多。

如何防止 PHP 中的 SQL 注入?

所以你有一个表格...

[title]

[details]

[submit]

然后将其插入到您的数据库中...

INSERT INTO questions (title, details) VALUES (?, ?)

您可以使用http://php.net/manual/en/function.mysql-insert-id.php获取最后一个插入 ID mysql_insert_id

$id = mysql_insert_id();

然后就可以拿到记录了...

SELECT title, details FROM questions WHERE id = ?

并在预览页面中输出。

我已经使用 PDO 而不是基本的 mysql 函数编写了一个示例。

form.php

<form action="process.php" method="post">
    <label for="question_title">Title</label>
    <input id="question_title" name="title"/>
    <label for="question_detail">Detail</label>
    <input id="question_detail" name="detail"/>
    <button type="submit">Submit</button>
</form>

process.php

<?php

// Create a database connection
$pdo = new PDO("mysql:dbname=test");
// Prepare the insert statement and bind parameters
$stmt = $pdo->prepare("INSERT INTO questions (title, detail) VALUES (?, ?)");
$stmt->bindValue(1, $_POST["title"], PDO::PARAM_STR);
$stmt->bindValue(2, $_POST["detail"], PDO::PARAM_STR);
// Execute the insert statement
$stmt->execute();
// Retrieve the id
$id = $stmt->lastInsertId();

// Prepare a select statement and bind the id parameter
$stmt = $pdo->prepare("SELECT title, detail FROM questions WHERE id = ?");
$stmt->bindValue(1, $id, PDO::PARAM_INT);
// Execute the select statement
$stmt->execute();
// Retrieve the record as an associative array
$row = $stmt->fetch(PDO::FETCH_ASSOC);

?>

<h1><?php echo htmlspecialchars($row["title"]);?></h1>
<p><?php echo htmlspecialchars($row["detail"]);?></p>

没有 PDO...

form.php

<form action="process.php" method="post">
    <label for="question_title">Title</label>
    <input id="question_title" name="title"/>
    <label for="question_detail">Detail</label>
    <input id="question_detail" name="detail"/>
    <button type="submit">Submit</button>
</form>

process.php

<?php

// Create a database connection
$conn = mysql_connect();
// Execute the insert statement safely
mysql_query("INSERT INTO questions (title, detail) VALUES ('" . 
    mysql_real_escape_string($_POST["title"]) . "','" .
    mysql_real_escape_string($_POST["detail"]) . "')", $conn);
// Retrieve the id
$id = mysql_insert_id($conn);
// Close the connection
mysql_close($conn);

header("Location: question_preview.php?id=$id");

question_preview.php

<?php

// Create a database connection
$conn = mysql_connect();
// Execute a select statement safely
$result = mysql_query("SELECT title, detail FROM questions WHERE id = " .
    mysql_real_escape_string($_GET["id"]), $conn);
// Retrieve the record as an associative array
$row = mysql_fetch_assoc($result);
// Close the connection
mysql_close($conn);

?>

<h1><?php echo htmlspecialchars($row["title"]);?></h1>
<p><?php echo htmlspecialchars($row["detail"]);?></p>
于 2012-09-23T00:24:53.017 回答
0

我假设您想根据 question_id 对问题进行排序。您可以尝试使用 ORDER BY 命令

例子 -

$result = mysql_query("SELECT * FROM questions where detail='$detail' ORDER BY question_id")
于 2012-09-23T00:09:54.003 回答
0

对于这些类型的示例,您需要在下面的数据库中运行事务是

http://dev.mysql.com/doc/refman/5.0/en/commit.html

要不然

创建一个存储在会话中的随机变量并插入到数据库中,然后从数据库中调用它,您可以轻松预览它。

id | question_code | q_title

question_code是插入数据库之前生成的随机值,

并将其保存question_code在会话中并再次调用它进行预览。

于 2012-09-23T00:21:30.393 回答