データベースにレコードを追加するPHPコード

私はウェブサイトのコントロールパネル(管理ページ)に取り組んでいます。すべてのページに同じコードがあり、データベーステーブルの名前と列はほとんど変更されません。すべて正常に動作しますが、1ページは機能しません。

これはそのコードです....

<?php
include('connect.php');

// read the input data
$KTitle   = $_POST['Title'];
$Kcontent = $_POST['content'];
$ImgName  = $_FILES["file"]["name"];

//get img extension
$ImgExtension = substr($ImgName, (strlen($ImgName) - 4), strlen($ImgName));
//check if it Gif, Bng, Jpg
if ($ImgExtension == ".gif" || $ImgExtension == ".jpg" || $ImgExtension == ".png")
{ //get img name to rename it then readd the extinsion
    $ImgName      = substr($ImgName, 0, (strlen($ImgName) - 4));
    $storyImgName = $ImgName . "_" . $Title;
    $target       = "../CharacterImgs/" . $storyImgName . $ImgExtension;
    $target       = str_replace(" ", "_", $target);

    move_uploaded_file($_FILES['file']['tmp_name'], $target);
    mysql_query("INSERT INTO CharactersN (name,desc,img) VALUES ('$KTitle', '$Kcontent','$target')");

    echo "<meta http-equiv=\"refresh\" content=\"3;URL=AddCharacterForm.php\">";
}
?>
4
あなたのコードにSQLインジェクションがあることを知っていれば幸いです。古くなった MySQL _ * 関数を使い、 rel="nofollow noreferrer"> PDO の操作方法を学び、ステートメント。
追加された 著者 tereško,
うまくいきませんか?何がうまくいかないのですか?
追加された 著者 Abhay,
これは小さな問題ですが、 $ KTitle = $ _POST ['Title']; はおそらく $ KTitle = $ _POST ['title']; 標準の&title = ではなく&Title = というタイトル)
追加された 著者 mc10,
あなたは何のエラーを投稿していますか?
追加された 著者 0xd,

2 答え

MySQLで列名として desc を使用する場合は、予約語を入力します。

"INSERT INTO CharactersN (name, `desc`, img) ..."
4
追加された

ここに問題があります:

INSERT INTO CharactersN (name,desc,img)

desc is a reserved word, so you must use the ` notation there, which is like this:

INSERT INTO CharactersN (`name`,`desc`,`img`)

毎回フィールド名にこの表記法を使用するか、データベース設計でフィールド名に予約語を使用しないでください。


また、 SQLインジェクションについても、あなたのコードはあなたがそれを認識していないことを示しているので、お読みください。外部から来る値をクエリに挿入しています(この場合はPOST)。

VALUES ('$KTitle', '$Kcontent','$target')")

mysql_real_escape_string()でこれらの値をエスケープする必要があります。/code> 、さらにはそれ以上の場合は、 PDO を使用してくださいデータベースの相互作用。

enter image description here from xkcd

1
追加された
ボビーテーブルの+1
追加された 著者 martincarlin87,
@tereškoこれでコメント戦争を始めたいとは思っていませんが、経験の浅いユーザーのために予約語をすべて知っていない場合は、代わりに正しい表記法を使用する方が良いでしょう。それでも、あなたのコメントを私の答えに編集しました。
追加された 著者 kapa,
@tereškoありがとう、それは実際にはタイプミスでした。 PDOを使用する前に、私はよりタイピングに慣れていました。
追加された 著者 kapa,
1つは、 "reserver worksをフィールド名として使用するのをやめる"という方が良い習慣であるといえます。
追加された 著者 tereško,
合意した別の注意: mysql_escape_string()非推奨です。彼らは MySQL _real_escape_string()を持つようになりました。これは MySQL _ * の年齢を示すもう一つの記号です。あなたは少し答えを編集する必要があります。
追加された 著者 tereško,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com