0

Mysql には、 IDAutoreTitoloという 3 つのフィールド名があります。テーブル名はdemoで、データベース名は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>

Insert.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/insertdatadatabase.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 = "INSERT INTO demo VALUES ('', 'Autore', 'Titolo')";

このクエリでは、「Autore」、「Titolo」ではなくフォームから取得する値を挿入する必要があります

于 2012-10-12T06:49:20.597 に答える
0

以下のコードを使用してください。挿入する前に実際の値をキャプチャする必要があります

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

 $sql = "INSERT INTO demo (ID, Autore, Titolo) VALUES  ('', '$Autore', '$Titolo')";
于 2012-10-12T06:54:05.340 に答える
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

Use these markup for the query:

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

That way, there saved in the right column... maybe this helps

But be aware, that if you use this, your query is unsafe. You need to strip quotes and all that other stuff...

于 2012-10-12T06:48:25.730 に答える
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 ガイドの選択および関連する FAQ も参照してください。

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 に答える