-1

これはうまくいきます:

$username= $_GET["username"];
$query= "INSERT INTO test (latitude) VALUES ('$username')";
mysql_query($query) or die (mysql_error("error"));
mysql_close();

これは動作しません:

if(!isset($_POST['submit']))
{
}
else
{
$username= $_GET["username"];
$query= "INSERT INTO test (latitude) VALUES ('$username')";
mysql_query($query) or die (mysql_error("error"));
mysql_close();
}

$username が「7」のように get 以外に設定されている場合に機能します。

目的 c から値を取得する GET。if ステートメントに入れないと、データベースに何百回も入力されます。「if」ステートメントに入れると、一度だけ入りますが、値はゼロになります。私は完全に困惑しています。どんな助けでも素晴らしいでしょう。

編集:私が得た答えのせいで、うまく説明できなかったと思います。明確にするために:POSTを使用してuser_id、answer_bodyを投稿しています。Core Location から緯度と経度をインポートする方法として GET を使用しています (ユーザー名と名付けましたが、緯度です)。それらをすべて同じエントリに入れてほしいので、GET を isset_POST に結び付けています。さらに、GET(ユーザー名)が単独でINSERTクエリを使用している場合、データベースに何百もの重複が作成されます。Objective-C スクリプトは次のとおりです。

//sends whatever username is set to, to database
float username = location.coordinate.latitude;
NSString *theValue = [NSString stringWithFormat:@"%f", username];
NSString *hostStr =[NSString stringWithFormat:@"http://mysite.com/page.php?username=%@", theValue];
NSData *dataURL =  [NSData dataWithContentsOfURL: [ NSURL URLWithString: hostStr ]];
NSString *serverOutput = [[NSString alloc] initWithData:dataURL encoding: NSUTF8StringEncoding];
NSLog(@"Server output: %@", serverOutput);

フォーム コードは次のとおりです。

<form action="gpstestertwo.php" method="post"><center>
                $<input type="text" name="answer_body" maxlentgh= "5"  style="height:3em;"/>
                <input type="submit" value="submit" name="submit" style="height:2em; width:5em; font-size:19px " 
                 />
                 </center>
            </form>
4

2 に答える 2

1

$_POST['submit']そして$_GET['username']...なぜ使わないのですか$_POST['username']

どのようにFORMデータを送信していますPOSTGET? または$_REQUEST['username']、確実に使用します。

クエリで使用する前にユーザー名をエスケープする必要があることは言うまでもありません。

編集(常にPOSTsではなくで処理を行いますGETs):

if(!strcasecmp($_SERVER['REQUEST_METHOD'], 'POST')){
    // post operation, do your work HERE only
    if(!empty($_POST['username'])){
        // ... do your worst here ...
    }
}

GETsはデフォルトのリクエストであり、データベースに攻撃される可能性があります。POSTs特別なものです。そのため、取り扱いをREQUEST_METHOD行うPOST前に必ず確認してください。POST

于 2012-10-28T15:35:18.803 に答える
1
if(isset($_REQUEST['submit']))
{
$username= mysql_real_escape_string($_REQUEST["username"]);
$query= "INSERT INTO test (latitude) VALUES ('$username')";
mysql_query($query) or die (mysql_error("error"));
mysql_close();
}

編集: まず、$_GET と $_POST を $_REQUEST に変更して、$_GET と $_POST の両方を受け入れるようにしました。

mysql_real_escape_string次に、 SQL インジェクションを防ぐために、引用符などの不要な文字をエスケープする関数を追加しました。

于 2012-10-28T15:36:13.863 に答える