Php 动态创建的表单元素中需要分号

Php 动态创建的表单元素中需要分号,php,forms,Php,Forms,我正在编写一个php脚本,它将: 1.连接到数据库 2.在数据库中查询用户输入的字符串 3.将查询返回的每一行显示为动态创建的表单。每个表单都有两个“隐藏”输入字段,用于用一些图像和文本填充单独的页面。表单通过一个链接提交,该链接使用onclick属性和javascript“document.form.submit()”来处理表单提交 Execute($searchquery); //我们在$results中为每个结果引入HTML格式 foreach($results作为$resultset){

我正在编写一个php脚本,它将:
1.连接到数据库
2.在数据库中查询用户输入的字符串
3.将查询返回的每一行显示为动态创建的表单。每个表单都有两个“隐藏”输入字段,用于用一些图像和文本填充单独的页面。表单通过一个链接提交,该链接使用onclick属性和javascript“document.form.submit()”来处理表单提交

<我的问题是每一个表单的创建都会导致页面产生一个“分号期望错误”,说明我应该在代码中的一个单词中间有分号。我99.99%确信导致这个错误的原因在下面的代码中,但是我已经盯着它看了很长一段时间了,我被难住了

// Run a query against each field to search for input
foreach($columns as $field){
$searchquery = 'SELECT * FROM mytable WHERE '.$field.' LIKE \'%'.$input.'%\'';
$results = $db->Execute($searchquery);

// We introduce HTML formatting for each result in $results
foreach($results as $resultset) {
    echo '<div style="border: 2px solid black;">';

    // Each result in $results is an array, where the keys and values correspond to the field names and values of the table
    foreach($resultset as $key=>$value) {
        if($key == 'ID'){ // Query the database by ID for the rows returned by the previous query
            $resultquery = 'SELECT field1, field2, field3 FROM mytable WHERE '.$key.' = \''.$value.'\'';
            $row = $db->Execute($resultquery);
            $row = explode(",", $row);
            $id = $row[2];
            $company = $row[3];
            $prodname = $row[4];
            echo "<form name='rowForm.$i' action='page.php' method='POST'>";
            echo "<input type='hidden' name='Company' value='$company'>";
            echo "<input type='hidden' name='ProductName' value='$prodname'>";
            echo "<a href='path/to/my/page' onclick='javascript:document.rowForm.$i.submit(); return false;'> $company - $prodname ($id) </a>";
            echo "</form>";
            $i++;
        }
    }
    echo '</div>';
}
}
//对每个字段运行查询以搜索输入
foreach($列作为$字段){
$searchquery='从mytable中选择*,其中,'.$field.'类似\'%.$input.'%\';
$results=$db->Execute($searchquery);
//我们在$results中为每个结果引入HTML格式
foreach($results作为$resultset){
回声';
//$results中的每个结果都是一个数组,其中键和值对应于表的字段名和值
foreach($resultset作为$key=>$value){
if($key=='ID'){//根据ID查询数据库中上一次查询返回的行
$resultquery='从mytable中选择字段1、字段2、字段3,其中,'$key'=\''.$value'\'';
$row=$db->Execute($resultquery);
$row=分解(“,”,$row);
$id=$row[2];
$company=$row[3];
$prodname=$row[4];
回声“;
回声“;
回声“;
回声“;
回声“;
$i++;
}
}
回声';
}
}
仅供参考,$columns是一个数组,它保存表中所有列的名称。所有的表单都得到了正确的显示,所有的东西看起来都是应该的;唯一的问题是,由于这个分号错误,链接不能正常工作。我相信我已经发布了所有相关的代码,但是如果看起来缺少什么,请随时告诉我。如果有人能给我指出正确的方向,我将非常感激

编辑:下面是由上面的php生成的html代码,添加了一些额外的空格,并将一些变量的实际值替换为{$varname's value},以便于阅读。请注意,此代码是为sql查询返回的每一行生成的

<div style="border: 2px solid black;">
    <form name='rowForm.0' action='page.php' method='POST'>
        <input type='hidden' name='Company' value='{$company's value}'>
        <input type='hidden' name='ProductName' value='{$prodname's value}'>
        <a href='http://link/to/my/site' onclick='javascript:document.forms[\'rowForm.0\'].submit(); return false;'> {This is the link text} </a>
    </form>  
</div>

不太确定,但我猜您试图用单引号转义的字符没有被转义。你应该这样写:

$searchquery = "SELECT * FROM mytable WHERE " .$field. " LIKE '% ". $input . "%'";

$resultquery = "SELECT field1, field2, field3 FROM mytable WHERE " .$key. " = '" . $value . "'";

//编辑:

我的错,我逃跑的事情不太对劲:


而且,如前所述,上面的代码在底部缺少一个
}
来关闭第一个
foreach
;)

这样做:

document.rowForm.$i.submit()
在HTML源代码中的数量是多少

document.rowForm..submit()
。。。因为我可以看到一个问题

如果不是,我还是会选择:

document.forms['rowForm.$i'].submit()

您似乎缺少一个foreach循环的右大括号:)什么类型的类/对象是
$db
?是的,第一个foreach没有关闭…:)谢谢大家的快速回复。@问题:我发布的代码只是整个代码的一个片段;我只包括了与我遇到的问题相关的部分。foreach循环是闭合的,我只是忘了在我的帖子中包含闭合括号:P@Wrikken:$db正是我通过我使用的CMS提供的方法连接到数据库的方式(concrete5)。我绝对肯定这不会引起任何问题。你得到的确切错误是什么?包括堆栈跟踪等。“字符串中带\的转义字符只能在双引号之间使用。”。。。什么?转义序列是,正常的转义当然适用……我100%确定查询中没有问题,特别是因为这些查询的结果完全按照我的预期使用/显示,更不用说我花了多少时间试图让我所有的php/sql与我的cms合作。不过还是谢谢你:P…嗯。虽然$i变量被正确地包含在html源代码中,但将行更改为您建议的语法会导致我得到的错误发生变化-现在它只是行开头的一个“语法错误”,这至少比我得到的更有意义:PHaha不要紧,更改那一行中的语法只是给了我一个html源中嵌套字符串的问题,这导致了错误消息的更改。您可以将html源的相关部分放在某个地方吗?让我们不用猜测设置了哪些PHP变量:)
document.forms['rowForm.$i'].submit()