0

私のphpコードが機能していないようです。昨日は機能していましたが、何かを変更したに違いありません。私が知る限り、問題を引き起こしているのは if($word) です。else 部分は機能し、mysql db に接続していますが、その if ステートメントは何もしません。

これがphpです:

<?php
  require('connect.php');
  $word=$_POST['word'];
  $submit=$_POST['submit'];

  if($submit){
      if($word){
         mysql_query("INSERT INTO words (word) VALUES ($word)");
      }
      else{
         echo "Enter a word.";
      }
  }
?>

これはhtml形式です:

<form name="form" id="form" method="post" action="index.php">
    <p><label>Label</label></p>
    <p><input type="text" name="word" id="word" maxlength="16"/></p>
    <p><input type="submit" name="submit" id="submit" value="Save"/></p>
</form>
4

2 に答える 2

4

このコードの使用を直ちに停止する必要があります。SQL インジェクションに対して脆弱です。これを防ぐためにパラメーターをバインドする方法と、廃止されていない API を使用する方法を学ぶ必要があります。空になる可能性があるため、が設定されているREQUEST_METHODかどうかを確認することもお勧めします。$_POST['word']

どのタイプのエラー キャッチ関数もないため、何が問題なのかを判断するのは困難です。私が推測しなければならなかったのは、おそらく、投稿された変数を一重引用符で囲んでいないためです。

...INSERT INTO words (word) VALUES ('$word')...

パラメータの使用:

<?php

if( $_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['submit']) ) {

    $link = mysqli_connect('localhost', 'my_user', 'my_password', 'world');

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

    $stmt = mysqli_prepare($link, "INSERT INTO words (word) VALUES (?)");
    mysqli_stmt_bind_param($stmt, 's', $_POST['word']);

    /* execute prepared statement */
    mysqli_stmt_execute($stmt);

    printf("%d Row inserted.\n", mysqli_stmt_affected_rows($stmt));

    /* close statement and connection */
    mysqli_stmt_close($stmt);

    /* close connection */
    mysqli_close($link);
}
?>

ドキュメントは、開始するのに適した場所です。

于 2013-02-21T18:46:28.133 に答える
1

おそらくあなたの$word価値を引用する必要があります...

INSERT INTO words (word) VALUES ('$word')

コメントで述べたように...

PHP で mysql_* 関数を使用してはいけないのはなぜですか?

入力のサニタイズを忘れないでください。

PHPでSQLインジェクションを防ぐにはどうすればよいですか?

xkcd.com

于 2013-02-21T18:46:58.583 に答える