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>

和带有此avascript 代码的 INDEX2.PHP:

<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 个文本框 - 一个用于客户的序列/ID,另一个用于为公司名称和每行一个提交按钮。

当按下按钮时,它运行 javascript 函数post_value();,该函数将数据库/子弹出窗口 (index2.php) 中的值放入父窗口 (index.php) 的文本框中

当我运行此代码时,它只是将单词 undefined 放在父页面的框框中,但是如果我删除 php 中的 while 循环,它只显示客户数据库中的一行,它工作正常。

它就像它不喜欢 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 回答