phpとmysqlをお解りの方、教えて頂けませんか?

一応、”登録できました。”と表示されるのですが、データベースを見てみると8
項目全て空白の登録になってしまいました。WORDPRESSを使っているからおかしいのでしょうか?しかも、SUBMITをクリックでは上手くいかず、form.phpかresult.phpの前に用意しているresultをクリックすると”登録できました。”と表示されて、空白が登録されるのです。
例ではカラムを2つにしています。
<!---ここからresult.php->
<a href="<?php bloginfo('url'); ?>"/result>result</a>
<?php
$name=mysql_real_escape_string($_POST['name']);
$home_page=mysql_real_escape_string($_POST['home_page']);
$conn = mysql_connect("XXX","XXX","XXX");
mysql_select_db(XXX,$conn);
$sql="INSERT INTO uekiyahan(company_name,,home_page) VALUES('$name' ,'$home_page')";
mysql_query($sql,$conn) ;print("登録しました。");mysql_close($conn);
?>
<!---ここからform.php->
<a href="<?php bloginfo('url'); ?>"/result>result</a>
<form action="/result" method="post" >
<ul>
<li>会社名</li><li><input type="text" name="name" value=""</li>
<li>ホームページアドレス</li><li><input type="text" name="home_page" value=""></li>
<li><input type="submit" value="申し込んじゃうよー!"></li>
</ul>
</form>

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/08/17 16:15:39
  • 終了:2011/08/20 13:34:46

ベストアンサー

id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492011/08/17 19:06:24

mysql_query($sql,$conn);print("登録しました。");mysql_close($conn);

上記では”MySQL側でのSQL実行が失敗してもphpの動作には影響しない”ため、

mysql_queryの成功/失敗のいずれでも続きの処理(print以降)が実行されてしまいます

 

対策としては、例えば下記のような具合にしてmysql_queryが失敗(結果がFALSE)した場合はphpの動作を強制終了するなどの処理を書いておくことで行います

mysql_query($sql,$conn) or die('失敗しました' . mysql_error());
print("登録しました。");
mysql_close($conn);

個人で使うならば前述の方法でも十分だったりしますが、多数の人に利用してもらうつもりであれば(もう少し丁寧に)正常時とエラー時の処理を分けるなどをすることになるでしょう

if (mysql_query($sql,$conn)) {
    print '登録しました';
} else {
    print '失敗しました' . mysql_error();
}
mysql_close($conn);

 

返信への追記

>変更してみましたが、主な問題点は改善されませんでした。(泣)

こちらが出せるのはヒントだけです

真にミスしてる点は自分で探してもらうしかないです

もう少しだけ詳しく書いておきますので再度チャレンジしてみてください

 

エラー処理を加えてもなお「登録しました」になる場合はmysql_queryの直前にprint($sql)を書き加えて$sqlが思い通りのSQL文になっているかを確認してみましょう

 

SQLに抜けている箇所がある場合($nameや$home_pageなどの変数が空っぽなど)には、$sql=の式そのものを見直したり、$nameなどに値を入れている箇所(mysql_real_escape_string($_POST['name']);など)を見直したりしてみましょう

ここでもまたprint($_POST['name'])などを入れてみて、値を正しく受け取れているかを確認してみると良いでしょう

 

値を正しく受け取れていない場合には$_POST['name']で良いのか? パラメータ名はnameで良いのか? などという具合に思い違いや間違いが無いかを順に辿っていきましょう

 

では、がんばって

id:mi-kun6520

変更してみましたが、主な問題点は改善されませんでした。(泣)

2011/08/17 19:29:40

その他の回答(1件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982011/08/17 16:22:40

company_name,,home_page

これだと 項目3つになっちゃう。


入れる側が

'$name' ,'$home_page'

で ずれちゃいますね。



あと 項目の型とか桁数とかは 大丈夫なのかな?

id:mi-kun6520

すいません、項目は文字数が多かったので消し忘れです。両方ともに8項目ずつです。型はvarchar型です。桁数は一番少ない項目でvarchar(10)で、長くて”九州・沖縄”とかです。

2011/08/17 17:49:36
id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492011/08/17 19:06:24ここでベストアンサー

mysql_query($sql,$conn);print("登録しました。");mysql_close($conn);

上記では”MySQL側でのSQL実行が失敗してもphpの動作には影響しない”ため、

mysql_queryの成功/失敗のいずれでも続きの処理(print以降)が実行されてしまいます

 

対策としては、例えば下記のような具合にしてmysql_queryが失敗(結果がFALSE)した場合はphpの動作を強制終了するなどの処理を書いておくことで行います

mysql_query($sql,$conn) or die('失敗しました' . mysql_error());
print("登録しました。");
mysql_close($conn);

個人で使うならば前述の方法でも十分だったりしますが、多数の人に利用してもらうつもりであれば(もう少し丁寧に)正常時とエラー時の処理を分けるなどをすることになるでしょう

if (mysql_query($sql,$conn)) {
    print '登録しました';
} else {
    print '失敗しました' . mysql_error();
}
mysql_close($conn);

 

返信への追記

>変更してみましたが、主な問題点は改善されませんでした。(泣)

こちらが出せるのはヒントだけです

真にミスしてる点は自分で探してもらうしかないです

もう少しだけ詳しく書いておきますので再度チャレンジしてみてください

 

エラー処理を加えてもなお「登録しました」になる場合はmysql_queryの直前にprint($sql)を書き加えて$sqlが思い通りのSQL文になっているかを確認してみましょう

 

SQLに抜けている箇所がある場合($nameや$home_pageなどの変数が空っぽなど)には、$sql=の式そのものを見直したり、$nameなどに値を入れている箇所(mysql_real_escape_string($_POST['name']);など)を見直したりしてみましょう

ここでもまたprint($_POST['name'])などを入れてみて、値を正しく受け取れているかを確認してみると良いでしょう

 

値を正しく受け取れていない場合には$_POST['name']で良いのか? パラメータ名はnameで良いのか? などという具合に思い違いや間違いが無いかを順に辿っていきましょう

 

では、がんばって

id:mi-kun6520

変更してみましたが、主な問題点は改善されませんでした。(泣)

2011/08/17 19:29:40
  • id:ken3memo
    php素人のコメントなので、外していたらすみません。
    <!---ここからform.php->
    <a href="<?php bloginfo('url'); ?>"/result>result</a>
    ↑だと、
    >>form.phpかresult.phpの前に用意しているresultをクリックすると”登録できました。”と表示されて、空白が登録されるのです。<<
    何も渡していないので(単なるリンクで起動だけなので、値が渡らなくて、空白が表示されるのでは?)

    >>しかも、SUBMITをクリックでは上手くいかず、
    <form action="/result" method="post" >
    ↑ここの、action="/result" が すごく気になるのですが、/resultが見つけられないとか? phpのプロの方々、どうでしょうか?(って、誰に問いかけてるんだよ・・・)
  • id:mi-kun6520
    コメントありがとうございます。
    action="<?php bloginfo('url'); ?>"/result
    にしても結果かわらずです。なぜ、submitでとんだ先が記述もしていないindexが表示されるのでしょうか?
  • id:windofjuly
    うぃんど 2011/08/17 21:14:27
    id:ken3memo さん(コメント欄からIDコールは飛ばない?)
    >action="/result" が すごく気になる
     
    質問者本人も気づいたらしく別質問にしていますね
    http://q.hatena.ne.jp/1313579883
     
    問題解決方法としては、この上の回答欄にも書きましたがprintで出力して確認するのが先決です
    そうすればbloginfo('url')が何を返しているのか(思い通りのものを得られているのか)が判るはずなのですが、、、
  • id:mi-kun6520
    printで出力すると、postで何も受け取っていないようです。
    これは、submitでアドレスはちゃんと移るのだけども、表示はindexのようになる現象を一度はさむからpostで渡せていないのでしょうか?
    しかし、どうやってもsubmitで指定したアドレスの表示にならずindexのような表示になってしまうのです。他のページはpostで受け取ってデータベースから拾いだしてちゃんと表示しているのに・・・。なぜ、このページだけ上手く表示すらできないのでしょうか?
    indexから飛ばしていないからなのでしょうか?
  • id:ken3memo
    action="<?php bloginfo('url'); ?>/result"
    *↑actionの""の中にresultがないといけないような?
    or
    action="result"
    *↑頭の/無し だと、どうでしょうか?
    あとは、
    >他のページはpostで受け取ってデータベースから拾いだしてちゃんと表示しているのに・・
    なので、何かささいな違いだと思いますが。(で、/のあり無し、"の位置を疑ってみました)
  • id:mi-kun6520
    すいません、
    <a href="<?php bloginfo('url'); ?>"/result>result</a>
    は、投稿の際の記述ミスです。下の4パターンでやってみましたが、上手く飛ばず、
    <a href="<?php bloginfo('url') ?>/result">result</a>wをクリックすると、空の登録といった同じ状況です。
    <form method="post" action="/result">
    <form method="post" action="/result">
    <form method="post" action="<?php bloginfo('url') ?>/result">
    <form method="post" action="<?php bloginfo('url') ?>result">
    <?php bloginfo('url') ?>は、サイトのurlを返しているのであっているとおもうのですが・・・。
  • id:mi-kun6520
    解決致しました!!何故か、<form>のnameをname="name"ではなくname="namae"という風にname以外にしたら一気に全て解消されました!!
    こんなしょうもない事に3日も費やして頭がおかしくなりそうです。
    name="name"ってしてはいけないって事あるんですか?
  • id:mi-kun6520
    解決致しました!!何故か、<form>のnameをname="name"ではなくname="namae"という風にname以外にしたら一気に全て解消されました!!
    こんなしょうもない事に3日も費やして頭がおかしくなりそうです。
    name="name"ってしてはいけないって事あるんですか?
  • id:windofjuly
    うぃんど 2011/08/18 11:19:29
    >name="name"ってしてはいけないって事あるんですか?
     
    WordPressのディレクトリ内は.htaccessによって必ずWordPressのプログラムを経由するため、WordPressが用いているものと被るとダメです(そのためにindexページが表示されたりしていたという事)
     
    内部でどのようなパラメータを用いているかをいちいち調べても良いですが、WordPressのバージョンが変わって増えたりしてもまた面倒ですから、例えばr_nameやr_home_pageといったような感じでパラメータ名に少し手を加えておくと楽だと思います
     
    後出しでごめんなさい
  • id:mi-kun6520
    そうですよね。長い間ありがとうございます。こんなことでこんなに苦労するんですね・・・。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません