人に聞けない痔の悩み、これでスッキリ >>

あるホームページを開いて、リンクをクリックした際に、そのリンク先をクッキーに保存して次にそのページを訪れた場合は、そのページを表示しないでそのリンク先へリダイレクトにはどうしたらいいでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (7件)

クッキーは焼けそうですね。


そういう場合は、ちょっとした事が原因なんですよ。
その3つのファイルを見れば、簡単に分かるのですが、
そうも行かないですし・・・
拡張子はすべてphpですよね?
hrefの指定もphpファイルにアクセスしていますか?
有効期限は付いていますか?
そういえば、phpのエラー表示されるようになっていますか?
すべてのファイルを検証しているわけではないので、
内部でエラーしてる可能性があります。
    • good
    • 0
この回答へのお礼

昨日はいろいろとアドバイスありがとうございました。もう一度ソースを読み直してみたら、elseifと書くべきところをif elseと書いてました。直したらちゃんとリダイレクトされました。ありがとうございます。

お礼日時:2009/08/27 10:01

クッキーを焼けないようですね。


ブラウザの設定でしょうか?何を使っていますか?
原因を明確にする為に最小構成のPHPファイルを試してください。

cookie.php
<?php
$value = 'クッキー';
setcookie("TestCookie", $value, time()+3600);

if (isset($_COOKIE['TestCookie'])) {
echo $_COOKIE['TestCookie'];
} else {
echo 'クッキーまだ?';
}
?>
上記ファイルは、一度目はクッキーがセットされていないので、
"クッキーまだ?"
二回目以降は、セットされているので、
"クッキー"
になります。
ブラウザのクッキーの削除の仕方は分かりますよね?

この回答への補足

ありがとうございます。上記の方法を試してみたところ、一度目は"クッキーまだ?"と表示され、二回目以降はちゃんと"クッキー"が表示されました。

補足日時:2009/08/26 18:29
    • good
    • 0

先程のtop.phpを改変します。


<?php
//クッキーが書き込まれている場合はheaderで各々ページへ。
if (isset($_COOKIE['LangCookie'])) {
$LangCookie = $_COOKIE['LangCookie'];
if($LangCookie == "ja") {
echo "jaが入っている";
//header("Location: ​http://www.***.**/ja.php");//​クッキーにja
} elseif("en") {
echo "enが入っている";
//header("Location: ​http://www.***.**/en.php");//​クッキーにen
} else {
echo "何かが入っている";
}
}else{
echo "何も入っていない";
}
?>
<html>
<body>
<ul>
<li><a href="​http://www.***.**/ja.php">​日本語ページ</a></li>
<li><a href="​http://www.***.**/en.php">​英語ページ</a></li>
</ul>
<body>
</html>
このままコピーして何が出力されるか確認してください。

この回答への補足

何回もありがとうございます。出力の結果ですが、どこにアクセスしても「何も入っていない」と出るだけです。

補足日時:2009/08/26 17:25
    • good
    • 0

PHPでも書き込むことが可能です。


下記の通りに試してください。
3つPHPファイルを作成してください。

top.php
<?php
//クッキーが書き込まれている場合はheaderで各々ページへ。
if (isset($_COOKIE['LangCookie'])) {
$LangCookie = $_COOKIE['LangCookie'];
if($LangCookie == "ja") {
header("Location: http://www.***.**/ja.php");//クッキーにja
} else {
header("Location: http://www.***.**/en.php");//クッキーにen
}
}
?>
<html>
<body>
<ul>
<li><a href="http://www.***.**/ja.php">日本語ページ</a></li>
<li><a href="http://www.***.**/en.php">英語ページ</a></li>
</ul>
<body>
</html>

ja.php
<?php
setcookie("LangCookie", "ja", time()+3600);//有効期限3600秒←追加しました。
echo "jaページ";
?>

en.php
<?php
setcookie("LangCookie", "en", time()+3600);//有効期限3600秒
echo "enページ";
?>

この回答への補足

たびたび済みません。上記の方法を試してみましたが、各ページに飛んだ後、トップページにアクセスしても各ページにリダイレクトされませんでした。どこがいけないのでしょうか?

補足日時:2009/08/26 15:42
    • good
    • 0

大事なのはPHPコードです。


クッキーをセットする事はできましたか?
//jaページに
setcookie("LangCookie", "ja");
//enページに
setcookie("LangCookie", "en");
<PHP?
//二度目以降の訪問
if (isset($_COOKIE['LangCookie'])) {
$LangCookie = $_COOKIE['LangCookie'];
header("Location: http://***で$LangCookieを結合
exit;
}
?>
<html>

この回答への補足

たびたびすみません。どうやらJavaScriptのonclickでクッキーに書き込むことが必要みたいです。どういうコーディングをすればよいでしょうか?

補足日時:2009/08/26 12:27
    • good
    • 0

htmlを読み込む前ですから、一番上でいいのではないですか?


ソースがないので、いまいち問題を把握できませんが
if (isset($_COOKIE['TestCookie'])) {
header("Location: http://***");
exit;
}

この回答への補足

これがソースです。
<html>
<body>
<ul>
<li><a href="http://www.***.**/ja.html">日本語ページ</a></li>
<li><a href="http://www.***.**/en.html">英語ページ</a></li>
</ul>
<body>
</html>

リダイレクト先が1つならいいのですが、2回目以降に2つのサイトのどちらかにリダイレクトさせる方法がよくわかりません。何かいい方法はないですか?

補足日時:2009/08/26 09:25
    • good
    • 0

クッキーセット


$value = 'something from somewhere';
setcookie("TestCookie", $value);

if (isset($_COOKIE['TestCookie'])) {
クッキーがセットされている場合の記述
}

参考URL:http://www.php.net/manual/ja/function.setcookie. …

この回答への補足

試してみましたがなかなか上手くいきません。
例としてトップページから日本語ページか英語ページにアクセスするんですけど、2回目以降はトップページを表示しないで、前回クリックしたページにリダイレクトしたいんですけど、
そのソースコードと、htmlのどこら辺に埋め込めばいいのか教えてもらえますでしょうか?

補足日時:2009/08/25 18:55
    • good
    • 0
この回答へのお礼

ありがとうございます。それでは早速試してみます。

お礼日時:2009/08/25 18:07

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QリダイレクトでPOST

教えてください。

リダイレクトの際、POSTで次のページにデータを渡すことは可能でしょうか?

GETだと
header("Location: "a.php?no=".$no);
と、問題なくできるのですが、
できれば、パラメータを隠したいと思います。

以上ですが、よろしくお願いします。

Aベストアンサー

多分できないです。
それに、結局クライアント側に情報を送信しているのだから、POSTにしたところでパラメータを隠した事にはならないですし。
本当に隠すならサーバ側でセッション情報を引き継ぐような形にしないとダメでしょう。

AJAXのかたちにして、ページ遷移を見えなくするというのが手っ取り早いかも。

Qsyntax error, unexpected '}' というエラーの対処法

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" maxlength="3" />
<input type="sbumit" value=回答" />
</form>
<hr />
<?php
session_start();
if(is_null($_SESSION['answer'])){
mt_stand(microtime()*1000000);
$_SESSION['answer']=mt_rand(1,100);
$_SESSION['game_cnt']=0;
}
if($_POST['answer']!=""){
$_SESSION['game_cnt']++;
if($_session['answer']==$_POST['answer']){
print("おめでとうございます".
$_SESSION['game_cnt']."回で正解しました!");
session_destroy();
}else{
if($_SESSION['answer']>$_POST['answer']){
print("もう少し大きいです。");
}else
print("もう少し小さいです。");
}
}
}
?>
</body>
</html>
それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" max...続きを読む

Aベストアンサー

print("もう少し大きいです。");
}else
print("もう少し小さいです。");
のelseの後に{がないようですが、大丈夫でしょうか?

Qheader(Location: next.php) だとPOSTした値が渡らない?

文末は(だいぶ端折ってますが),
(1) エラーがあればエラー表示,
(2) エラーがなければnext.phpに飛ぶ
という動作をするのですが, next.php 内に

echo $_POST["Name"]; とか echo $_POST["reg"]; とか書いても
valueの中身が渡ってきていません.
header("Location: next.php"); で飛ばすとだめなのでしょうか.


http://oshiete1.goo.ne.jp/qa2706500.html
でも,#2さんのアドバイスのようにしようとしましたが,
#1さんのご教示のように,セッションを利用するしかないですか?
ちょっとセッションで値の渡し方がチンプンカンプンなのですが・・・


<?php
session_cache_limiter('none');
session_start();
header("Cache-control:no-cache");
header("Pragma:no-cache");

$errFlg=false;
if ( $_POST["reg"] == "" ) $errFlg = true;

if ( !$errFlg ) {
if ( $_POST["Name"] == "" ) {
$errFlg = true;
$errStr["Name"] = "未入力";
}
}
if ( $errFlg ) {
?>
<html><body>
<form method="post" action="<?php $_SERVER["PHP_SELF"] ?>">
<?= $errStr["Name"] ?></td>
<input type="text" name="Name" value="<?php echo $_POST["Name"]; ?>">
<input type="submit" name="reg" value="登録"></td>
</form>
</body></html>
<?php
} else {
header("Location: next.php");
}
?>

文末は(だいぶ端折ってますが),
(1) エラーがあればエラー表示,
(2) エラーがなければnext.phpに飛ぶ
という動作をするのですが, next.php 内に

echo $_POST["Name"]; とか echo $_POST["reg"]; とか書いても
valueの中身が渡ってきていません.
header("Location: next.php"); で飛ばすとだめなのでしょうか.


http://oshiete1.goo.ne.jp/qa2706500.html
でも,#2さんのアドバイスのようにしようとしましたが,
#1さんのご教示のように,セッションを利用するしかないですか?
ちょっ...続きを読む

Aベストアンサー

LocationではPOSTデータは渡せません
セッションでやる方法もありますがそのプログラムなら
else {
header("Location: next.php");
}

else {
require "next.php";
}
にすればいいのではないでしょうか

Qheader(Location:~)で$_SESSION[" "]が保持されない。

自宅サーバー(apache2+php5+mysql5)のlocalhost環境で、
header(Lcation:~)の記述をすると、
セッションが保持されない現象が起きています。

本番環境のレンタルサーバーは、同じ記述で、
しっかりとセッションが保持されます。
この原因は、何でしょうか?

php.iniの設定など、何か考えられることがあれば、
是非教えて下さい。

【やりたいこと】

■a.php
****************************************
<?php
echo<<<EOD
<form method="POST" action="./b.php">
<INPUT type="text" name="test">
<INPUT type="submit" name="Submit" value="確認画面へ">
</form>
EOD;
?>

■b.php
****************************************
<?php
$_SESSION["test"]=$_POST["test"];
header("Location:./c.php");
?>

■c.php
****************************************
<?php
echo $_SESSION["test"];
?>

自宅サーバーだと、
a.phpで入れたデータが、c.phpで表示されません。

レンタルサーバーだと、
セッションが保持され、表示されます。

自宅サーバー(apache2+php5+mysql5)のlocalhost環境で、
header(Lcation:~)の記述をすると、
セッションが保持されない現象が起きています。

本番環境のレンタルサーバーは、同じ記述で、
しっかりとセッションが保持されます。
この原因は、何でしょうか?

php.iniの設定など、何か考えられることがあれば、
是非教えて下さい。

【やりたいこと】

■a.php
****************************************
<?php
echo<<<EOD
<form method="POST" action="./b.php">
<INPUT type="text" name=...続きを読む

Aベストアンサー

php.iniのsession.cookie_path設定が異なっていたとかはないですか?
ページによって再設定していたりすると、'/' と '' では異なるcookie として保存されるので、session id も異なって発行されます。
ブラウザに保存されたcookie情報も確認してみるとよいでしょう。
私も先日、このpath設定をいじってて、「sessionが保存されてない?」「消したのに残ってる?」という状況に遭遇しました。

Q外部ファイルにしたら文字化けしてしまいました

FC2ブログで下記【1】を

<script type="text/javascript">
<!--
【1】
// -->
</script>

で囲んで直接プラグインに書き込んだら
文字化けせずに表示されたのですが、

外部ファイルにして

<script type="text/javascript" src="【1】のJSファイルのパス"></script>

をプラグインに書き込んだら、
画像リンクはうまく表示されたのですが、
文字化けしてしまいました。

文字化けしない方法はないでしょうか?


【1】
// ランダムに画像を表示する
jmp = new Array();
img = new Array();
// ジャンプ先のアドレス(数字は画像と対応)
jmp[0] = "http://~";
jmp[1] = "http://~";
jmp[2] = "http://~";
jmp[3] = "http://~";
jmp[4] = "http://~";
// 画像のアドレス(数字はジャンプ先のアドレスと対応)
img[0] = "img/img1.jpg";
img[1] = "img/img2.jpg";
img[2] = "img/img3.jpg";
img[3] = "img/img4.jpg";
img[4] = "img/img5.jpg";
n = Math.floor(Math.random()*jmp.length);
document.write("<a href='"+jmp[n]+"' target='_blank'>");
document.write("<img src='"+img[n]+"' border='0'>");
document.write("</a>");

FC2ブログで下記【1】を

<script type="text/javascript">
<!--
【1】
// -->
</script>

で囲んで直接プラグインに書き込んだら
文字化けせずに表示されたのですが、

外部ファイルにして

<script type="text/javascript" src="【1】のJSファイルのパス"></script>

をプラグインに書き込んだら、
画像リンクはうまく表示されたのですが、
文字化けしてしまいました。

文字化けしない方法はないでしょうか?


【1】
// ランダムに画像を表示する
jmp = new Array();
img = new Array();
// ジャンプ先...続きを読む

Aベストアンサー

自分は5歳児だろうが主婦だろうが手は抜きません。


とりあえず試しに、

<script type="text/javascript" src="JSファイルへのパス" charset="Shift-JIS"></script>

~と言う風にしてみて下さい( charset="Shift-JIS" というのを付け足す)。それで文字化けが直るようなら、貴方のJSファイルの文字コードは「Shift-JIS」と言う事になります。FC2のBlogサービスですか?それでHPやBlogを作っているのなら、基本的には文字コードはサーバ側、つまりこの場合は「EUC-JP」に統一するべき~という事になります。

一般的に、Windowsの標準の環境だと。前段で述べた様な、様々な種類の文字コードを扱う事が出来ないので。事実上、作業は「Shift-JIS」1択と言う事になります。また『メモ帳(notepad.exe)』では「改行コード」を編集出来ないので、HTMLやJavaScript(JSファイル)を編集するには力不足です。何か特別なソフトとかを使わずに、Windows標準の『メモ帳(notepad.exe)』でJSファイルを編集したのであれば、十中八九、文字コードは「Shift-JIS」になっているはずです。


>文字コード
「文字コード」とは、コンピュータ上でテキストファイル(*.txt)をやり取りする時の方式の事で、現在では100種類近くの文字コードがあります。インターネット上でよく使われる文字コードは、「UTF-8」、「Shift-JIS」、「EUC-JP」~の3種類で、基本的にはこれだけ押さえておけばOKです。

考え方としては、日本語や英語のように。同じ意味を持つ文書でも色んな国の言葉で書く事が出来る様に。コンピュータ上での文書の表し方にも方言というか、色んな国の言葉がある様な物だと思ってて下さい。先に述べた「改行コード」や「BOM無し」とかは忘れて下さい。

で、初心者はコレだけ覚えて置いて欲しいのですが…

・半角英数文字だけなら文字化けは起きない

~と(実際は違いますが、話がややこしくなるので簡単にします)。半角英数文字ってのは「abc,?!#123456+-=」みたいな文字の事です。全角文字とは違うので注意して下さい(全角文字 → abc,?!#123456+-=)。従って逆説的に言えば「日本語を使う時は常に文字コードの影響を受ける」と言う事です。

自分は5歳児だろうが主婦だろうが手は抜きません。


とりあえず試しに、

<script type="text/javascript" src="JSファイルへのパス" charset="Shift-JIS"></script>

~と言う風にしてみて下さい( charset="Shift-JIS" というのを付け足す)。それで文字化けが直るようなら、貴方のJSファイルの文字コードは「Shift-JIS」と言う事になります。FC2のBlogサービスですか?それでHPやBlogを作っているのなら、基本的には文字コードはサーバ側、つまりこの場合は「EUC-JP」に統一するべき~という事になります。

...続きを読む

QHTMLのリンクをクリックすることで、phpの内部変数の値を変更させるにはどうしたらよいでしょうか?

$_POST,$_GET以外の方法があるのでしょうか?
$_POST,$_GETで可能でしょうか?
複雑なコードを作らなければいけないでしょうか?

Aベストアンサー

要するに、リンクをクリックして、
リクエストパラメータを自由に変更した上でPOST送信できればいいんですよね?

ではこんな感じでHTMLを書いてはどうでしょう。
<form method="post" action="jiro_no_profile.php">
<input type="hidden" name="parameter_jiro">
<a href="JavaScript:funcPutParam();">jiro</a>
</form>

何をやってるかというと、
単にリンクをクリックすることでJavaScriptのファンクションを呼んでいるだけです。

あとは、ファンクションの中身次第なので、
はっきり言って自由です。何でもできます。
一応、中身もちょっとだけ書いておくと
<script language="javascript">
<!--
function funcPutParam(frm){
frm.parameter_jiro.value = "ここで何でも入れられる。";
frm.submit();
}
-->
</script>
ってな感じですかね。
あとはファンクションの中身次第なので、割愛させていただきます。
JavaScriptでできることなら何でもできるから、例を挙げたらキリがない。

個人的にはあまりお勧めしませんが、とにかく簡単にパラメータだけ変更したいというのであれば

<a href="JavaScript:this.form.parameter_jiro.value="jiro";"this.form.submit();>jiro</a>

の一行でも可能です。
これだと後で変更するときに手がかかる上に共通で使うこともできないので微妙ですが。

要するに、リンクをクリックして、
リクエストパラメータを自由に変更した上でPOST送信できればいいんですよね?

ではこんな感じでHTMLを書いてはどうでしょう。
<form method="post" action="jiro_no_profile.php">
<input type="hidden" name="parameter_jiro">
<a href="JavaScript:funcPutParam();">jiro</a>
</form>

何をやってるかというと、
単にリンクをクリックすることでJavaScriptのファンクションを呼んでいるだけです。

あとは、ファンクションの中身次第なので、
はっきり言って自...続きを読む

Qfile_get_contents でリダイレクトを知りたい

file_get_contents(url) で、サイトのHTMLを取り込むことは問題なくでき、そのサイトにリダイレクト(Locationヘッダ?)が設定されていると、ちゃんとリダイレクト先のHTMLを取得することができるのですが、リダイレクトされたことや、リダイレクト先URLは、どのようにすれば知ることができるでしょうか。

得られたHTMLはリダイレクト先の内容なのに、私が作ったプログラムが把握しているURLはリダイレクト元のアドレスなので、不整合が起きてしまい困っています。

ポインタで結構ですので教えていただけると幸いです。

Aベストアンサー

ヘッダ情報が得られないと無理だと思います。
ソケット通信でヘッダ情報を取得すればLocationの場合にはヘッダに
HTTP/1.1 302 Found

Location: http://example.com/
が含まれるので判別できます。

Qポートの80と443

こちらのサービス(https://secure.logmein.com/)を利用すると、インターネットを見られるサーバーのポートの80と443が空いていればルータやファイアウォールに特段の設定なく外部からサーバーを操作できるそうですが、逆にサーバーのポートの80や443を空けることには何か危険性があるのでしょうか。

Aベストアンサー

ポート80は一般的なHTTP、ポート443はHTTPSです。
この2つのポートがあいていなければインターネット接続(WEBブラウジング)は出来ません。
ですから、ほとんどのファイアウォールでこのポートは開いています。(インターネット接続を制限している社内LANでは当然閉じていますが)

ちなみに、よく使うポートとしてはFTPで20、21、SMTP(送信メール)で25、受信メールPOP3で110あたりです。セキュリティポリシー上、この辺は制限される事も多いですが、HTTP 80、HTTPS(暗号化用)443は通常閉じません。


危険性?
WEBプロトコルを使ってFTP的なファイル転送(WebDAV)やVPN等も出来るようになっています。当然そこにはある種の危険はつきものですが、WEBブラウジングに伴う危険と大きく変わりません。ウィルス等に感染していればこの2つのポートだけでも相当危険でしょうね。

参考まで。

Qcount関数の値をwhere句で使用する方法について

宜しくお願い致します。
例えば、下記の様にデータを検索します。

select column1,count(column2) as column2_num
from hoge_table
group by column2_num

すると、検索結果にはcolumn1のそのままの値と、column2の合計数が表示されると思います。
このcolumn2の合計数に対してwhere句で絞込みを行う方法はありませんか?
asで定義した値をそのままwhere句で使用できないとの事なので、

select column1,count(column2) as column2_num
from hoge_table
where count(column2) = '1'
group by column2_num

とやってみたんですが、検索出来ませんでした。
ご存知の方、ご教授の程、宜しくお願いいたします。

Aベストアンサー

グルーピングした値を条件にするにはwhereではなくhavingを使います。以下のようにしてみてください。

select column1,count(column2) as column2_num
from hoge_table
group by column2_num
having count(column2) = 1

QボタンをクリックでPHP文を実行

ボタンをクリックしたときのみPHP文を実行したいのですが・・・

<input type="button" onClink="<?php~?>">
でいけるかと思ったのですが、
ページ表示時に<?php~?>が実行されてしまい、うまくいきませんでした。

onClink="window.open(test.php)"
という方法以外でお願いします。

Aベストアンサー

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、遷移させることが大前提で動作します

ですから、ボタンを押してその場でJavaScriptと同じようにPHPが動くなんてことはありえません。
ボタンを押したらサーバーにリクエストする という動作ならば可能です。

つまり
質問で言われているような
onClink="window.open(test.php)"

<form name="f1" action="test.php" method="post">
<input type="submit" name="submit" value="submit" />
</form>
等のような形になります

こういった一般的な方法だと いちいち画面が切り替わったようになってしまうのを嫌って Ajaxでコレと同じことを、画面を切り替えずに行っているだけに過ぎません

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、...続きを読む


人気Q&Aランキング