0

これは、ここからの私の質問の2番目の部分です。

PHP動的ページの作成/編集

私は今、コードをまとめようとしています。私の質問の最初の部分を見たくない場合は、私が実験していて、ユーザーが特定の都市のイベントを投稿できるサイトを作成していることを教えてください。最初にユーザーはドロップダウンメニューを使用して州を選択し、次のページでドロップダウンメニューを使用して都市を選択します。都市が選択されると、city.phpに移動し、データベース内のクエリを使用して、特定の都市に投稿されたイベントを表示します。とにかく、私は都市を拡張し、city.phpをevents.php、jobs.php、またはforsale.phpのいずれかへのリンクが配置されるインデックスに変換したいと思います。ユーザーがこれらのリンクの1つをクリックすると、特定の都市が引き続き記憶され、それらの情報を引き出すためのクエリが実行されます。コーディングに問題があります:

都市のドロップダウンメニューからのコード:

while($result = mysqli_fetch_array($doQuery)){
// $result contains id (cid) and name (cname) for each city
// $result - current row
// here we add HTML code for option "dynamically"
    echo "<option value='".$result["cid"]."'>".$result["cname"]."</option>";
    session_start();
    $_SESSION['cname'] = $city;

city.phpからのコード:

session_start();
$_SESSION['cname'] = $city;
// import dbconnect.php
// we use require(not include) to stop the script if such file does not exist
// we use "once" because we do not need to establish dbconnection if it already exists
require_once("dbconnect.php");
// all data which we get from cityByState.php are stored in $_POST superglobal array
// in our case we have only one field "city" so we can get city id from $_POST["city"]
// also we use intval function for security purposes. It converts variable to integer.
$cityId = intval($_REQUEST["city"]);
// query which gets all info about required city
$query = "select * from cities where id=$cityId";
// run the query and handle possible errors
if(!($doQuery = mysqli_query($db, $query))){
    echo "Can not get info about the city!"; exit();
}

私は初心者であり、セッションを適切に使用してサイトを適切に機能させる方法を理解していないようです。また、city.phpのサブページ(イベント、ジョブ、販売)で適切なクエリを実行できることを保証するために何を使用するかもわかりません。

4

1 に答える 1

0

1つは、開始phpタグのすぐ下でセッションを開始する必要があります。少なくとも、後でこのコードを見る人のために。

したがって、この大規模な投稿では、基本的に「選択した都市をセッション変数に設定し、それを使用してデータベースから結果を取得するにはどうすればよいですか?」と書かれています。

では、選択フォームから始めましょう。phpを分割し、適切な方法で適切なol htmlを記述して、コードを変更しましょう。常にphpでhtmlを書くことは避けてください(echo '<a href="">'... etc)

<form id="city_select" action="" method="post">
    <fieldset>
        <select name="city">
        <?php while($result = mysqli_fetch_array($doQuery)): ?>
            <option value="<?php echo $result["cid"]; ?>" <?php echo ($result['cid'] == $_SESSION['city_id'] ? 'selected="selected"' : ''); ?>><?php echo $result["cname"]; ?></option>
        <?php endwhile; ?>
        </select>
        <input type="submit" name="submit" value="Submit">
    </fieldset>
</form>

わからない場合は、この行は三項演算子です。あなたはそのリンクで例を見ることができます...

<?php echo ($result['cid'] == $_SESSION['city_id'] ? 'selected="selected"' : ''); ?>

行の都市IDがセッションの都市IDと等しい場合は、selected="selected"そのオプションのhtmlに追加するだけです。

さて、php-フォームのアクション属性が指す場所で、このリクエストを処理します...

<?php 
session_start();

if(isset($_POST['city']))
{
    $_SESSION['city_id'] = $_POST['city'];
    //you can do other processing here, like redirecting to the last page viewed to prevent double posting and that annoying re-submit form popup, etc
}
?>

これで、少なくともドロップダウンは最後に選択した都市を覚えているはずです。次のステップは、結果にその選択を考慮させることです。明らかに、$ _ SESSION ['city_id']を適切にエスケープする必要がありますが、この例では、すでにそれを実行していると仮定しましょう...

$query = "select * from cities where id=".$_SESSION['city_id'];

これを改善する方法はたくさんあるので、始めようとさえすると威嚇するでしょう。私は、あなたがOOPではなく手続き型プログラミングの習慣を使用していること、ユーザー入力のエスケープを認識していること、そしてphpの基本を理解していることを前提としています。ご不明な点がございましたら、この投稿を更新する場合があります。

于 2012-10-03T20:01:20.260 に答える