0

ログインしてスレッドを投稿できるシンプルなフォーラムを作成しました。ユーザー テーブルとトピック テーブルがあります。スレッドを投稿すると、id、タイトル、メッセージ、日付、ユーザー名を含むトピック テーブルに情報が送信されます。問題は、数字のみを含むユーザー名でログインした場合にのみスレッドを投稿できることです。VARCHARに変更したINTにtopic_by(ユーザー名)があることに気付きました。それでも問題は解決しませんでしたが、ユーザー名に数字しか含まれていない場合にのみ機能します。文字を含むユーザー名で投稿しようとすると、次の行が表示されます。

「フィールド リスト」の不明な列「asd」

テーブルの削除と再作成を試みました。

これは、データを送信するコードです。

$sql="INSERT INTO $tbl_name(topic_id, topic_title, topic_message, topic_date, topic_by)
      VALUES ('NULL', '$title', '$message', '$datetime', ".$_SESSION["username"].")";

アカウントを登録すると、user_name を含むデータが users テーブルに送信されます。これは、topic_by 行のプロパティが同じであっても、文字や数字で機能します。

4

1 に答える 1

2

これは、整数フィールドではないために必要な".$_SESSION["username"]."引用符で囲まずに挿入しようとしているためです。'これにより、データベースは実際usernameの列を理解できるようになります。単純に quote を使用して'".$_SESSION["username"]."'ください。

だからあなたのコードはそのようになります

$sql="INSERT INTO $tbl_name (topic_id, topic_title, topic_message, topic_date, topic_by) VALUES ('NULL', '$title', '$message', '$datetime', '".$_SESSION["username"]."')";

とにかく、セキュリティリスクを回避するために使用することを強くお勧めします。ここprepared statementsについての素晴らしいチュートリアルを読むことができますPDO

于 2013-06-07T12:59:34.203 に答える