電子書籍の厳選無料作品が豊富!

FC4、php5とmysql4.1.20を入れて学習しています。

入力フォームに
<form action="insert.php?mode=insert" method="POST"......と書き、

データ受取phpスクリプトに
<?
if($mode == "insert"){
$conn = mysql_connect("localhost","root","pass");
mysql_select_db("testDB","$conn");
$sql = "INSERT INTO SHOHIN (tanka,suu) values ('$tanka','$suu')";
...........
と書いたサンプルがあります。

ところが、入力フォームにデータをいれ、登録ボタンを押すと
urlが、
http://localhost/***/insert.phpから
http://localhost/***/insert.php?mode=insert に変わりますが、入力欄が白紙に戻ってデータ登録が出来ません。(そもそも、DBに接続が出来ません。)
php.iniの register_globals = On にしても、状況は同じです。

コマンドライン上では、同じユーザ名パスワードでmysqlに順調に接続できデータ登録も出来ます。
試みに、php.iniの register_globals = Offで
if($mode == "insert"){ を、if($_POST['$mode == insert']){ と変えてみましたが、解決出来ません。この書き方が拙いのでしょうか?
何かアドバイスを頂ければ有り難いです。よろしくお願いします。

A 回答 (3件)

>しかし、この if($_GET['mode'] == 'insert']){ という書き方自体が、


>あまり一般的ではなさそうなので、これ以上、深追いしないことにします。

返信ドモです。
何が一般的かどうかは書籍によって違うので、あまり鵜呑みにしない方が良いかもしれません。PHPは人によって会社によって組み方が全く違いますので・・。大事なのは柔軟な思考かもしれません。

>参考書にGET、POSTの違いが、チラリと書いてあるだけなので、
至極簡単に言うとURLにくっつけて送信するのがGET。フォームで送信するのがPOSTです。

使い分けのポイントとしては、Aタグで次ページにリンクする際に、ちょっとしたパラメータを渡したいって際にはGETを使います。
ちょっと語弊があるかもしれませんが、お手軽なのがGETって覚えておくと宜しいかと。
ただし日本語をやり取りする際にはエンコードしなければならないので逆に面倒ですし、URLにくっつけて送信するのでPASSワードのような機密性のあるデータの送信には向きません。

一方POSTは基本的にFORMタグが無ければ使えませんので(例外的にPEARを使うとフォーム無しでもPOSTできます)GETよりはお膳立てが若干面倒です。
ですが、送信しなければならないパラメータ量が多い場合や日本語もそのまま送信できますし、写真などのファイルも送信できます。
要するに大量データの送信に向いてると思えば宜しいかと。

他、セッションってのもありますが、これはまた別の機会で。
    • good
    • 0
この回答へのお礼

具体的に説明頂き、GET、POSTに対するイメージが少し膨らんできました。このコメントをコピーして本に貼り付けておき、今後の参考にしたいと思います。本当に有難うございました。

お礼日時:2007/01/07 20:29

<form action="insert.php?mode=insert" method="POST">


メソッドがPOSTでもURLのquery stringで送った値は$_GET変数に入ります。

>$sql = "INSERT INTO SHOHIN (tanka,suu) values ('$tanka','$suu')";
この部分も多分
$tanka = $_POST['tanka']; $suu= $_POST['suu'];
が必要な気がします。

>php.iniの register_globals = On にしても、状況は同じです。
これは変ですねApacheの再起動をしてないのでは
そのサンプルを動かすのならOnにしたほうが面倒はないですができればregister_globals = Offに対応したサンプルのほうがいいと思います。
    • good
    • 0
この回答へのお礼

php504様
大変良く解りました。
>メソッドがPOSTでもURLのquery stringで送った値は$_GET変数に入ります。
そういうことか! と参考書に書いてあることが納得です。

>>php.iniの register_globals = On にしても、状況は同じです。
>これは変ですねApacheの再起動をしてないのでは
とありましたので、 register_globals = On にして、
httpd restartをして試してみましたが、DBに接続できませんでした。
ご指摘の通り
$sql = "INSERT INTO SHOHIN (tanka,suu) values ('$tanka','$suu')";
文の変数も、$_POST($_GET?)で受取るようにする必要があるのかも知れません。
しかし、if($_GET['mode'] == 'insert']){ という書き方が、
あまり一般的ではないような気がしますので、素直に
if($conn==FALSE){  という書き方に変更して行こうと思います。
お蔭様で、大変、勉強になりました。有難うございました。

お礼日時:2007/01/06 18:11

> <form action="insert.php?mode=insert" method="POST"......と書き、



とあるので

> if($_POST['$mode == insert']){
ではなく(注:セミコロンの付け方が間違ってますよ)

if($_GET['mode'] == 'insert']){

が正解では?
    • good
    • 0
この回答へのお礼

foreeach様
当初、
>if($_GET['mode'] == 'insert']){
>が正解では?
の意味が良く解りませんでしたが、Ano2でフォローを頂きましたので理解できました。
$_GETでやると、うまくDBに繋がりました。なるほど!といった感じです。
しかし、データの登録は、まだできていません。
$sql = "INSERT INTO SHOHIN (tanka,suu) values ('$tanka','$suu')";
の文をもう少し変える必要があるのかも知れません。
しかし、この if($_GET['mode'] == 'insert']){ という書き方自体が、
あまり一般的ではなさそうなので、これ以上、深追いしないことにします。
参考書にGET、POSTの違いが、チラリと書いてあるだけなので、
つい読みすごしていましたが、お蔭様で確認することができました。有難うございました。

お礼日時:2007/01/06 18:09

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