2012-10-18 52 views
2

我試圖從列表(listDIV)中獲取信息以顯示在我的表單(formDIV)中,我從使用JSON的數據庫中獲取信息。我只是收到錯誤「數據庫錯誤,請選擇其他」。在我的textarea領域,這導致我相信我的PHP有什麼問題。從PHP列表中輸入.val()

HTML & JS:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
$(document).ready(function() { 
$("#productList").change(function() { 

    var action = $("#productForm").attr('action'); 
    var form_data = { 
     id: $('#productList').val(), 
     name: $("#name").val(), 
     price: $("#price").val(), 
     img: $("#img").val(), 
     description: $("#description").val() 
    }; 

var id="something"; 
    $.getJSON("getProduct.php",form_data,function(data){ 
     switch(data.retval){ 
      case 0: $("#name").value(data.data.prodName); 
      break; 
      default: $("#description").html("Database error, please select something else."); 
      break; 
     } 
     }); 
    }); 
}); 
</script> 
</head><body> 

<div id="listDIV"> 
<select id="productList" name="productList" size="8"> 
    <option value="123" class="prodID">Terminator Series</option> 
    <option value="124" class="prodID">2001 A Space Odyssey</option> 
    <option value="125" class="prodID">Serenity</option> 
    <option value="126" class="prodID">Alien Quadrilogy</option> 
    <option value="127" class="prodID">12 Monkeys</option> 
    <option value="128" class="prodID">Final Fantasy</option> 
</select> 
</div><div id="formDIV"> 
<form id="productForm" action="getProduct.php" method="post"> 
    <input type="text" id="name" placeholder="Name" /><br /> 
    <input type="text" id="price" placeholder="Price" /><br /> 
    <input type="text" id="img" placeholder="Image" /><br /> 
    <textarea id="description" placeholder="Description"></textarea><br /> 
<input type="submit" id="save" value="Save" /> 
</form> 
</div> 
</body></html> 

PHP(getProduct.php):

<?php 
ob_start(); 
session_start(); 
mysql_connect('localhost', 'root', 'root') or 
    die('Could not connect: ' . mysql_error()); 
mysql_select_db('productDB') or 
    die ('Can\'t use database: ' . mysql_error()); 

// retval: 0 - login ok, 1 - login failed, 2 - internal error 
$json = array("retval" => 2, "data" => NULL, "debug" => ""); 

$id=json_decode($_REQUEST['id']); 
$prodID=$id->id; 

$sql="SELECT * FROM productTB WHERE prodID=" . $prodID; 


$json['debug'] .= "SQL query was: ".$sql."\n"; 
$result=mysql_query($sql); 
if (!$result) { 
    $json['debug'] .= "SQL query failed\n"; 
    $json['debug'] .= "Other output: ". ob_get_contents(); 
    ob_end_clean(); 
die(json_encode($json)); 
} 
$count=mysql_num_rows($result); 

if($count==1){ 
    $json['retval'] = 0; 
    $json['data'] = mysql_fetch_assoc($result); 
} else { 
    $json['retval'] = 1; 
} 
$json['debug'] .= "Other output: ". ob_get_contents(); 
ob_end_clean(); 
echo json_encode($json); 

表結構爲我的DB:

-- 
-- Table structure for table `productTB` 
-- 

CREATE TABLE `productTB` (
`prodID` int(11) NOT NULL, 
`prodName` varchar(30) COLLATE utf8_unicode_ci NOT NULL, 
`prodPrice` decimal(10,2) NOT NULL, 
`prodDesc` longtext COLLATE utf8_unicode_ci NOT NULL, 
`prodImg` varchar(30) COLLATE utf8_unicode_ci NOT NULL, 
PRIMARY KEY (`prodID`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 
+0

直接在瀏覽器中訪問php。如果它在那裏工作,那麼你的問題是在jQuery中,如果它不在那裏工作,問題是你的php/mysql – Landon

+0

你的'form_data'描述中有額外的逗號:$(「#description」)。 val(),'<--- –

+0

in getproduct.php fie ..檢查最後一行echo json_encode($ json); 工作與否? –

回答

3

您需要的變量傳遞。 。不是字符串

$sql="SELECT * FROM productTB WHERE prodID=" . $prodID; 

雖然我會建議使用的PreparedStatement

編輯:

你不及格ID到PHP頁面。這裏就是你可以訪問 - 這是要傳遞什麼到你的PHP -

變化

var form_data = { 
    name: $("#name").val(), 
    price: $("#price").val(), 
    img: $("#img").val(), 
    description: $("#description").val() 
}; 

var form_data = { 
    id: $('#productList').val(), // <-- pass the id 
    name: $("#name").val(), 
    price: $("#price").val(), 
    img: $("#img").val(), 
    description: $("#description").val() 
}; 

您需要將ID傳遞到頁面或查詢第一次從數據庫獲取ID。然後,您可以在查詢中使用該ID來獲得結果

+0

@Phawkes檢查我的更新。你沒有傳遞ID,所以這就是爲什麼你的sql語句中沒有出現prod id –

+0

@Phawkes yes ..這種方式你可以在你的php代碼中訪問它。但是我認爲你需要'$('#productList') .val()' –

+0

您需要將'$ prodID'更改爲'$ prodId' < - 注意小d - 在您的sql語句中 –