0

我在 Mysql 中有 3 个名为IDAutoreTitolo的字段名。表名是演示,数据库名是forms1
我无法将许多表单中的数据插入数据库。我测试了代码,但insert.php有问题

表格代码:

<style>
br {margin-bottom:-10px;}
</style>

<form action="insert.php" method="post">
<b>Titolo </b>&nbsp;&nbsp;<input type="text" name="Titolo"><br><br>
<b>Autore </b><input type="text" name="Autore"><br><br>
<input type="Submit">
</form>

插入.php

<?php

define('DB_NAME', 'forms1');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');


$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if (!$link) {
    die('Could not connect: ' . mysql_error());
}

$db_selected = mysql_select_db(DB_NAME, $link);

if (!$db_selected) {
    die('Can\'t use ' . DB_NAME . ': ' . mysql_error());
}

$sql = "INSERT INTO demo VALUES
('', 'Autore', 'Titolo')";


if (!mysql_query($sql)) {
    die('Error: ' . mysql_error());
}
mysql_close();
?>

这段代码是错误的:

$sql = "INSERT INTO demo VALUES
    ('', 'Autore', 'Titolo')";

当我尝试从表单中插入像 Jack、John 这样的值时,添加的值是 Autore 和 Titolo
但 Autore 和 Titolo 是我演示表中的第 2-3 个字段名,但它是像值一样添加的! http://imageshack.us/a/img831/3109/insertdatabase.png

这是我的ResultPage.php

<html>
<?php
echo "<h2>Lista Autori</h2>";  
echo "<table border='1' style='border-collapse: collapse;border-color: silver;'>";  
echo "<tr style='font-weight: bold;'>";  
echo "<td width='auto' align='center'>N</td>";  
echo "<td width='auto' >&nbsp;Nome</td>";
echo "</tr>";
    //1. Connessione al Database
$connection = mysql_connect("localhost","root","");
if(!$connection){
    die("Database connection failed: " . mysql_error());
}
    //2. Seleziona Database
$db_select = mysql_select_db("forms1",$connection);
if (!$db_select) {
    die("Database connection failed: " . mysql_error());
}
    //3. Interroga Database

$result = mysql_query("SELECT * FROM demo LIMIT 0, 30 ", $connection);
if (!$result) {
    die("Database query failed: " . mysql_error());
}

    //4. Use Returned Data
while ($row = mysql_fetch_array($result)) 
    { 

    echo "<tr>";
    echo "<td align='center' width='auto'>" . $row[1] . "</td>";
    echo "<td width='auto'>" . "&nbsp;" . $row[2] . "&nbsp;" . "</td>";     
    echo "</tr>";

    }

mysql_close($connection);
?>
</html>

如何更改 insert.php 文件?

4

8 回答 8

3

在您的插入代码中,您有

$sql = "INSERT INTO demo VALUES 
('', 'Autore', 'Titolo')"

这已经硬编码了您的价值观。

请记住检查返回的变量的值并将它们转义

你的表格有这个:

<b>Titolo </b>&nbsp;&nbsp;<input type="text" name="Titolo"><br><br>  
<b>Autore </b><input type="text" name="Autore"><br><br>  

所以寄给你的表格

$_POST["Titolo"] and $_POST["Autore"]

所以你应该改变你的

$sql = "INSERT INTO demo VALUES 
('', '".mysql_real_escape_string($_POST["Autore"])."', '".mysql_real_escape_string($_POST["Titolo"])."')"

并删除输入的项目(两个框都需要正确匹配)

$sql = "DELETE FROM demo where Titolo='".mysql_real_escape_string($_POST["Autore"])."' and Autore='".mysql_real_escape_string($_POST["Titolo"])."';
于 2012-10-12T06:50:57.800 回答
1

我认为你的 sql 查询有问题。它应该是这样的:

$autore = $_POST['Autore'];
$titolo = $_POST['Titolo'];

$sql = "INSERT INTO demo(Autore, Titolo) VALUES ('$autore', '$titolo')";

希望这可以帮助 :)

于 2012-10-12T06:48:52.567 回答
1

$sql = "插入演示值 ('', 'Autore', 'Titolo')";

在此查询中,您必须插入从表单获取的值,而不是“Autore”、“Titolo”

于 2012-10-12T06:49:20.597 回答
0

使用这些标记进行查询:

INSERT INTO demo(Autore, Titolo)
VALUES ($_POST['Autore'], $_POST['Titolo'])

这样,在右栏中保存...也许这有帮助

但请注意,如果您使用它,您的查询是不安全的。你需要去掉引号和所有其他的东西......

于 2012-10-12T06:48:25.730 回答
0
$Autore = mysql_real_escape_string ($_POST['Autore']);
$Titolo = mysql_real_escape_string ($_POST['Titolo']);

$sql = "INSERT INTO demo VALUES
    ('', '$Autore', '$Titolo')";
于 2012-10-12T06:49:51.200 回答
0

如果您没有错过任何内容,这应该可以工作!?

$sql = sprintf("INSERT INTO demo VALUES('', '%s', '%s')",
        mysql_real_escape_string($_POST["Titolo"]),
        mysql_real_escape_string($_POST["Autore"]));
于 2012-10-12T06:51:45.330 回答
0

请忽略所有以前的答案。您的代码是一场安全灾难。至少放弃 mysql_* 函数并使用 Mysqli 或 PDO

您是否注意到 php 手册中的大面积:

不鼓励使用此扩展程序。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。另请参阅 MySQL:选择 API 指南和相关的常见问题解答以获取更多信息。

MySQLi 示例:

$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$stmt = $mysqli->prepare("INSERT INTO demo VALUES (?,?,?)");
$val1='';
$autore=$_POST['Autore']; //TODO check if these POST values exist
$titolo=$_POST['Titolo'];
$stmt->bind_param('sss', $val1, $autore, $titolo);


/* execute prepared statement */
$stmt->execute();

printf("%d Row inserted.\n", $stmt->affected_rows);

/* close statement and connection */
$stmt->close();
于 2012-10-12T06:51:55.547 回答
0

使用下面的代码。您必须在插入之前捕获实际值

 $Autore = $_post['Autore'];
 $Titolo = $_post['Titolo'];

 $sql = "INSERT INTO demo (ID, Autore, Titolo) VALUES  ('', '$Autore', '$Titolo')";
于 2012-10-12T06:54:05.340 回答