0

post メソッドが実際に echo を使用して変数を表示していることを確認しましたが、以下の Insert クエリを使用すると行が追加されません。

あなたはなにか考えはありますか?

// 1. Create a DB connection
$connection =  mysql_connect("localhost","root","P@ssword");

if(!$connection){
    die("Database connection failed: " . mysql_error());    
}

$menu_name = $_POST['menu_name'];
$position = $_POST['position'];
$visible = $_POST['visible'];

$query = "INSERT INTO subjects (menu_name, position, visible) VALUES ('{$menu_name}', {$position}, {$visible})";

$result = mysql_query($query, $connection);

if ($result){
    header("Location:staff.php");
    exit;
} else {
echo "<p> There was an error when creating the
subject </p>";
"<p>". mysql_error()."</p>" ;

  }

mysql_close($connection);
4

3 に答える 3

2

紛らわしいコード oO!。私のコードがこのようになってから長い時間が経ちました。だからわかりにくかったです(笑)。しかし、mysql エラーに関しては、何かが適切にエラーを提供していない場合 (このようなデバッグを行っている場合)、行ごとに読みます。次に、クエリをエコーし​​、mysqladmin または他の SQL ツールでテストします。$query = mysql_query($query) または die(mysql_error()); も実行します。迅速なデバッグのために同じ行に。

注目すべき問題

a) mysqliに切り替えて、将来の PHP の変更に備えます。mysql が好きなら、mysqli に慣れてください。

  1. データベースが選択されていません。mysql_select_db
  2. 重要これは投稿データです。つまり、情報をフィルター処理する必要があります。危険な文字をエスケープせずに、挿入を使用してデータベースに何かを入力できるようにするには、多くの操作が必要です;)。情報を入力するのがあなただけの場合でも、以下で少し変更しました。'{$menu_name}' には一重引用符が付きますが、{$position} と {$visible} には一重引用符が付きます。一貫性がないと、数か月後に戻ったときに混乱します。

('{$menu_name}', {$position}, {$visible}) が ('{$menu_name}', '{$position}', '{$visible}') でないのはなぜですか? 代わりは。

より整理された

<?
$host = "localhost"; // hostname
$user = "root"; // username
$pass = "P@ssword"; // password
$db = ""; // database name

$connection = mysql_connect($host,$user,$pass) or die("Database connection failed: ".mysql_error());
$database = mysql_select_db($db,$connection) or die("DB Selection Error: ".mysql_error());

$menu_name = mysql_real_escape_string($_POST['menu_name']);
$position = mysql_real_escape_string($_POST['position']);
$visible = mysql_real_escape_string($_POST['visible']);

$query = "INSERT INTO `subjects` (`menu_name`, `position`, `visible`) VALUES ('{$menu_name}', '{$position}', '{$visible}')";

$result = mysql_query($query, $connection) or die(mysql_error());

if ($result){ // I would usually use mysql_insert_id as a validation from auto_increment tables.
    header("Location:staff.php");
    exit;
} else {
    echo "<p> There was an error when creating the subject </p>
    <p>". mysql_error()."</p>" ;
}
?>
于 2013-02-16T06:44:27.500 に答える
1

データベースが選択されていません。

<?php
// 1. CReate a DB connection
$connection = mysql_connect("localhost","root","P@ssword");
if(!$connection){
    die("Database connection failed: " . mysql_error());
            }

mysql_select_db("DB_NAME", $connection);

?>
于 2013-02-16T06:19:27.480 に答える