【问题标题】:javascript - fetch additional fields from mysql and display in tablejavascript - 从 mysql 获取附加字段并显示在表中
【发布时间】:2012-04-03 20:04:39
【问题描述】:

我有一个 javascript,它从 mysql 获取数据并在我的 html 表单中显示它而无需刷新页面。鉴于我不了解 javascript,我得到了以下脚本,这得到了 StackOverflow 社区的大力协助,即@Brant Olsen。

该脚本可以完美地获取 3 个 mysql 结果字段。我想为此添加额外的 2 个字段并将它们显示在我的 html 表单中。

工作脚本是:

<script type="text/javascript">  
  function showUser(userNumber, str)  
  {  
    if (str=="")  
    {  
      document.getElementById("txtHint" + userNumber).innerHTML="";  
      return;  
    }    
    if (window.XMLHttpRequest)  
    {// code for IE7+, Firefox, Chrome, Opera, Safari  
      xmlhttp=new XMLHttpRequest();  
    }  

    xmlhttp.onreadystatechange=function()  
    {  
      if (xmlhttp.readyState==4 && xmlhttp.status==200)  
      {  
        //document.getElementById("txtHint" + userNumber).innerHTML=xmlhttp.responseText; 
        var responseText = xmlhttp.responseText; 
        var description = responseText; 
        var warehouse = ""; 
        var sellingUnits = ""; 
        if (responseText.indexOf("NOT A VALID") == -1) 
        { 
          description = responseText.substring(12, responseText.indexOf(",Warehouse:"));  
          warehouse = responseText.substring(responseText.indexOf(",Warehouse:")+11, responseText.indexOf(",SellingUnits:"));  
          sellingUnits = responseText.substring(responseText.indexOf(",SellingUnits:")+14);  
        } 

        document.getElementById("whse" + userNumber).innerHTML = warehouse;  
        document.getElementById("txtHint" + userNumber).innerHTML = description;  
        document.getElementById("su" + userNumber).innerHTML = sellingUnits; 

      }  
    }  
    xmlhttp.open("GET","getdata1.php?q="+str,true);  
    xmlhttp.send(); 
  } 
</script> 

getdata1.php 是:

<?php 
 $q=$_GET["q"]; 

$con = mysql_connect('localhost', 'dbuser', 'dbpass'); 
 if (!$con) 
   { 
   die('Could not connect: ' . mysql_error()); 
   } 

mysql_select_db("dbname", $con); 


$sql="SELECT Category, Description,SellingUnits,Grouping,CasesPerPallet,ShrinksPerPallet FROM skudata WHERE packcode = '".$q."'"; 
$result = mysql_query($sql); 
$rows=mysql_num_rows($result); 

if($rows==0){echo "<font color=red><b>NOT A VALID PRODUCT CODE</b></font>";} else { 
while($row = mysql_fetch_array($result)) 
 { 
   echo "Description:" . $row['Description'] . ",Warehouse:" . $row['Grouping'] . ",SellingUnits:" . $row['SellingUnits']; 
 } 
} 

mysql_close($con); 
 ?>  

我已经用我想传递给 html 表单的附加字段更改了 getdata1.php:

$sql="SELECT Category, Description,SellingUnits,Grouping,CasesPerPallet,ShrinksPerPallet,if(SellingUnits='cs', CasesPerPallet,ShrinksPerPallet) as SUQTY FROM skudata WHERE packcode = '".$q."'"; 
$result = mysql_query($sql); 
$rows=mysql_num_rows($result); 

if($rows==0){echo "<font color=red><b>NOT A VALID PRODUCT CODE</b></font>";} else { 
while($row = mysql_fetch_array($result)) 
 { 
   echo "Description:" . $row['Description'] . ",Warehouse:" . $row['Grouping'] . ",SellingUnits:" . $row['SellingUnits'] . ",SUQTY:" . $row['SUQTY'] . ",Category:" . $row['Category']; ; 
 } 
} 

从这里开始,我正在努力正确编码另外两个字段。表格行的示例如下:

<tr id="r1">  
    <td>
        <input type=checkbox name=kvi1 id=kvi1 value=1>
    </td>
    <td>
        <input size=10  type=number id=sku1 name=sku1 onchange="showUser(1, this.value)"><a href="sku.php" target="_blank"><img src=q.png border=0></a>
    </td>
    <td>
        <div align="left" id="txtHint1">&nbsp;</div>
    </td>
    <td>
        <div align="left" id="whse1">&nbsp;</div>
    </td>
    <td>
        <div align="left" id="su1">&nbsp;</div>
    </td>
    <td>
        <div align="left" id="suqty1">&nbsp;</div>
    </td>
    <td>
        <div align="left" id="category1">&nbsp;</div>
    </td>
</tr>

我已将javascript编辑如下,但没有成功,有人可以帮忙吗?

<script type="text/javascript">  
  function showUser(userNumber, str)  
  {  
    if (str=="")  
    {  
      document.getElementById("txtHint" + userNumber).innerHTML="";  
      return;  
    }    
    if (window.XMLHttpRequest)  
    {// code for IE7+, Firefox, Chrome, Opera, Safari  
      xmlhttp=new XMLHttpRequest();  
    }  

    xmlhttp.onreadystatechange=function()  
    {  
      if (xmlhttp.readyState==4 && xmlhttp.status==200)  
      {  
        //document.getElementById("txtHint" + userNumber).innerHTML=xmlhttp.responseText; 
        var responseText = xmlhttp.responseText; 
        var description = responseText; 
        var warehouse = ""; 
        var sellingUnits = ""; 
        var SUQTY = ""; 
        var Category = ""; 
        if (responseText.indexOf("NOT A VALID") == -1) 
        { 
          description = responseText.substring(12, responseText.indexOf(",Warehouse:"));  
          warehouse = responseText.substring(responseText.indexOf(",Warehouse:")+11, responseText.indexOf(",SellingUnits:"));  
          sellingUnits = responseText.substring(responseText.indexOf(",SellingUnits:")+11, responseText.indexOf(",SUQTY:")); 
          suqty = responseText.substring(responseText.indexOf(",SUQTY:")+11, responseText.indexOf(",Category:")); 
          category = responseText.substring(responseText.indexOf(",Category:")+14);  
        } 

        document.getElementById("whse" + userNumber).innerHTML = warehouse;  
        document.getElementById("txtHint" + userNumber).innerHTML = description;  
        document.getElementById("su" + userNumber).innerHTML = sellingUnits; 
        document.getElementById("suqty" + userNumber).innerHTML = SUQTY; 
        document.getElementById("category" + userNumber).innerHTML = Category; 


      }  
    }  
    xmlhttp.open("GET","getdata1.php?q="+str,true);  
    xmlhttp.send(); 
  } 
</script> 

谢谢, 瑞恩

【问题讨论】:

  • 您的代码易受 SQL 注入攻击。使用 JSON 解析与 php 之间的数据。还可以考虑使用 javascript 库(例如 jquery),它会使工作更容易。此外,不推荐使用 mysql 扩展。请改用 mysqli 扩展名。哦, 已经很久没有使用过了。使用 css :-)
  • 感谢 Flukey,会注意并做出更改。关于如何使用 JSON 的任何建议?

标签: php javascript mysql forms


【解决方案1】:

我知道你不会喜欢这个答案,因为它需要你重新编写代码,但我会尽力提供帮助。

实际上,通过 ajax 调用在 PHP 和 JS 之间发送的这种性质的任何类型的数据都应该使用 >= PHP5.3 中的原生 JSON。这样做的好处是 Ajax 和 PHP 可以来回传递数据,而无需在应用程序级别进行任何真正的解析。而且它非常容易改变。如果您需要再次更改它,这是完美的。

注意:如果您的 PHP 版本低于 5.3 并且您没有努力安装 JSON 插件,请不要使用以下代码。此外,JSON 对象在旧版浏览器中也不是原生的。 http://caniuse.com/json

PHP 端

让 while 循环内的回显看起来像这样:

echo json_encode(array(
    "description" => $row['Description'],
    "warehouse" => $row['Grouping'],
    "sellingunits" => $row['SellingUnits'],
    "suqty" => $row['SUQTY'],
    "category" => $row['Category']
));

JS 端

var data = {};
if (responseText.indexOf("NOT A VALID") == -1) { 
    data = JSON.parse(responseText);
}
// Check the values or just place an empty string if undefined
document.getElementById("whse" + userNumber).innerHTML = data.warehouse || '';  
document.getElementById("txtHint" + userNumber).innerHTML = data.description || '';  
document.getElementById("su" + userNumber).innerHTML = data.sellingunits || ''; 
document.getElementById("suqty" + userNumber).innerHTML = data.suqty || ''; 
document.getElementById("category" + userNumber).innerHTML = data.category || '';

【讨论】:

  • 感谢您。不幸的是,我托管服务器上的 PHP 版本是 5.2.17,所以我不能更改它?使用现有代码执行此操作的任何其他方式?谢谢一百万,瑞恩
猜你喜欢
  • 2019-03-12
  • 1970-01-01
  • 2020-04-07
  • 2018-09-20
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-29
相关资源
最近更新 更多