2011-08-03 68 views
1

我正在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是一個數組,它包含我表中所有列的名稱。所有的表格都可以正確顯示,並且一切看起來都應該如此;由於這個分號錯誤,唯一的問題是鏈接無法正常工作。我相信我已經發布了所有相關的代碼,但如果看起來缺少某些東西,請隨時告訴我。如果有人能指出我對這個方向正確的話,我會非常感激!

編輯:這是由上面的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> 
+0

你似乎缺少一個右括號你的foreach循環:) – Problematic

+0

什麼樣的類/對象_is_'$ db'? – Wrikken

+0

是的,第一個foreach沒有被關閉...... :) – Quasdunk

回答

0

不太確定,但我想你試圖用單引號轉義的字符不會被轉義。你應該把它寫這樣的而不是:

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

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

//編輯:

我的壞,我得到了轉義,事情不太對勁:

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;)

+1

「在字符串中用\轉義字符只適用於雙引號。 ... 什麼? – Problematic

+0

轉義序列[用雙引號擴展](http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double),正常轉義當然適用.... – Wrikken

+0

我100%確定查詢中沒有問題,尤其是因爲這些查詢的結果完全按照我的預期使用/顯示,更不用說我花費了所有時間php/sql與我的cms合作。不過謝謝你,P – Capitrium

0

這是否:

document.rowForm.$i.submit() 

量這在HTML源代碼?

document.rowForm..submit() 

...因爲那樣我可以看到一個問題...

如果沒有,我還是會去的:

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

......呵呵。雖然$ i變量被正確包含在html源代碼中,但將行更改爲您建議的語法會導致我得到的錯誤發生變化 - 現在這只是行首的'語法錯誤',它至少使得比我得到的更有意義:P – Capitrium

+0

哈哈沒關係,改變該行中的語法只是給了我一個關於html源代碼中的嵌套字符串的問題,這導致了錯誤消息中的更改。 – Capitrium

+0

你可能會把HTML源代碼的相關部分放在某個地方嗎?節省我們猜測什麼PHP變量設置或不:) – Wrikken