0

PHP は初めてで、最初のアプリを完成させようとしています...これは不動産ページです。ユーザーはオープンハウスの情報を追加できます。コードは一般情報を追加するように指示します。それから絵。このルートは、セッションで非常にうまく機能します。ログインシステムあり。同じユーザーが、ログイン中に新しいオープン ハウスを追加し、現在のオープン ハウスを編集します。

アカウントの編集へのリンクがあり、この時点で、ユーザーは包括的なリストを編集したり、写真を追加したりできます。しかし、私がこのルートに行くと、セッションはアイテムではなく、最初の情報エントリからの住所に同じ値をもたらします編集する。


私の推測では、私は基本的に 2 つのルートを持っていると思います: a) 同時に 2 つのセッションを持っています。それらを呼び出す方法は?私はまだphp.netを理解できません。たぶん数ヶ月以内に。私は試した。

b) URL を使用して非常に基本的な _POST を (多くの汗と終わりのない夜の後に) 学びました。しかし、私が学んだ方法は、連続したページに最も役立ちます。複数のループを通過する必要があります...

質問: 投稿を渡​​し続けて、複数の異なるページで値を取得する方法はありますか? または、グローバル変数を作成しますか?

私が調査した以外にこれを行うためのより良い方法はありますか?

ありがとうございました。

編集**編集

ここにいくつかのコードを配置するように求められました。オープンハウスのすべての情報を取得したら、DB にすべてのデータを挿入する 1 つのファイルを作成し、DB にデータ (緯度、経度) を挿入するために、住所、都市、州を取得して住所をジオコードします。

$username = $_SESSION['user']['username'];

$sql="INSERT INTO braaasil_brokerstour.property(day, hours,laundry_equip, VERY LONG QUERY, ETC.)
VALUE ('$_POST[day]','$_POST[hours]','$_POST[laundry_equip]',VERY LONG QUERY, ETC. ETC'$username')"
    or die ("fail");  

if (!mysqli_query($connection,$sql))
  {
  die('Error: ' . mysqli_error($connection));
  }

$P_ID = $connection->insert_id;
printf ("New Record has id:  %d.\n", $P_ID);
$_SESSION['P_ID']   = $P_ID;
ETC. ETC.

それよりも、SESSION でいくつかの値を取得して、さまざまなページで使用します。

<?php session_start(); 
$address = $_SESSION['address'];
$city = $_SESSION['city'];
$zip_code = $_SESSION['zip_code'];
$P_ID = $_SESSION ['P_ID'];

問題は、同じユーザーが新しいリストを追加して古いものを修正する可能性があり、セッションがそこにあることです。pageInsertNew.php (ジオコード関連) が 1 つのセッションを取得するとよいでしょう。pageFIX.php (更新/修正のもの) は別のセッションを作成します。このようにして、私はものを分けることができました。

ID とアドレスに関するこの情報を使用して、ユーザーの ID とアドレスを含む別のテーブルに写真を挿入し、問題が発生した場合に簡単にデバッグできるようにします。

すべての回答に本当に感謝しています。しかし、それらを理解し、研究するには丸一日が必要です。私はここに来たばかりですが、ここで行った変更についてメールが届くと思います。

すべての応答にもう一度感謝します。今日それらを実装する方法がわかりません。物事がすぐに変わることを願っています。

さらに、post/get が好きな人とセッションが好きな人の間には、この問題があります。私のコンピュータースキルでは、現時点でこれを判断する立場にはありません。

編集#2 imsisoありがとう。これらは、私が必要とする値の 2 番目のソースです (最初のソースはこの質問の上にあります)。どちらも同じ名前 (住所、都市、郵便番号) です。両方とも、同じセッション内かどうかに関係なく、同じユーザーによって使用されます。

<?php
  require_once('config.php');       

   $query = sprintf("select P_ID, address, city from property WHERE username =  '".(
                 htmlentities($_SESSION['user']['username'], ENT_QUOTES, 'UTF-8'))."'");

    $result = mysql_query($query, $db);

    $images = array();

  while ($row = mysql_fetch_array($result)) {
      $address = $_SESSION['address'];
      $city = $_SESSION['city'];
      $zip_code = $_SESSION['zip_code'];
      $P_ID = $_SESSION ['P_ID'];
         echo $P_ID;
        echo $city;


 ?><br />

Edit pictures:

<form action="formAddPic2.php" method="post">
<li> <a href="formAddPic2.php?P_ID=<?php echo $row['P_ID']; ?>">Property ID: <?php  print  $row['P_ID'] ?> </a><br /><br />
&ensp;&ensp;  Address: <?php print $row['address']?>,   <?php print $row['city'] ; ?> 
</li>  
<form>
<?php

ご覧のとおり、私はセッションを放棄し、プロパティ ID の取得/投稿に戻りましたが、問題が発生した場合に備えて、アドレスの値も取得する必要があります。

したがって、1回のループの後、これが私が試みるものです:

$properties=array(
/* like:    id=>array(
        'id'=>id
    ),*/
    1=>array(
        'id'=>1,
        'property_name'=>'echo $row['P_ID']',    // automatic id in database
         'zip_code => 'echo $row['zip_code']',
        'some_other_things'=>'some other value',
    ),
    2=>array(
        'id'=>2,
        'property_name'=>'echo $row['P_ID']',    // automatic id in database
         'zip_code => 'echo $row['zip_code']',
        'some_other_things'=>'some other value',
    ),

);

$_SESSION['properties']=array();
$_SESSION['properties']=$properties;

したがって、@ imsiso 'の回答のように値を呼び出すだけでなく、配列はループの後に移動します。また、ユーザーが新しいリストを追加して古いものを修正する必要があるか、新しいものを修正または追加する必要があるかによって、1 つのループが常に空になる場合があります。

4

2 に答える 2

1

セッションが 1 つあることがわかります。しかし、ログインしている人の認証、その人が何をしているか、複数のページのフォーム、買い物かごなど、さまざまなデータをセッションに保存する必要があることがよくあります。

セッションを簡単に処理したい場合は、セッションハンドラークラスを使用する必要があります(セッション値を簡単に設定および取得するため、またセキュリティのために)

または、少なくとも、このようなセッションでは配列を使用する必要があります。

$_SESSION['user_data']=array();
$_SESSION['user_data']['is_logged_in']='yes';
$_SESSION['user_data']['user_id']=106;
$_SESSION['user_data']['user_name']='john';

$products=array(
/* like:    id=>array(
        'id'=>id
    ),*/
    1=>array(
        'id'=>1,
        'product_name'=>'house 1',
        'some_other_things'=>'some other value',
    ),
    2=>array(
        'id'=>2,
        'product_name'=>'house 2',
        'some_other_things'=>'some other value',
    ),
    4=>array(
        'id'=>4,
        'product_name'=>'house 3',
        'some_other_things'=>'some other value',
    ),
);

$_SESSION['products']=array();
$_SESSION['products']=$products;

更新:説明が追加されました。

はい、そうです、実際の配列は

$products=array(
    0=>array('id'=>35,'address'=>'somewhere 1'),
    1=>array('id'=>36,'address'=>'somewhere 2')
);

これは次と等しい:

$products=array(
    array('id'=>35,'address'=>'somewhere 1'),
    array('id'=>38,'address'=>'somewhere 2')
);

しかし、私自身はデフォルトのインデックスの代わりに product_id を使用しました。お気に入り:

$products=array(
    35=>array('id'=>35,'address'=>'somewhere 1'),
    38=>array('id'=>38,'address'=>'somewhere 2')
);

これで、ID が 2 の製品のデータにアクセスできるようになりました。

$product[2];

私がそれをしなかった場合、私はそれを見つけるためにすべての製品を検索しなければなりませんでした. それは一種のトリックかもしれませんが、多くの場所で使用されており、あなたにも役立ちます.(他の同様のことで).

于 2013-09-18T08:17:36.377 に答える