1

PHP と mysql で簡単なブートストラップ フォームを作成しようとしています (デフォルト設定で xampp を使用しています)。すべてが index.php という 1 つのファイルで行われます。

ここに私のフォームがあります:

<form class="form-horizontal" role="form" method="post" action="index.php" >
                <div class="form-group">
                    <label for="inputLongitude" class="col-lg-2 control-label">Longitude</label>
                    <div class="col-lg-10">
                      <input type="number" class="form-control" id="inputLongitude" placeholder="longitude" name="inputLongitude">
                    </div>
                </div>
                <div class="form-group">
                    <label for="inputLatitude" class="col-lg-2 control-label">Latitude</label>
                    <div class="col-lg-10">
                      <input type="number" class="form-control" id="inputLatitude" placeholder="latitude" name="inputLatitude">
                    </div>
                </div>
                <div class="form-group">
                    <div class="col-lg-offset-2 col-lg-10">
                      <button type="submit" name="submit" class="btn btn-primary">Save</button>
                    </div>
                </div>
                               </form>

フォームは非常にシンプルで、2 つの値を取り、データベースに格納します。そして、ここで、mysqlに値を保存するために使用するphpコード(同じファイル-index.php):

$conn = mysqli_connect('localhost', 'root', '', 'android_app') or die("bla");

                if (mysqli_connect_errno()){
                    echo "Failed to connect to MySQL: " . mysqli_connect_error();
                }

                $longti = isset($_POST['inputLongitude']); 
                $lati = isset($_POST['inputLatitude']);

    $sql = "INSERT INTO `table`(`key_primary`, `lati`, `longti`) VALUES (`key_primary`,$lati,$longti)";
    mysqli_query($conn,$sql);

これまでのところ、ほとんどすべてが正常に機能しています。両方の値が保存されます。これがdbの設定です:http://i.imgur.com/hyuNJsj.jpg

今私の問題:保存されるはずの値(=送信してデータベースに保存したい)が保存されません。したがって、たとえば「50,5」を格納する代わりに、mysqlは「1」のみを格納します。フォームで何を送信しても、常に格納されます。ここを見てくださいhttp://imgur.com/brjFn5e

本当に興味深いのは、phpmyadmin で SQL を使用してそこに値を挿入すると (「手動の方法」)、問題ないことです。全く問題無い。どうすればそれを解決できるか考えていますか? データベースの設定が間違っていますか? それともコードのどこかにありますか?

4

3 に答える 3

0

isset 関数を使用しています

$longti = isset($_POST['inputLongitude']);

上記のコードは $_POST['inputLongitude'] の値を設定するのではなく、$_POST['inputLongitude'] が存在するかどうかを設定しています... 1 は、それが存在することを意味します。

以下を簡単に使用できます。

$longti = $_POST['inputLongitude'];
于 2013-10-19T10:53:45.650 に答える
0
$lati = isset($_POST['inputLatitude']);

これは常に 0 または 1 です:isset か not.isset blah=someotherblah の場合に使用します

if (isset($_POST["inputLatitude"])) {
    $lati = $_POST['inputLatitude'];  
}else{  
    echo "N0, inputLatitude is not set";
}
于 2013-10-19T10:53:57.203 に答える
0

あなたの問題はここで発生します:

$longti = isset($_POST['inputLongitude']); 
$lati = isset($_POST['inputLatitude']);

このブロックは、意図した値 from の代わりにisset(...)$longtiの真理値を割り当てています。これらの $_POST 値のセキュリティが完全に保証されている場合 (そうすべきではありません)、次のようにする必要があります。$lati$_POST

$longti = isset($_POST['inputLongitude']) ? $_POST['inputLongitude'] : null; 
$lati = isset($_POST['inputLatitude']) ? $_POST['inputLatitude'] : null;

これらの値が信頼できないソースからのものである場合 ($_POST値は通常そうであるように)、値をデータベースに出力する前に、値に対していくつかの検証を実行する必要もあります。

$out = isset($in) ? $in : null;編集:パターンが冗長に見える(そして冗長である)ことに気付きました:$out = $in;まったく同じように機能します。私の通常は、このステップ内に基本的な検証/フィルタリングを含めることです。たとえば、期待/許可するのが数値だけの場合 (<input>タイプが「数値」であるため):

$longti = isset($_POST['inputLongitude']) && is_numeric($_POST['inputLongitude'])
    ? $_POST['inputLongitude'] : null;

または整数のみ:

$longti = isset($_POST['inputLongitude']) ? (int) $_POST['inputLongitude'] : null;

これらは、無効なフォーム コンテンツなどのユーザーへのフィードバックを含まない単純な例です。

于 2013-10-19T10:53:57.417 に答える