人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPの勉強中のものです。
初歩的な部分で煮詰まってしまいましたので、宜しくお願いしあます。

<?
if($page == 0){
$page = 0;
$i = 1;
while ($i <= 4) {
$page++;
$abc[$page] = "このページは$i目です。";
echo "<a href=\"?page=$page\">リンク</a><hr>";
$i++;
}
}

else{
echo $abc[$page];
}

?>

実現したいこと
ループ中に配列にデータを入れ、test.phpにアクセスし表示されるHTML内のリンクからtest.php?page=○○に移動することでtest.php?page=○ページにて、$abc[$page]の中身を渡す方法を教えて下さい。
GETやPOST以外でお願いします。

●質問者: akide
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:ABC e+ echo HTML PHP
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● kn1967
●20ポイント

http://www.stackasterisk.jp/tech/php/php03_06.jsp

セッションで変数を受け渡しというのも駄目なのでしょうか?

◎質問者からの返答

セッションについて勉強してみます。


2 ● ToMmY
●20ポイント

1.ファイルに保存して移動先から読み出す

http://ponk.jp/php_file/index.php?page=1

ファイルの何行目などを指定するのはPOSTで送ってその行を読み込むだけのほうが確実だとおもいますが、アクセスが集中しないならファイルを丸々書き換えるのでもOK

2.ブラウザのクッキーに食わせる

http://www.spencernetwork.org/memo/tips-2.php

ユーザーに読まれたくないということなら使えないが、上の方法よりは簡単で確実。同ドメインのほかページで使いたくなった場合も使いまわしがしやすい。

なぜGetやPostが使いたくないのか分かりません。一番確実で一般的な手段なのに

◎質問者からの返答

ファイル操作について勉強したかったため、GET、POST以外で知りたかったです。

ちなみに、GETやPOSTで実現する場合の具体的なプログラムはどのようになるのでしょうか?


3 ● ToMmY
●20ポイント

そういえばMySQLを利用する方法もあります。

http://phpspot.net/php/mysql.html

しかし、利用できるサーバーが限られるというデメリットがあります。


4 ● kn1967
●20ポイント

POSTなら$_POST['変数名'];、GETなら$_GET['変数名'] ;という形で利用出来るように準備してくれますので、特に何かが必要というわけではありません。

受け渡されたかどうかは

if (isset($_POST['test'])) {

print "testの中身は" . $_POST['test'];

} else {

print "testは送られてきてません";

}

※$_GETの場合も同様です。

URL必須ということなので↓は画像ファイルなどをPHPで受け取る場合に用いる技。

http://php.benscom.com/manual/ja/features.file-upload.php


5 ● tezcello
●20ポイント

phpのファイル関係のマニュアルです。

http://www.php.net/manual/ja/ref.filesystem.php

勉強中の方には教育的では無い(=余計なお世話)かも知れませんが、

ファイルに書いておいて読込む具体例としては

<?php
 if (!is_set($_GET['page'])){
 $page = 0;
 }else{
 $page = $_GET['page'];
 }

 if ($page){
 // $page ≠ 0 の場合
 $abc = file('filename');
 array_unshift($abc, 'dummy'); // 配列のインデックスは0からなので$page と合せる為に一つずらす
 echo $abc[$page];
 }else{
 // $page = 0 の場合
 for ($i=1; $i<5; $i++){
 $abc[$page] = "このページは$i目です。\n";
 echo "<a href=\"?page=$page\">リンク $page</a><hr>";
 }
 file_put_contents('filename', $abc);
 }

?>

こんな感じでしょうか。(ごめんなさい。実行確認はしていません。)

while文はわざと for文に書換えてみました。(個人的にこっちの方が好きなので)

インデックスを合せるのを配列の方でやりましたが、$page で合せるのもアリだし、保存しておく時に空行を入れておくのもアリでしょう。

ただし、今回の方法では $abc には改行が含まれない事が前提です。

改行が含まれる場合は、保存時に別のコード(例えば \r とか特定文字列)に置換えておいて、読込み後に再度元に戻す必要があります。

これは、file文で読込む際に改行毎に配列のインデックスを更新してしまうからです。

GET の場合はもう既にやっている page=$page 所に

&abc=$abc[$page] を追加するだけでいいのでは?

POST の場合は、見えないフィールドに $abc[$page] の内容を書いておいて...となりますが、リンクではなくサブミットボタンとなってしまうのでスクリプトの大改造になってしまいます。見栄えもかなり違ってきますし。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ