女子の「頭皮」のお悩み解決の選択肢とは?

教えてください。

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

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

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

A 回答 (4件)

多分できないです。


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

AJAXのかたちにして、ページ遷移を見えなくするというのが手っ取り早いかも。
    • good
    • 1
この回答へのお礼

ご回答、ありがとうございます。

セッションを使えば、解決できそうです!!

すでに、ログイン管理でセッションを使っていますので、
そこに、変数を追加することにしました。

お礼日時:2006/07/27 07:59

リダイレクトとは少し違いますが・・・。


php_curlが使えるなら、こんな感じではどうでしょうか?
指定のURLにPOSTデータを送信して結果を受け取るというものですが。POSTでリダイレクトというのはまずいので、必要なときはこんな感じにしたりしてます。

<?php
// POSTするデータ
$post["a"] = "abc";
$post["b"] = "xyz";

$chost = curl_init();
curl_setopt($chost, CURLOPT_URL, "http://サーバ/hogehoge.php");
curl_setopt($chost, CURLOPT_POST, true);
curl_setopt($chost, CURLOPT_POSTFIELDS, $post);
curl_setopt($chost, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($chost);
curl_close($chost);

echo $result; // POST送信先から送り返されてくる内容
?>

この回答への補足

ありがとうございます。
php_curというものを初めて目にしました。

早速試してみたのですが、
curl_setopt
のところでエラーが出てきてしまいます。

>php_curlが使えるなら、
とのことですが、設定によってはphp_curが使えないことがあるのでしょうか?

また、すでにログイン管理にsessionを使用しているのですが、sessionとphp_curとは同時に使って問題ないのでしょうか?

変な質問かもしれませんが、よろしくお願いいたします。

補足日時:2006/07/26 17:24
    • good
    • 0
この回答へのお礼

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


少し考えた結果、単純に、セッションで対応できそうです。


いろいろ、お聞きして申し訳ございませんでした。

お礼日時:2006/07/27 08:07

同じサーバ内のページにリダイレクトするのならリダイレクトではなくてそのままページのphpファイルをincludeしたほうが早いです。



header("Location: "a.php");
ではなくて
include "a.php";
とします。
これなら変数もそのまま引き継げます。
    • good
    • 0
この回答へのお礼

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

私の説明不足で申し訳なかったのですが、
今回は、データベースの2重登録を避けるため、
データベースに登録してから、別ページにリダイレクトしたかったので、インクルードでは目的が果たせなさそうです。

今後とも、よろしくお願いします。

お礼日時:2006/07/27 08:04

僕は文章読解力がないため


言っていることが正しく解釈で来ているか自信なしです。

http://www.studyinghttp.net/status_code#Redirect …

http://ppewww.ph.gla.ac.uk/~flavell/www/post-red …

後者のページによると(実装はともかく)仕様ではPOSTのリダイレクトは

301→GETを送るべき
302→POSTを送るべき
303→GETを送るべき
307→POSTを送るべき

なようです。識者大募集。

読んでませんがRFC2616
http://www.ietf.org/rfc/rfc2616.txt
    • good
    • 0
この回答へのお礼

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

私の説明が足りなかったようで、申し訳ございません。

リンク先を拝見させていただきましたが、
私には、レベルが高い&英語は。。。でした。

今回は、セッションを使うことで解決できそうです。

また、よろしくお願いいたします。

お礼日時:2006/07/27 07:57

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

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";
}
にすればいいのではないでしょうか

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います

Qセッションを使わずに遷移先画面に変数の値を渡すには?

<input type="hidden" value="myID">みたいな隠しフォームで
行く先々の画面に値をPOSTで渡してきました。

他方、 header("Location: mypage.php")
のように画面を遷移させる場合、遷移先の画面に
$_POST["myID"]のように値を渡すことはできませんか?

この場合session_start();を使って、$_SESSION["myID"]のように値を
渡す(保持する)のが王道なのでしょうか?
セッションと聞くと何かとトラブルになりやすそうなイメージがあり、
できれば使いたくないのです。

具体的に説明しますと、前にこの掲示板で教えていただいた、次の例を使っています。
入力文字チェックをかけたいのでPHP_SELFで同じ画面を呼び出して、
問題なければmypage.phpにリダイレクトさせる枠組みですが、
header("Location: mypage.php");という風に遷移した場合は、
遷移先のmypage.phpでは、$_POST["myID"]はPOSTされてきませんよね
(値を受け取れませんよね)??

妙案あればご教示下さい。


<?php
if ($_POST["reg"] == "" ) $errFlg = true;
if (!$errFlg) {
    if (strlen($_POST["myName"]) > 30) {
      $errFlg = true;
      $errStr["myName"] = "30字以下";
    }
  $errMsg = "エラー!!";
}
if ($errFlg) {
?>
<html>
  <body>
    <form method="post" action="<?php $_SERVER["PHP_SELF"] ?>">
      氏名 <input type="text" name="myName" value="<?= $_POST["myName"] ?>"><?= $errStr["myName"] ?>
      <input type="hidden" name="myID" value="<?= $_POST["myID"] ?>">
    </form>
    <input type="submit" name="reg" value="登録">
  </body>
</html>
<?php
} else {
    $sql = "update mytable set myID = 'xxxx'";
    $rst = mysql_query($sql, $con);
    header("Location: mypage.php");
}
?>

<input type="hidden" value="myID">みたいな隠しフォームで
行く先々の画面に値をPOSTで渡してきました。

他方、 header("Location: mypage.php")
のように画面を遷移させる場合、遷移先の画面に
$_POST["myID"]のように値を渡すことはできませんか?

この場合session_start();を使って、$_SESSION["myID"]のように値を
渡す(保持する)のが王道なのでしょうか?
セッションと聞くと何かとトラブルになりやすそうなイメージがあり、
できれば使いたくないのです。

具体的に説明しますと、前にこ...続きを読む

Aベストアンサー

結局「sessionの真似事」を自前でするようなことになりそうです。

・ランダムなファイル名を作成して、そのファイルにアドレスを書き込む。
・GETでファイル名を渡す。
・ファイル名を元にそのファイルからアドレスを取り出す。
・ファイルを削除する

何らかのトラブルで残ってしまったファイルは「一定時間以上経過したファイルは定期的に削除」というGCの真似事までしないといけなくなりますけど。

hidden(POST)で持ち回るということからも「セキュリティ」はまったく考慮しなくていいシステムのようなので、そうであれば「復号可能な暗号化」という手もありかもしれません。



>セッションと聞くと何かとトラブルになりやすそうなイメージがあり、
>できれば使いたくないのです。

普通に使いますけどねぇ・・。

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:~)で$_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配列をPOSTで受けとる

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j]"];
   print"$foo[$j]";
}
?>


こんな感じのことがしたいのですが
うまくいきません
どうもPOSTされてないみたいでfoo[$j]はnullです
凡ミスな気がしなくもないんですが...プログラム初心者なんで↓↓
教えてください
よろしくお願いします

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j...続きを読む

Aベストアンサー

atsuGTさんこんにちは。


受け取り側は

$foo = $_POST["foo"];

とするだけで$fooに送信された配列が格納されます。


$_POST["foo[添え字]"] ではなく、
$_POST["foo"][添え字] となります。

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リンクでPOSTデータを送信することは可能ですか?

はじめまして。
Submitボタンを使用せずに<A>リンクでFORMのPOSTメソッドデータを送信することは可能でしょうか?
やはりURLにデータを付加して送信するしかないのでしょうか?
ご教授よろしくお願い致します。

Aベストアンサー

javascript を使えば可能です。大雑把にはこんな感じ。

・パラメータが全部 hidden な form を記述しておく(ブラウザでは表示されない)
・<a href> では、その form を submit するように javascript を記述する

試してないですけど、こんな感じ。

<form name=f method=POST action="http://どこか">
<input type=hidden name=x1 value=v1>
</form>

<a href="javascript:document.f.submit()">リンクから submit</a>

Q文字列から、特定の文字を削除したい

アンケートで入力された値を受け取り、メールで送信しているのですが、受け取った値から、特定の文字列を削除することは可能でしょうか?

例えば電話番号の入力の場合、
03-xxxx-xxxx →03xxxxxxxx
077-xxx-xxxx →077xxxxxxx
のように、-(ハイフン)が入力されていたら、-を削除した文字列に置換してメール送信したいのです。
入力する時に、3つのテキストエリアに分けるのは諸事情でできないので、特定の文字を削除する関数か処理方法がありましたら、教えていただきたいです。
よろしくお願いします。

Aベストアンサー

str_replace
http://itbtech.itboost.co.jp/man/php_man/function.str-replace.html

<?php
$orig_telno = "03-xxxx-xxxx";

$telno = str_replace("-", "", $orig_telno);
echo $telno;

03xxxxxxxx

“PHP 文字列” あたりをキーワードに検索すれば
そんなに難しいものでもないような。

Qforeachで回った数を表示したい

単純な質問ですみません。
====
//getTestlistは別ファイルで定義済み。
<?
$testlist=getTestlist();
foreach($testlist as $test){
?>


<? } ?>
====
例えば↑こんなふうにforeachで$testlistが存在するだけ回したとします。
そのときに何回まわったか?($testが何件あったか?)だけを表示したいのですが、そんなことってできますか?
表示したい位置は<? } ?>の外側にと考えています。
あさってな質問でしたらすみません。
phpVer 4.3

よろしくお願いいたします。

Aベストアンサー

<?
$testlist=getTestlist();
$n=0;
foreach($testlist as $test){
$n++;
?>
<?}?>

<?=$n?>回
とかでよいかと思います。

途中でbreakなどが無ければ
<? echo count($testlist) ?>でも良いかも知れません。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報