1

私はphpとmysqlの使い方を独学しようとしています。練習のために、ユーザー名とパスワードを受け取る簡単なテスト Web サイトと、phpmyadmin と mysql を使用したデータベースを作成しました。DB への正常な接続を作成できましたが、現在、Web サイトのフォームからデータを取得して、「アカウント」というテーブルに挿入しようとしています。アカウントには、「username」、「password」、および「userID」(主キー) の 3 つのフィールドがあります。ユーザー ID は自動インクリメントされるため、フィールドに入力データは必要ありません。ユーザー名とパスワードを収集し、アカウント テーブルに新しいレコードとして追加すると思われるコードを書きましたが、次のエラー メッセージが表示されます。

内部サーバーエラー

サーバーで内部エラーまたは構成ミスが発生したため、リクエストを完了できませんでした。

さらに、ErrorDocument を使用して要求を処理しようとしたときに、404 Not Found エラーが発生しました。

以下に私のコードを含めました。私は以前に PHP を使用したり、DB を作成したりしたことがないため、非常に明白な間違いを犯した可能性があります。

php_script

 <?PHP

    $db_host = "stevie.heliohost.org";
    $db_username = "secret";
    $db_pass = "secret";
    $db_name = "secret";

    $connection = @mysql_connect ("$db_host","$db_username", "$db_pass") 
    or die ("could not connect to mySQL");


    @mysql_select_db("$db_name") or die ("No database");

    $sql="INSERT INTO account(username, password)
    VALUES('$_POST[user]','$_POST[password]')";
    if (!mysql_query($sql,$connection ))
      {die('Error: ' . mysql_error());}
    echo "1 record added";

    mysql_close($con);

?>

HTMLフォーム

 <form name="LOGIN" action="php_script.php" method="post">

     Username: <input id="username" type="text" name="user">   
     password: <input  id="password" type="text" name="password">
        <input id="submit" type="submit" value="Submit">

  </form>
4

3 に答える 3

3

これを試してみてください

$db_host = 'stevie.heliohost.org';
$db_username = "secret";
$db_pass = "secret";
$db_name = "secret";

$connection = mysql_connect($db_host,$db_username, $db_pass) 
or die ("could not connect to mySQL");


mysql_select_db($db_name) or die ("No database");

$sql="INSERT INTO account(username, password)
VALUES('".$_POST[user]."','".$_POST[password]."')";
if (!mysql_query($sql,$connection ))
  {die('Error: ' . mysql_error());}
echo "1 record added";

mysql_close($con);

OBS: mysqli または PDO を使用する必要があります。コードは sql インジェクションが簡単です

于 2012-12-28T21:29:55.820 に答える
1

PHP を独学している場合、最初にすべきことは PDO を学ぶことです。なぜなら、mysql を使用している方法では、誰でも実行できる SQL インジェクション タイプのハッキングに対してサイトを開いたままにしているからです。$_POST[''];データベースの値を直接送信しているためです。今日から PDO の学習を開始してください。PDO の方がはるかに安全です。ここで良いチュートリアルを見つけることができます: http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

さらに、少し変更したので、このコードを確認してください。およびホスト名は、ほとんどの場合localhost

 <?PHP

    $db_host = "localhost";
    $db_username = "secret";
    $db_pass = "secret";
    $db_name = "secret";

    $connection = mysql_connect ("$db_host","$db_username", "$db_pass") 
    or die ("could not connect to mySQL");


    mysql_select_db("$db_name") or die ("No database");

    $sql="INSERT INTO account(username, password)
    VALUES('$_POST[user]','$_POST[password]')";
    if (!mysql_query($sql,$connection ))
      {die('Error: ' . mysql_error());}
    echo "1 record added";

    mysql_close($con);

?>
于 2012-12-28T21:32:29.163 に答える
1

まず第一に、mysql_ 関数は非推奨であるため、使用しないでください。PDO または like を使用してみてください。

2番目にこれを試してください

 $db_host = 'stevie.heliohost.org';
 $db_username = "secret";
 $db_pass = "secret";
 $db_name = "secret";

 $connection = mysql_connect($db_host,$db_username, $db_pass) 
  or die ("could not connect to mySQL");


 mysql_select_db($db_name) or die ("No database");

$sql="INSERT INTO account(username, password)
  VALUES('".mysql_escape_string($_POST[user])."','".mysql_escape_string($_POST[password])."')";
if (!mysql_query($sql,$connection ))
   {die('Error: ' . mysql_error());}
 echo "1 record added";

 mysql_close($con);

クエリでも値をエスケープする必要があるため、SQL インジェクションには対応していません

私は mysql_escape_string を使用するつもりはありません。少なくとも mysqli を使用する必要があります。

良いチュートリアルを読んで、それについてもっと学びましょう

于 2012-12-28T21:32:51.170 に答える