PHPについて質問です。

現在メニューをクリックすると検索ページを表示するようにしています。

http://www.aiomock2008.sakura.ne.jp/kaimono_menu.php

メニューをクリックすると上記のページの場合すべてじゃがいもを選択することになるのですが、
これをきちんとしたものを表示させるにはどのようにすればよろしいでしょうか。
大変お手数をおかけしますがスクリプトを見ていただいてわかるかたおりましたらご回答をよろしくお願いいたします。




回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/07/20 22:51:10
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149

ポイント35pt

私の環境では偶然にもメロンをクリックすればメロンに、じゃがいもをクリックすればじゃがいも、さくらんぼはさくらんぼに画面遷移しました

問題は偶然でそうなっているだけで論理的には破綻しています


http://www.aiomock2008.sakura.ne.jp/kaimono_menu.php を開いて、ソースをのぞくとコメントとは違ってすごいことになってます

function a_submit(n) {

document.form1.keyword.value = n; document.form1.submit();

document.form2.keyword.value = n; document.form2.submit();

document.form3.keyword.value = n; document.form3.submit();

document.form4.keyword.value = n; document.form4.submit();

document.form5.keyword.value = n; document.form5.submit();

  途中省略

document.form100.keyword.value = n; document.form100.submit();

クリックするとこれらのsubmitは、ブラウザによっては、サーバとの通信タイムラグや画面遷移に要するタイムラグなどの関係で断ち切られる部分まで順にsubmitを行い、最終的にどれがブラウザにでてくるかは偶然の産物となったりします


すでに以前回答させていただいたようにしていただくことが対策の1つです

http://q.hatena.ne.jp/1279152906 の回答3のコードはフォームが100個に増えようとも1つのスクリプトで対応できるようにしてありますので、再度読み直して実装しなおしてみてください

id:aiomock

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

2010/07/20 22:08:51

その他の回答1件)

id:ko8820 No.1

回答回数1221ベストアンサー獲得回数69

ポイント35pt

if(document.form1.keyword.value == n) document.form1.submit();

if(document.form2.keyword.value == n) document.form2.submit();

とif文を羅列してください。

id:aiomock

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

2010/07/20 22:08:43
id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149ここでベストアンサー

ポイント35pt

私の環境では偶然にもメロンをクリックすればメロンに、じゃがいもをクリックすればじゃがいも、さくらんぼはさくらんぼに画面遷移しました

問題は偶然でそうなっているだけで論理的には破綻しています


http://www.aiomock2008.sakura.ne.jp/kaimono_menu.php を開いて、ソースをのぞくとコメントとは違ってすごいことになってます

function a_submit(n) {

document.form1.keyword.value = n; document.form1.submit();

document.form2.keyword.value = n; document.form2.submit();

document.form3.keyword.value = n; document.form3.submit();

document.form4.keyword.value = n; document.form4.submit();

document.form5.keyword.value = n; document.form5.submit();

  途中省略

document.form100.keyword.value = n; document.form100.submit();

クリックするとこれらのsubmitは、ブラウザによっては、サーバとの通信タイムラグや画面遷移に要するタイムラグなどの関係で断ち切られる部分まで順にsubmitを行い、最終的にどれがブラウザにでてくるかは偶然の産物となったりします


すでに以前回答させていただいたようにしていただくことが対策の1つです

http://q.hatena.ne.jp/1279152906 の回答3のコードはフォームが100個に増えようとも1つのスクリプトで対応できるようにしてありますので、再度読み直して実装しなおしてみてください

id:aiomock

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

2010/07/20 22:08:51
  • id:aiomock
    以下スクリプトになります。

    <html>
    <head>

    <script type="text/javascript">
    <!--
    function a_submit(n) {
    document.form1.keyword.value = n; document.form1.submit();
    document.form2.keyword.value = n; document.form2.submit();
    document.form3.keyword.value = n; document.form3.submit();
    document.form4.keyword.value = n; document.form4.submit();
    document.form5.keyword.value = n; document.form5.submit();
    document.form6.keyword.value = n; document.form6.submit();
    document.form7.keyword.value = n; document.form7.submit();
    document.form8.keyword.value = n; document.form8.submit();
    document.form9.keyword.value = n; document.form9.submit();
    document.form10.keyword.value = n; document.form10.submit();

    }
    //-->
    </script>

    </head>
    <body>

    <?


    require "database_connect.php";

    echo "<center>■ お勧めセット ■<br><Br>";

    $sql=mysql_query(" SELECT * FROM `KAIMONO` WHERE SYURUI = 'セット' ORDER BY `BANGOU` DESC ; ");

    while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) {



    echo "
    <a href=\"javascript:void(0)\" onclick=\"a_submit('".$row["NAME"]."'); return false;\" >".$row["NAME"]."</a><br><br>

    <form name=\"form".$row["BANGOU"]."\" action=\"kaimono_kensaku.php\" method=\"POST\" style=\"display:none\" target=\"_parent\">
    <input type=\"text\" name=\"keyword\" size=\"30\"><input type=\"submit\" value=\"送信\" />
    </form>";



    }




    echo "◆◇◆ 野菜 ◆◇◆<br><Br>";

    $sql=mysql_query(" SELECT * FROM `KAIMONO` WHERE SYURUI= '野菜' ORDER BY `BANGOU` DESC ; ");


    while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) {

    echo "
    <a href=\"javascript:void(0)\" onclick=\"a_submit('".$row["NAME"]."'); return false;\" >".$row["NAME"]."</a><br><br>

    <form name=\"form".$row["BANGOU"]."\" action=\"kaimono_kensaku.php\" method=\"POST\" style=\"display:none\" target=\"_parent\">
    <input type=\"text\" name=\"keyword\" size=\"30\"><input type=\"submit\" value=\"送信\" />
    </form>";



    }



    echo "◆◇◆ 果物 ◆◇◆<br><Br>";

    $sql=mysql_query(" SELECT * FROM `KAIMONO` WHERE SYURUI='果物' ORDER BY `BANGOU` DESC ; ");

    while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) {

    echo "
    <a href=\"javascript:void(0)\" onclick=\"a_submit('".$row["NAME"]."'); return false;\" >".$row["NAME"]."</a><br><br>

    <form name=\"form".$row["BANGOU"]."\" action=\"kaimono_kensaku.php\" method=\"POST\" style=\"display:none\" target=\"_parent\">
    <input type=\"text\" name=\"keyword\" size=\"30\"><input type=\"submit\" value=\"送信\" />
    </form>";


    }



    echo "◆◇◆ その他 ◆◇◆<br><Br>";

    $sql=mysql_query(" SELECT * FROM `KAIMONO` WHERE SYURUI = 'その他' ORDER BY `BANGOU` DESC ; ");


    while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) {

    echo "
    <a href=\"javascript:void(0)\" onclick=\"a_submit('".$row["NAME"]."'); return false;\" >".$row["NAME"]."</a><br><br>

    <form name=\"form".$row["BANGOU"]."\" action=\"kaimono_kensaku.php\" method=\"POST\" style=\"display:none\" target=\"_parent\">
    <input type=\"text\" name=\"keyword\" size=\"30\"><input type=\"submit\" value=\"送信\" />
    </form>";


    }






    ?>

    </body></html>
  • id:aiomock
    表示させる側のスクリプトです。


    <?php

    if(isset($_POST["keyword"]))
    {

    function order() {
    require "database_connect.php";

    $sql=mysql_query(" SELECT * from KAIMONO WHERE TITLE Like '%".$_POST["keyword"]."%' ; ");

    while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) {

    echo '<table border="1" bordercolor="gray" cellpadding="4"
    cellspacing="0" width="600">
    <tbody>';


    /**/
    echo '<tr>

    <FORM method="POST" action="kaimono_kakunin.php">

    <td colspan="3" rowspan="1" align="center"
    bgcolor="#99c001"><font color="white"><b>
    <input type="hidden" name="kanri_no" value="'.$row["BANGOU"].'">'.$row["TITLE"].'</b></font><br>
    </td>
    </tr>
    <tr>
    <td colspan="1" rowspan="4" align="center"
    valign="center" width="200"><img src="http://www.aiomock2008.sakura.ne.jp/PICTURE/'.$row["SYURUI"].'/'.$row["BANGOU"].'.jpg"><br>
    </td>
    <td colspan="2" rowspan="1" valign="top">'.$row["SETUMEI"].'<br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    </td>
    </tr>
    <tr>
    <td><b>値段:<big><font color="red" size="+2"><big>'.$row["NEDAN"].'</big></font></big>
    円</b><br>
    </td>
    <td colspan="1" rowspan="3" align="center"
    valign="center">

    <INPUT TYPE="image" SRC="cart1.jpg" name="submit">


    <br>
    </td>
    </tr>
    <tr>
    <td><b>在庫数:<big>'.$row["KOSUU"].'</big> 個</b><br>
    </td>
    </tr>
    <tr>
    <td><b>購入数:<select name="kosuu"></b>';


    if($row["KOSUU"]>0)
    {

    for ($i = 0; $i <= $row["KOSUU"]; $i++) {

    echo '<option>'.$i.'</option>';
    }

    }
    else { echo '<option>-</option>'; }

    echo '</select>
    </td>
    </tr>
    </tbody>
    </table></form><br><Br>';

    }}order(); }
    ?>
  • id:rouge_2008
    動作確認に使用しているブラウザは何ですか?
    現時点で、IE7とFirefox3.5では正常に動作しているようですが・・・
  • id:aiomock
    firefox 3.0 を使用しております。。
  • id:aiomock
    ブラウザを変更後正常に動作しました。
    何が原因だったかはわかりませんがありがとうございます。
  • id:windofjuly
    うぃんど 2010/07/20 23:24:57
    >ブラウザを変更後正常に動作しました。

    キャッシュが生きていた可能性がありそうです
    カートシステムに限りませんがブラウザにキャッシュを持たせないようにする仕組みを組み込んでおかなければなりません
    (1つしか注文していないはずなのに2つ発注されていたなんてことになってしまう場合などの問題に繋がります)


    私の回答には間違いがありました
    >順にsubmitを行い
    一番最初のsubmitでページ遷移が実行されることになるため10個や100個並べて書いてあっても使われるのは常に1番目に記載されている document.form1.keyword.value = n; document.form1.submit(); が使われます
    document.form2.keyword.value 以降を消し去って実験してみればわかります
    今回はform1、form2、form3のいずれも全てactionがkaimono_kensaku.phpでありパラメータも全て同一であるため偶然動いているという事には違いありませんので訂正はしておいたほうがよいでしょう

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

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

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

回答リクエストを送信したユーザーはいません