2012-09-15 26 views
0

我想用php更新我的數據庫中的表。我有一個函數調用我的數據庫中設置爲可見(可見= 1)的所有頁面,並在網站上列出它們。每個頁面都有一個單選按鈕,如果單選按鈕設置爲yes(value = 1),則javascript調用下拉選項。我希望用戶能夠選擇他們的選項,並且當他們點擊信息提交按鈕(他們設置的頁面名稱和位置編號)插入到我的表格中。數據庫中的更新表動態php

這裏是下面的代碼:

<?php 
    if (isset($_POST['submit'])) { 
// Perform Update 

      $name = $_POST['visible_{$page["menu_name"]}']; 
      $featured_position = $_POST['featured_position']; 

      $query = "UPDATE pages SET 
        featured_position = {$featured_position} 
        WHERE menu_name = {$name}"; 
      $result = mysql_query($query); 
      // test to see if the update occurred 
      if (mysql_affected_rows() == 1) { 
       // Success! 
       $message = "The page was successfully updated."; 
      } else { 
       $message = "The page could not be updated."; 
       $message .= "<br />" . mysql_error(); 
      } 

     } 
?> 

<?php if (!empty($message)) { 
       echo "<p class=\"message\">" . $message . "</p>"; 
} ?> 

<form action="add_feature2.php" method="post"> 
<?php echo list_all_pages(); ?> 

<input type="submit" name="submit" value="Edit Featured Companies" /> 
</form>   

<?php 
     function get_all_pages() { 
     global $connection; 
     $query = "SELECT * 
       FROM pages "; 
     $query .= "WHERE visible = 1 "; 
     $query .= "ORDER BY position ASC"; 
     $page_set = mysql_query($query, $connection); 
     confirm_query($page_set); 
     return $page_set; 
    } 

function list_all_pages(){ 
$output = "<ul>"; 
//$output .= $counter = 0; 
$page_set = get_all_pages(); 
while ($page = mysql_fetch_array($page_set)) { 
$output .= "<li>{$page["menu_name"]}</li>"; 

$output .= "&nbsp;&nbsp;<div id=\"$page[id]\" style='display: none'><select name='featured_position'><option value='1'>1</option><option value='2'>2</option><option value='3'>3</option></select></div>"; 

$output .= "&nbsp;&nbsp;<input onclick=\"javascript:document.getElementById('$page[id]').style.display = 'none';\" type=\"radio\" name=\"visible_{$page["menu_name"]} \" value=\"0\" checked=\"checked\" /> No <input onclick=\"javascript:document.getElementById('$page[id]').style.display = 'block';\" type=\"radio\" name=\"visible_{$page["menu_name"]} \"value=\"1\" /> Yes"; 

//$output .= $counter = $counter+1; 

    } 
$output .= "</ul>"; 
return $output; 
} 




?> 

下面是該網站的鏈接:http://www.firetreegraphics.com/widget_corp-final/add_feature2.php

** * ** * ** * ** * *UPDATE* ** * ** * ** * ** * ** * ***

我改變了名稱屬性的單選按鈕是一個計數器。我將單選按鈕名稱屬性設爲變量的原因是因爲我已動態創建了單選按鈕,每組單選按鈕都必須具有唯一的名稱,否則所有的組都鏈接在一起。

$name = $_POST['{$counter}']; 
      $featured_position = $_POST['featured_position']; 

      $query = "UPDATE pages SET 
        featured_position = '{$featured_position}' 
        WHERE menu_name = '{$name}'"; 
      $result = mysql_query($query); 
          //echo($query); 
          var_dump($_REQUEST); 


function list_all_pages(){ 
$output = "<ul>"; 
$counter = 0; 
$page_set = get_all_pages(); 
while ($page = mysql_fetch_array($page_set)) { 
$output .= "<li>{$page["menu_name"]}</li>"; 

$output .= "&nbsp;&nbsp;<div id=\"$page[id]\" style='display: none'><select name='featured_position'><option value='1'>1</option><option value='2'>2</option><option value='3'>3</option></select></div>"; 

$output .= "&nbsp;&nbsp;<input onclick=\"javascript:document.getElementById('$page[id]').style.display = 'none';\" type=\"radio\" name=\"$counter\" value=\"0\" checked=\"checked\" /> No <input onclick=\"javascript:document.getElementById('$page[id]').style.display = 'block';\" type=\"radio\" name=\"$counter\" value=\"1\" /> Yes"; 

$counter = $counter+1; 

    } 
$output .= "</ul>"; 
return $output; 
} 
+0

在執行它之前輸出你的sql到屏幕上,並嘗試在像phpMyAdmin這樣的工具中運行它來找出錯誤;) –

+0

問題是什麼?你有錯誤嗎?一條消息說它已更新,但尚未更新?有人說它沒有更新,但它有? – andrewsi

+0

@Terry。如何在執行之前將sql輸出到屏幕? – ristenk1

回答

0

首先,PHP的mysql API已被棄用,並在很大程度上「不推薦」。你應該使用MySQLi,你不需要,但它幾乎相同,這就是爲什麼我建議它。

當我第一次看,我看到在你的查詢中的一個這樣的問題:

"UPDATE pages SET 
    featured_position = {$featured_position} 
    WHERE menu_name = {$name}"; 

想必{$name}是一個字符串。所以你的查詢以WHERE menu_name = string結尾,而它應該用引號標出。

"UPDATE pages SET 
    featured_position = {$featured_position} 
    WHERE menu_name = '{$name}' "; 
+0

我在$ name和$ featured_position中加了引號,並認爲它會在我得到語法錯誤之前修復它b/c ...但現在我甚至沒有收到錯誤...它只是說該頁面不能更新,並不會給mysql錯誤..任何想法,爲什麼它仍然不會更新...我是否完全錯誤?例如,在底部,我有list_all_pages循環...當我點擊提交按鈕或者我在正確的軌道上時,我試圖調用錯誤的東西嗎?非常感謝您的幫助。謝謝! – ristenk1

1

我希望你需要引用您的變量:

$query = "UPDATE pages SET 
     featured_position ='{$featured_position}' 
     WHERE menu_name = '{$name}'"; 

無論其

你真的應該看看移動PDOmysqli_*。它不僅可以幫助您編寫更安全的代碼 - 您的代碼中目前存在SQL注入漏洞 - 但它會處理所有引用。

編輯:

$output .= "&nbsp;&nbsp;<div id=\"$page[id]\" style='display: none'><select name='featured_position_{$counter}'><option value='1'>1</option><option value='2'>2</option><option value='3'>3</option></select></div>";    
$output .= "&nbsp;&nbsp;<input onclick=\"javascript:document.getElementById('$page[id]').style.display = 'none';\" type=\"radio\" name=\"visible_{$counter}\" value=\"0\" checked=\"checked\" /> No <input onclick=\"javascript:document.getElementById('$page[id]').style.display = 'block';\" type=\"radio\" name=\"visible_{$counter}\" value=\"1\" /> Yes";  

我已經改名爲單選按鈕,使它們被稱爲 'visible_';這會讓您在更新查詢中使用該頁面的ID。我也重命名了select,所以每行都有它自己的select,稱爲'featured_position_'。

我認爲你必須有一個循環來檢查每個值:

$page_set = get_all_pages();    
while ($page = mysql_fetch_array($page_set)) { 
    $id = $_POST["visible_" . $page["id"]]; 
    $featured_position = $_POST['featured_position_' . $page["id"]; 

    $query = "UPDATE pages SET   
     featured_position = '{$featured_position}'   
     WHERE id = '{$name}'"; 

認爲這應該是足夠的。

+0

我在$ name和$ featured_position中加了引號,並且認爲它會在我得到語法錯誤之前修復它b/c ...但是現在我甚至沒有收到錯誤...它只是說該頁面不能更新,並不會給mysql錯誤..任何想法,爲什麼它仍然不會更新...我是否完全錯誤?例如,在底部,我有list_all_pages循環...當我點擊提交按鈕或者我在正確的軌道上時,我試圖調用錯誤的東西嗎?非常感謝您的幫助。謝謝! – ristenk1

+0

在執行之前添加'echo($ query)',並查看您的查詢的實際外觀。 – andrewsi

+0

@這是一個非常基本的問題......我應該在哪裏放置該線? – ristenk1