Ожидаемая точка с запятой в динамически созданном элементе формы - PullRequest
1 голос
/ 03 августа 2011

Я работаю над 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>';
}
}

Fyi, $ columns - это массив, который содержит имена всех столбцов в моей таблице. Все формы отображаются правильно, и все выглядит так, как должно; единственная проблема заключается в том, что ссылки не работают должным образом из-за этой точки с запятой. Я уверен, что опубликовал весь соответствующий код, но не стесняйтесь, дайте мне знать, если кажется, что чего-то не хватает. Если кто-то может указать мне правильное направление в этом, я действительно ценю это!

РЕДАКТИРОВАТЬ: Вот HTML-код, который генерируется php выше, с добавлением некоторого дополнительного пробела и фактические значения для некоторых переменных заменены на {$ 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>

Ответы [ 2 ]

0 голосов
/ 04 августа 2011

Означает ли это:

document.rowForm.$i.submit()

Сумма к этому в источнике HTML?

document.rowForm..submit()

... потому что тогда я вижу проблему ...

Если нет, я бы все равно пошел:

document.forms['rowForm.$i'].submit()
0 голосов
/ 03 августа 2011

Не совсем уверен, но я думаю, что символы, которых вы пытаетесь экранировать в одинарных кавычках, не экранируются.Вместо этого вы должны написать это так:

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

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

// edit:

Боже мой, я понял, что убегающий не совсем прав:

Note: Unlike the double-quoted and heredoc syntaxes, variables and escape sequences for special characters will not be expanded when they occur in single quoted strings. 

http://php.net/manual/en/language.types.string.php


И, как уже упоминалось, в вашем коде выше отсутствует } внизу, чтобы закрыть первый foreach;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...