0

2つのPHPページがあります...

このコードを使用したINDEX.PHP

<form method="post" action="" name="f1">
<input type="text" name='p_name' size='50'><br> 
<input type="text" name='p_name2' size='50'><br>
<a href="javascript:void(0);" NAME="My Window Name" title=" My title here " onClick=window.open("index2.php","Ratting","width=550,height=170,left=150,top=200,toolbar=1,status=1,");>Click here to open the child window</a> 
</form>

およびINDEX2.PHP とこのavascriptコード:

<script langauge="javascript">
function post_value()
{
    opener.document.f1.p_name.value = document.frm.c_name.value;
    opener.document.f1.p_name2.value = document.frm.c_name2.value;
    self.close();
}
</script>

そしてこのPHP/HTML:

<form name="frm" method="post" action="">
<?php
$sql="SELECT * from customer";
$rs=mysql_query($sql,$conn) or die(mysql_error());
while($result=mysql_fetch_array($rs))
{
    echo '<input type="text" name="c_name" size="50" value="'.$result["sequence"].'" /><br>
    <input type="text" name="c_name2" size="50" value="'.$result["company"].'" /><br>
    <input type=button value=\'Submit\' onclick=\'post_value();\'><br><br>';
}
?>
</form>

基本的に、index.phpにアクセスすると、リンクをクリックしてポップアップウィンドウindex2.phpが開き、データベースから顧客が一覧表示され、それぞれに2つのテキストボックスが表示されます。1つは顧客のシーケンス/ ID用で、もう1つは会社名と行ごとに1つの送信ボタン。

ボタンが押されるとpost_value();、データベース/子ポップアップウィンドウ(index2.php)の値を親ウィンドウ(index.php)のテキストボックスに配置するjavascript関数が実行されます。

このコードを実行すると、親ページのボックスボックスにundefinedという単語が表示されますが、phpでwhileループを削除すると、顧客のデータベースから1行だけが表示されます。

PHPのwhileループは好きではありませんが、理由はわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

1

編集-whileループが次のようなものを生成することに気づきました:

<input type="text" name="c_name" size="50" value="A1" /><br>
<input type="text" name="c_name2" size="50" value="B1" /><br>
<input type=button value=\'Submit\' onclick=\'post_value();\'><br><br>

<input type="text" name="c_name" size="50" value="A2" /><br>
<input type="text" name="c_name2" size="50" value="B2" /><br>
<input type=button value=\'Submit\' onclick=\'post_value();\'><br><br>

<input type="text" name="c_name" size="50" value="A3" /><br>
<input type="text" name="c_name2" size="50" value="B3" /><br>
<input type=button value=\'Submit\' onclick=\'post_value();\'><br><br>

同じフォーム内に「c_name」と「c_name2」という名前の複数の要素があるため、これは機能しません。あなたがやりたいのは、次のようにフォーム要素をwhileループ内に配置することだと思います。

<?php
    $sql="SELECT * from customer";
    $rs=mysql_query($sql,$conn) or die(mysql_error());
    $ctr = 0;
    while($result=mysql_fetch_array($rs))
    {
        echo '<form name="frm' . $ctr . '" method="post" action="">
        <input type="text" name="c_name" size="50" value="'.$result["sequence"].'" /><br>
        <input type="text" name="c_name2" size="50" value="'.$result["company"].'" /><br>
        <input type=button value=\'Submit\' onclick=\'post_value(' . $ctr . ');\'><br><br>' 
        </form>';
        $ctr++;
    }
?>

各フォームを識別できるように$ctr変数を作成した方法と、それがpost_valueに渡される方法に注目してください。次のような正しいフォームを取得するには、これを使用する必要があります。

<script langauge="javascript">
function post_value(ctr)
{
    opener.document.f1.p_name.value = document.forms["frm" + ctr].c_name.value;
    opener.document.f1.p_name2.value = document.forms["frm" + ctr].c_name2.value;
    self.close();
}
</script>

デフォルトでは、mysql_fetch_arrayは数値キー(つまり、0、1、2など)を含む配列を返します。列名でレコードを取得する場合は、次を使用する必要があります。

while ($result = mysql_fetch_array($rs, MYSQL_ASSOC))

ここで例3を見てください:

http://php.net/manual/en/function.mysql-fetch-array.php

于 2013-03-05T13:29:03.400 に答える