0

html と php を使用してフォームを作成し、mysql データベースを更新しようとしています。データベースはキーを更新 (自動インクリメント) しますが、文字列を値に追加しません。私は同様の問題を抱えている人を検索しましたが、彼らのコードは私のものとは異なるため、理解できません(私はphpとmysqlの初心者です)私の問題は、htmlを使用して値を取得する方法にあると思いますが、違う

<form action=submitform.php method=GET> 
     Name:<input type="text" name="cuName" size=20 maxlength=20><br>    
     Password:<input type="password" name="password" size=20 maxlength=45><br>
     Account:<input type="text" name="account" size=20 maxlength=45><br>
     Phone:<input type="tel" name="phone" size=10 maxlength=10><br>
     Email:<input type="text" name="email" size=20 maxlength=45><br>
<input type=submit>
</form>

そして私のphpは

<?php
        mysql_connect(localhost,  myUsername, "myPassword");
        mysql_select_db(myDatabaseName);
        mysql_query("INSERT INTO Customer (cuName, password, 
                        account, phone, email)
                    Values('$cuName', '$password', '$account',
                            '$phone', '$email')");
        echo $cuName ." thank you for reserving!";
        print ($cuName);
    ?>

助けてくれてありがとう

4

3 に答える 3

1

あなたのコードはオンになっていることに依存しREGISTER_GLOBALSています。通常、セキュリティ上の理由からオフになっています。

フォームから送信される値を取得するには、に$cuName置き換える必要があります。$_GET['cuName']

さらに、データベースに送られる値をエスケープする必要があります。そうしないと、SQL インジェクションの脆弱性にさらされる可能性があります。

これら両方のシナリオでコードをクリーンアップすると、次のようになります。

<?php
        if (!mysql_connect(localhost,  myUsername, "myPassword")) {
              print 'There was an error connecting to the database'.mysql_error();
              exit(); 
        }
        if (!mysql_select_db(myDatabaseName)) { 
              print 'Could not select db. The error was: '.mysql_error();
              exit();
        }
        $query = "INSERT INTO Customer (`cuName`, `password`, `account`,`phone`,`email`)";
        $query .= "VALUES (";
        $query .= "'".mysql_real_escape_string($_GET['cuName'])."','";
        $query .= mysql_real_escape_string($_GET['password'])."','";
        $query .= mysql_real_escape_string($_GET['phone'])."','";
        $query .= mysql_real_escape_string($_GET['email'])."'";

        if (!mysql_query($query)) {
            print 'There was an error inserting '.$query.'. Error was '.mysql_error();
        } else {
            echo $_GET['cuName']." thank you for reserving!";
        }
        print $_GET['cuName'];
    ?>

エラーチェックも追加しました。外部システム (データベースなど) に依存する関数の結果を常に確認する必要があります。これは、データベースの状態 (ダウンしている、機能していないなど) がわからないためです。 .

于 2012-08-07T23:02:05.447 に答える
0

どこにもGET値を定義していません。$cuName などは定義されていません。

各値は $_GET に関連付ける必要があります。いえ、

$cuName = $_GET['cuName']

ただし、SQL インジェクションを防ぐために、クリーニングされていないデータを挿入しないようにする必要もあります。これの例は次のとおりです。

$cuName = mysql_real_escape_string($_GET['cuName']);

だから、これを試してください:

<?php
        mysql_connect(localhost,  myUsername, "myPassword");
        mysql_select_db(myDatabaseName);

        //Define Variables
        $cuName = mysql_real_escape_string($_GET['cuName']);
        $password = mysql_real_escape_string($_GET['password']);
        $account = mysql_real_escape_string($_GET['account']);
        $phone = mysql_real_escape_string($_GET['phone']);
        $email = mysql_real_escape_string($_GET['email']);

        mysql_query("INSERT INTO Customer (cuName, password, 
                        account, phone, email)
                    Values('$cuName', '$password', '$account',
                            '$phone', '$email')") or die (mysql_error());
        echo $cuName ." thank you for reserving!";
        print ($cuName);
    ?>
于 2012-08-07T22:56:28.133 に答える
0

使用する方が良い:

$cuname = $_GET['cuname'];

このように....フォームメソッドが「GET」になっているため、GETよりもデータをPOSTすることをお勧めします。

于 2012-08-20T09:14:03.623 に答える