2017-08-29 9 views
-2

下のコードは私の崇高な状態ですが、データベースは呼び出されていません。ウェブサイトをMySQLデータベースに接続するにはどうすればよいですか?

<?php$username="root"; 
$password="changedpassword";$database="User"; 
$field1-name=$_POST['name']; 
$field2-name=$_POST['password']; 
$field3-name=$_POST['email']; 
$field4-name=$_POST['sex']; 
$field5-name=$_POST['school']; 
$field6-name=$_POST['birth']; 
mysql_connect(localhost,$username,$password); 
@mysql_select_db($database) or die("Unable to select database"); 
$query = "INSERT INTO create_user (name, password, email, sex, school, birth) VALUES('','$field1-name','$field2-name', 
'$field3-name','$field4-name','$field5-name','$field6-name')";mysql_query($query);mysql_close();?> 
+2

エラーが発生していますか? –

+3

[**新しいコード**でmysql_ *関数を使用しないでください(http://stackoverflow.com/q/12859942)。それらはもはや維持されておらず(正式に推奨されていません)(https://wiki.php.net/rfc/mysql_deprecation)。 [** red box **](http://php.net/mysql-connect)を参照してください。代わりに[PDO](http://php.net/pdo)または[MySQLi](http://www.wikipedia.org/wiki/Prepared_statement)を使用して[* prepared statements *](http://en.wikipedia.org/wiki/Prepared_statement) /php.net/mysqli) - [この記事](http://php.net/manual/en/mysqlinfo.api.choosing.php)は、どちらを決定するのに役立ちます。 – Qirel

+0

わかりやすいコード書式設定と変数命名が必要です。コードのデバッグにも役立ちます。 – Qirel

答えて

0

この手順をステップバイステップで進めてください。まず、ここにあなたの現在のコードが読めるように片付け、です:

<?php 
$username = "root"; 
$password = "changedpassword"; 
$database = "User"; 
$field1_name = $_POST['name']; 
$field2_name = $_POST['password']; 
$field3_name = $_POST['email']; 
$field4_name = $_POST['sex']; 
$field5_name = $_POST['school']; 
$field6_name = $_POST['birth']; 
mysql_connect(localhost, $username, $password); 
@mysql_select_db($database) or die("Unable to select database"); 
$query = " 
    INSERT INTO 
      create_user 
       (
        name, 
        password, 
        email, 
        sex, 
        school, 
        birth 
       ) 
      VALUES 
       (
        '', 
        '$field1_name', 
        '$field2_name', 
        '$field3_name', 
        '$field4_name', 
        '$field5_name', 
        '$field6_name' 
      ) 
"; 
mysql_query($query); 
mysql_close(); 
?> 

私は2つだけの変更(PHP変数は、ハイフンを含めることはできませんとして、空白を整理し、_name代わりに-nameを使用)を作りましたが、それはすでにです大きな改善。コードはもはや目障りではありません。構文エラーがなく、読み取りが可能です。しかし、まだ多くの問題があります。

まず、6つの列に7つの値が挿入されていることがわかります。これは問題になります。最初の空白値を削除して修正してください。

$query = " 
    INSERT INTO 
      create_user 
       (
        name, 
        password, 
        email, 
        sex, 
        school, 
        birth 
       ) 
      VALUES 
       (
        '$field1_name', 
        '$field2_name', 
        '$field3_name', 
        '$field4_name', 
        '$field5_name', 
        '$field6_name' 
      ) 
"; 

実際には動作する可能性があります。 SQLインジェクション攻撃の巨大な可能性を秘めており、最新のPHPでは機能しません。mysql_の機能は削除されていますが、実際はどこかで動作する可能性があります。あなたはそれをプロダクションに入れたくはありませんが、テスト目的のために、どこかに行っています。

+0

他の場所からこのコードを引っ張ってくれてありがとう、私は間違ったフォーマットを使っていたことに気づいていなかった。 – Nate

+0

これらの問題を解決する方法を説明したいが、あまりにも疲れている。たぶん明日。 – TRiG

+0

追加した値を削除して実行してみましたが、localhostを読み込んでサイトのログインページに情報を入力しても、mysqlデータベースは新しい挿入情報を反映するように更新されていません – Nate

0

MySQLはPHP 5.6以降では推奨されておらず、安全ではないため、代わりにPDOまたはMySQLiを使用してください。 MySQLiを

 <?php 


     //MySQLi information 

     $db_host  = "localhost"; 
     $db_username = "username"; 
     $db_password = "password"; 

     //connect to mysqli database (Host/Username/Password) 
     $connection = mysqli_connect($db_host, $db_username, $db_password) or die("Error " . mysqli_error()); 

     //select MySQLi dabatase table 
     $db = mysqli_select_db($connection, "table") or die("Error " . mysqli_error()); 

    $field1_name = $_POST['name']; 
    $field2_name = $_POST['password']; 
    $field3_name = $_POST['email']; 
    $field4_name = $_POST['sex']; 
    $field5_name = $_POST['school']; 
    $field6_name = $_POST['birth']; 

    $query = mysqli_query($connection, "INSERT INTO create_user 
      (name, password, email, sex, school, birth) VALUES 
        (
         '$field1_name', 
         '$field2_name', 
         '$field3_name', 
         '$field4_name', 
         '$field5_name', 
         '$field6_name' 
       ) 
    "); 

これを使用して、あなたが良いだろうとの接続

。これがあなたを助けてくれることを願っています!

+0

SQLインジェクションここの問題。 '$ _POST'変数は未定義です。自分の答えを改善したいが、時間がなくなった。たぶん明日。 – TRiG

+0

@TRiGもちろん、SQLインジェクション攻撃を受ける機会はありますが、MySQLを使用する機会はありません。決してそれが100%安全だとは言わなかった。準備されたステートメントを使用している方がより安全ですが、彼は彼のレベルのように理解できるように彼にこのメソッドを示しました、なぜ$ _POSTは未定義ですか?日付/性別はチェックボックスとオプションの選択に使用する必要がありますか?私は彼が投稿したものを上書きしないように修正しました。 なぜあなたは何を投稿した競争相手としてそれを取るのですか? –

+0

@TRiG私はあなたに挑戦しなかった、あなたが好きなものを投稿したり改善したりすることができます。あなたがコメントした方法は、あなたの答えが投稿され、他に何も表示されないように感じさせました。 –

関連する問題