-1

我正在制作一个表格并学习 MySQL。我只想将数据插入 MySQL 数据库。这是我的文件。

我的 insert.php 文件包含以下内容:

 <?php
include_once('ressources/init.php');
if ( isset($_POST['title'], $_POST['contents'])){
    // Here we use MySQL-Code
    mysql_query("
        INSERT INTO `posts` SET
            `title` = '{$_POST['title']}',
            `contents` = '{$_POST['contents']}'
    ");
}
 ?>

 <html lang="en">
 <head>
<title>Simple Form</title>
 </head>
 <body>
<form action="">
            <label for="title">Title:</label>
            <input type="text">
            <label for="post">Post:</label>
            <textarea name="post" id="post" cols="30" rows="10"></textarea>
            <input type="submit">
</form>
</body>
</html>

我的 init.php 包含:

<?php
include_once('config.php');

mysql_connect(DB_HOST, DB_USER, DB_PASS);
mysql_select_db(DB_NAME);
?>

我的最后一个文件是 config.php:

 <?php
$config['db_host'] = 'localhost';
$config['db_user'] = 'root';
$config['db_pass'] = 'root';
$config['db_name'] = 'php_tutorial';

foreach ( $config as $k => $v ){
    define(strtoupper($k), $v);
}
 ?>

登录数据应该是正确的。而且我不知道,为什么我无法用新数据填充数据库。任何帮助和任何提示将不胜感激。

这是我的 phpmyadmin 控制面板图片的链接:http: //i.imgur.com/VE68nZ8.jpg

非常感谢您提前。

4

3 回答 3

0

首先,您将要停止使用 mysql 并切换到 mysqli/PDO。

也就是说,使用您当前的代码,

你的 insert.php 应该是:

<?php
include_once('ressources/init.php');
if (isset($_POST['title']){
    $title = mysql_real_escape_string($_POST['title']);
    $contents = mysql_real_escape_string($_POST['contents']);
    $q="INSERT INTO posts SET (title, contents) VALUES ('$title','$contents')"; 
    mysql_query($q);
}
?>

<html lang="en">
    <head>
        <title>Simple Form</title>
    </head>
    <body>
        <form action="" method="POST">
            <label for="title">Title:</label>
            <input name="title" type="text">
            <label for="contents">Post:</label>
            <textarea name="contents" id="contents" cols="30" rows="10"></textarea>
            <input type="submit">
        </form>
    </body>
</html>

mysql_real_escape_string() 函数将有助于防止注入(有害字符将从您的查询字符串中转义)。

那应该让你开始。

另外,作为安全方面的说明:如果您还没有,请确保将您的 config.php 文件放在您网站的公共根文件夹下,以帮助保护您的 mysql 用户名/密码不被浏览器/等轻松查看。

于 2013-10-14T22:30:34.090 回答
0

更改<form action=""><form method="POST">- 这可以解决问题

下一项<input type="text">将其更改为<input type="text" name="title">

另外,请考虑代码中的 SQL 注入问题,使用, 也可以使用数组mysql_escape_string来代替$_POST$_REQUEST

不要忘记使用mysql_query(...) or die(mysql_error());

更新:感谢@Neal - 当然不要使用已弃用和过时的 MYSQL_ api,而是使用 MYSQLI 或 PDO,使用参数查询

于 2013-10-14T22:26:45.293 回答
-1

您可以尝试使用 PDO:(从 php.net 复制并修改)

<?php

$dsn = 'mysql:dbname='.DB_NAME.';host='.DB_HOST;

try {
    $dbh = new PDO($dsn, DB_USER, DB_PASS);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

?>

在您的表单中有如下代码:

  <input type="text">

请指定字段的名称,例如:

  <input type="text" name="title">

稍后,您可以像 $_GET['title'] 一样获取此字段的内容。由于 GET 请求的限制,如果您将 method="POST" 添加到表单中会很好。

<form action="" method="POST">

你可以得到像 $_POST['title'] 这样的标题

if ( isset($_POST['title'], $_POST['contents'])){
    // Here we use MySQL-Code
  $stmt = $dbh->prepare("
        INSERT INTO posts  (title, contents) VALUES(:title, :post)
    ");
  $stmt->bind_value(':title', $_POST['title']);
  $stmt->bind_value(':post', $_POST['post');
  $stmt->execute();
}

我不是 100% 确定 mysql 支持命名参数,但你可以试试。

于 2013-10-14T22:49:03.117 回答