1

自己提出フォームです。選択した値がSQLクエリのWHEREパラメーターとして渡される3つの独立した選択リストがあります。

ボタンをクリックすると、すべてのデータが適切に表示され、十分に制限されており、リンク ページは以下のとおりです。しかし:

ページ リンクをクリックすると、結果セットとすべてのリンクが見えなくなります (選択リストのみが表示されます)。値が設定されていない場合はフォームを表示し、値が設定されている場合はフォームを処理する isset 条件に関連していると思います。したがって、最初の結果セットは正しく表示されますが、2 番目のページに移動しようとすると、選択リストがリセットされているため、代わりにリンクをクリックするとボタンをクリックしていないため、選択リストが設定されていないとフォームが解釈し、したがって、html フォームではないものはすべて消去されます。

ページネーション コードにエラーはありません。エラーは、このフォームをこのページネーション メソッドにリンクする方法にあります。そして、私は自分がどのようにすべきかを知ることができません。

        if (isset($_POST['submitted'])) { /***************IF IT IS SET, WE PROCESS THE VALUES*************************/
        $oldcountry = FALSE;
        $oldfrom = FALSE;
        $oldinto = FALSE;

 // Here just checking that all variables have been selected

       if (isset($_POST['country']))


        {
        $oldcountry = $_POST['country'];
        $country = filter_var($oldcountry, FILTER_SANITIZE_STRING);
        }
        else {
        echo 'Please, select a country';
        }
        if (isset($_POST['from_language']))
        {
        $oldfrom = $_POST['from_language'];
        $from_language = filter_var($oldfrom, FILTER_SANITIZE_STRING);
        }
        else {
        echo 'no has metido el from language';
        }
        if (isset($_POST['into_language']))
        {
        $oldinto = $_POST['into_language'];
        $into_language = filter_var($oldinto, FILTER_SANITIZE_STRING);
        }

    // so, once we have selected them and clicked the button, we go for the query

    // and paginate the results


        require_once('bdd1.php');
        $per_page = 6;
        $pages_query = mysql_query("SELECT COUNT(FName)
        FROM work_assignment, developer
        WHERE AES_DECRYPT(country, 'elperrodesanroquenotienerabo') = '".$country."'
        AND from_language = '".$from_language."'
        AND into_language = '".$into_language."'
        AND work_assignment.developer_id = developer.developer_id
        ORDER BY FName ASC ");
        $pages = ceil (mysql_result($pages_query, 0) /$per_page);
        $page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1;
        $start = ($page - 1) * $per_page;
        $query = mysql_query("SELECT FName
        FROM work_assignment, developer
        WHERE AES_DECRYPT(country, 'elperrodesanroquenotienerabo') = '".$country."'
        AND from_language = '".$from_language."'
        AND into_language = '".$into_language."'
        AND work_assignment.developer_id = developer.developer_id
        ORDER BY FName ASC LIMIT $start, $per_page");
        while ($query_row = mysql_fetch_assoc($query)){
        echo '<p>', $query_row['FName'], '</p>';
        }
        if ($pages >=1) {
        for($x = 1; $x <=$pages; $x++){
        echo '<a href="?page='.$x. '">'.$x.'</a> ';
        }
        }
        } /************* END OF IF ISSET TO PROCESS *******************************/

    ?>

更新 更新

すべての助けを借りて、ページ リンクを機能させる URL 文字列を作成することができました。それでも、それを表す変数を埋め込む代わりに国名 (基本的にはエストニア) をハードコードしたため、まだ微調整する必要がありますが、その URL を適切に記述することはできません。

これは機能します:

echo '<a href="?country=Estonia&from_language=Russian&into_language=Latvian&submitted=true&
page='.$x. '">'.$x.'</a> ';

エストニアを $country に、ロシア語を $from_language に、ラトビア語を $into_language に置き換えるだけです。しかし、一重引用符と二重引用符とドットの可能な組み合わせをすべて試しましたが、構文エラーが発生します。誰かがそれを書く方法を知っていますか?

4

2 に答える 2

1

Slomo が指摘したように、リンクをクリックしてもフォームが送信されないため、POST 変数は失われます。

これらの値をユーザーから隠したい場合を除き、フォームのメソッドを POST ではなく GET に設定できます。そうすれば、$_GET['page'] と同じように、変数が URL に追加されます。

次に、変更する必要があるページ変数を除いて、URL をそのまま維持する方法でリンクをレンダリングする必要があります。次のように実行できます(現在のページをページに変更するだけです):

ページネーション リンクでパラメータが繰り返される問題はありますか?

アップデート:

文字列内に変数を挿入したい場合は、変数を二重引用符で囲む (および文字列内の他の二重引用符をエスケープする) か、文字列と変数を連結します。次の 2 つの例を参照してください。

echo "<a href=\"?country=$country&from_language=$from_language&into_language=$into_language&submitted=true&page=$x\">$x</a>";
echo '<a href="?country=' . $country . '&from_language=' . $from_language . '&into_language=' . $into_language . '&submitted=true&page=' . $x . '">' . $x . '</a>';
于 2012-06-04T18:20:31.620 に答える
0

$ _POST値は、情報がPOSTリクエストで送信される場合にのみ設定されます。たとえば、おそらくmethod=POSTがあります。メソッドPOST(button = submit)を使用してフォームを送信すると、$_POST値が設定されます。別のリンクをクリックするたびに、新しいページのリクエストのみがサーバーに送信されます。

最初のフォーム送信後に情報を利用できるようにする必要がある場合は、セッションを使用する必要があります。(http://php.net/manual/de/features.sessions.php)セッションはクライアント(webbrowser)ごとに保存され、セッションがタイムアウトするまで利用できます(マニュアルを参照してください)。フォームが最初に送信されるときに、セッション変数を設定する必要があります。その後、セッションの値を使用できます。

/編集

セッションを使用したくない場合は、フィルター基準をurlパラメーター(index.php?groupby = country)として通常のリンクに追加できます。その後、$_GETを使用してアクセスします。

于 2012-06-04T17:47:42.813 に答える