0

フォームからの送信で PHP_SELF を使用することについて質問があります。これは私のindex.phpにあるものです:

<body>
    <div class="container">
        <div class="row">
            <div class="span12">
                <?php
                    // If you get an appid, 
                    if(isset($_GET['appid'])) {
                        // GET appid
                        $appid = $_GET['appid'];

                        $json_url  ='http://api.nameurl.com/api/gateway/call/1.4/getApp?appid=' . $appid;

                        $ch = curl_init($json_url);
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

                        $str = curl_exec($ch);
                        curl_close($ch);

                        $data = json_decode($str);
                        $array = json_encode($data);
                    }  
                    else if(isset($_POST['submit'])){
                        $name = $_POST['appid'];
                        echo "User Has submitted the form and entered this name : <b> $name </b>";
                        echo "<br>You can use the following form again to enter a new name."; 
                    }
                    else{ ?>
                        <!-- Form -->
                        <form class="well" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">  
                            <label>Your appid</label>  
                            <input type="text" class="span3" name="appid" id="appid" placeholder="Type your appid here...">  <br>
                            <button type="submit" id="submit" class="btn btn-primary" data-loading-text="Loading...">Submit</button>  
                        </form>

                <?php }   
                ?>

                <p id="errors" class="text-error"></p>
            </div>
        </div>

        <hr>

    </div>

前のページから appid を取得したかどうかを確認します。
はい -> api からデータを取得します
いいえ -> appid を挿入できるようにフォームを表示します

次に、フォームで送信を押すと、appid 挿入を取得して、上記と同じ操作を実行します。

私は何を間違っていますか?

4

5 に答える 5

3

フォームのメソッドを に設定しましたがpost、 を使用して appid にアクセスしようとしています$_GET['appid']。フォーム メソッドを に変更するかget、appid を使用してアクセスする必要があります。$_POST['appid']

于 2013-05-23T09:22:34.750 に答える
3

これを試して....

<body>
        <div class="container">
            <div class="row">
                <div class="span12">
                    <?php
                        // If you get an appid, 
                        if(isset($_GET['appid'])) {
                            // GET appid
                            $appid = $_GET['appid'];

                            $json_url  ='http://api.nameurl.com/api/gateway/call/1.4/getApp?appid=' . $appid;

                            $ch = curl_init($json_url);
                            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

                            $str = curl_exec($ch);
                            curl_close($ch);

                            $data = json_decode($str);
                            $array = json_encode($data);
                        }  
                        else if(isset($_POST['submit'])){
                            $name = $_POST['appid'];
                            echo "User Has submitted the form and entered this name : <b> $name </b>";
                            echo "<br>You can use the following form again to enter a new name."; 
                        }
                        else{ ?>
                            <!-- Form -->
                            <form class="well" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">  
                                <label>Your appid</label>  
                                <input type="text" class="span3" name="appid" id="appid" placeholder="Type your appid here...">  <br>
                                <button type="submit" id="submit" name="submit" class="btn btn-primary" value="Submit" />  
                            </form>

                    <?php }   
                    ?>

                    <p id="errors" class="text-error"></p>
                </div>
            </div>

            <hr>

        </div>
于 2013-05-23T09:29:30.310 に答える
2

$_POST['submit'] が定義されていません。name="submit"その理由は、ボタンに属性がないためです

于 2013-05-23T09:28:39.217 に答える
0

送信ボタンに名前がありません

  <button type="submit" name ="submit" id="submit" class="btn btn-primary" data-loading-text="Loading...">Submit</button>  
于 2013-05-23T09:25:14.963 に答える
0

メソッド アクションをPOSTとして定義しましたが、それをGETとして取得すると、 $_REQUESTを使用して post/get リクエストの両方から変数を取得できます。

これを変える

if(isset($_GET['appid'])) {
                    // GET appid
                    $appid = $_GET['appid'];

if(isset($_REQUEST['appid'])) {
                    // GET appid
                    $appid = $_REQUEST['appid'];

ケースも解決。

$_REQUEST の変数は、GET、POST、および COOKIE 入力メカニズムを介してスクリプトに提供されるため、リモート ユーザーによって変更される可能性があり、信頼できません。この配列にリストされる変数の存在と順序は、PHP の variables_order 構成ディレクティブに従って定義されます。

http://php.net/manual/pl/reserved.variables.request.php

于 2013-05-23T09:40:08.817 に答える