【问题标题】:Incorrect Data Being Saved From AJAX Drop Down Menus从 AJAX 下拉菜单中保存的数据不正确
【发布时间】:2011-10-31 15:25:56
【问题描述】:

我一直在尝试解决我的一个数据字段如何保存到 mySQL 数据库的问题。我遇到的问题是,不是保存文本值,而是保存文本值的“id”,我不知道为什么。

该字段称为“检测器名称”,其文本值是通过下拉菜单选择的,然后会打开第二个名为 searchheadname 的下拉菜单。两个下拉菜单均通过 PHP 和 AJAX 脚本填充,并在用户选择时显示正确的文本值。

感谢我没有包含任何代码,有很多代码,我不得不承认我不确定哪些部分会有用。

我只是想知道是否有人可以帮我解决这个问题,让我知道他们希望我发布代码的哪些部分。

更新

HTML 表单和 AJAX 脚本

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Location</title>
        <link rel="stylesheet" href="css/style.css" type="text/css" media="all" />
    link rel="stylesheet"   href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/themes/base/jquery-ui.css" 
        type="text/css" media="all" />  
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>  
        <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js" type="text/javascript"></script>         
        <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&language=en"></script>  
        <script type="text/javascript" src="js/addfindstolocation.js"></script>
        <script type="text/javascript" language="javascript">
            <!--
            function savedata() { 
            var userid =  document.getElementById("userid").value;
            var locationid = document.getElementById("locationid").value; 
            var searchheadid = document.getElementById("searchheadid").value;
            var additionalcomments = document.getElementById("additionalcomments").value;            

            var url = "addfindstolocationsave.php?userid=" + userid + "&locationid=" + locationid + "&searchheadid=" + searchheadid + "&additionalcomments=" + additionalcomments; 
            downloadUrl(url, function(data, responseCode) { 
            }); 
            } 

            function downloadUrl(url, callback) { 
            var request = window.ActiveXObject ? 
            new ActiveXObject('Microsoft.XMLHTTP') : 
            new XMLHttpRequest; 

            request.onreadystatechange = function() { 
            if (request.readyState == 4) { 
            request.onreadystatechange = doNothing; 
            callback(request.responseText, request.status); 
            } 
            }; 

            request.open('GET', url, true); 
            request.send(null); 
            } 

            function doNothing() {}

            function MM_callJS(jsStr) { //v2.0
            return eval(jsStr)
            }
            //-->
        </script>
        <script type="text/javascript" language="javascript">
            $(function() {
            $( "#dateoftrip" ).datepicker({ 
            dateFormat:'dd/mm/yy',
            showOn: 'button',  
            buttonText: 'Select Date...'});
            });

        </script>
        <script type="text/javascript">
            function AjaxFunction(detectorid)
            {
            var httpxml;
            try
            {
            // Firefox, Opera 8.0+, Safari
            httpxml=new XMLHttpRequest();
            }
            catch (e)
            {
            // Internet Explorer
            try
            {
            httpxml=new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e)
            {
            try
            {
            httpxml=new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e)
            {
            alert("Your browser does not support AJAX!");
            return false;
            }
            }
            }
            function stateck() 
            {
            if(httpxml.readyState==4)
            {

            var myarray=eval(httpxml.responseText);
            // Before adding new we must remove previously loaded elements
            for(j=document.addfindstolocation.searchheads.options.length-1;j>=0;j--)
            {
            document.addfindstolocation.searchheads.remove(j);
            }


            for (i=0;i<myarray.length;i++)
            {
            var optn = document.createElement("OPTION");
            optn.text = myarray[i];
            optn.value = myarray[i];
            document.addfindstolocation.searchheads.options.add(optn);

            } 
            }
            }
            var url="searchheaddetails.php";
            url=url+"?detectorid="+detectorid;
            url=url+"&sid="+Math.random();
            httpxml.onreadystatechange=stateck;
            httpxml.open("GET",url,true);
            httpxml.send(null);
            }
            </script>
            </head>
            <body>
                <form name="addfindstolocation" method='POST'>
                    <p><label></label>
                    </p>
                    <p align="left">
                        <input name="userid" type="text" id="userid" value="1"/>
                        <input name="locationid" type="text" id="locationid"  value="2"/>
                        <br />
                    </p>
                    <div>
                        <label>
                            <div align="left">Click on the map to place the marker for the find that has been made and drag until the precise location has been found. </div>
                        </div>
                            <p align="left"><label>Find OSGB36 Latitude Co-ordinate<br />
                                </label>
                            </p>
                            <div>
                                <div align="left">
                                    <input name="findosgb36lat" type="text" id="findosgb36lat" size="20" />
                                </div>
                            </div>
                            <p align="left"><label>Find OSGB36 Longitude Co-ordinate<br />
                                </label>
                            </p>
                            <div>
                                <div align="left">
                                    <input name="findosgb36lon" type="text" id="findosgb36lon" size="20" />
                                </div>
                            </div>
                            <p align="left"><label>Date of Trip<br />
                                </label>
                            </p>
                            <div>
                                <div align="left">
                                    <input name="dateoftrip" type="text" id="dateoftrip" size="10" />
                                </div>
                            </div>
                            <p align="left"><label>Find Category</label>&nbsp;</p>
                            <div>
                                <div align="left">
                                    <?php
                                    mysql_connect("hostname", "username", "password") or die("Connection Failed");
                                    mysql_select_db("dbname")or die("Connection Failed");
                                    $query = "SELECT * FROM findcategories";
                                    $result = mysql_query($query);
                                    ?>
                                    <select name="findcategory" id="findcategory">
                                        <option value=''>Select One</option>
                                        <?php
                                        while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
                                        ?>
                                        <option value="<?php echo $line['findcategory'];?>"> <?php echo $line['findcategory'];?> </option>

                                        <?php
                                        }
                                        ?>
                                    </select>    
                                </div>
                                <p align="left">
                                    <label>Find Name<br />
                                    </label>
                                </p>
                                <div>
                                    <div align="left">
                                        <input name="findname" type="text" id="findname" size="35" />
                                    </div>
                                </div>
                                <p align="left">
                                    <label>Find Description<br />
                                    </label>
                                </p>
                                <div>
                                    <div align="left">
                                        <input name="finddescription" type="text" id="finddescription" size="150" />
                                    </div>
                                </div>
                                <p align="left"><label></label>
                                    <label>Detector Used</label></p>
                                <div>
                                    <div align="left">
                                        <select name=detectors id="detectorid" onchange="AjaxFunction(this.value);">
                                            <option value=''>Select One</option>
                                            <?
                                            require "phpfile.php";// connection to database 
                                            $q=mysql_query("SELECT * from detectors WHERE userid='1'ORDER BY 'detectorname' ASC");
                                            while($n=mysql_fetch_array($q)){
                                            echo "<option value=$n[detectorid]>$n[detectorname]</option>";
                                            }

                                            ?>
                                      </select>
                                    </div>
                                </div>
                                <p align="left">
                                    <label></label>
                                    <label>Search Head Used</label></p>
                                <div>
                                    <div align="left">
                                        <select name=searchheads id="searchheadid">
                                        </select>
                                    </div>
                                </div>
                                <p align="left">
                                    <label>Detector Settings</label>
                                    <label><br />
                                    </label>
                                </p>
                                <div>
                                    <div align="left">
                                        <textarea name="detectorsettings" cols="50" rows="12" id="detectorsettings"></textarea>
                                    </div>
                                </div>
                                <p align="left">
                                    <label>PAS Ref. (if known)<br />
                                    </label>
                                </p>
                                <div>
                                    <div align="left">
                                        <input name="pasref" type="text" id="pasref" size="9" />
                                    </div>
                                </div>
                                <p align="left"><label>Additional Comments</label>
                                </p>
                                <div>
                                    <div align="left">
                                        <textarea name="additionalcomments" cols="50" rows="12" id="additionalcomments"></textarea>
                                    </div>
                                </div>
                                <p align="left"><br />
                                    <label></label>
                                </p>
                                <p align="left">
                                    <input name="submit" type="submit" onclick="MM_callJS('savedata()')" value="Submit" />        
                                </form>
                                    <div id="map"></div>
                                </body>
                                </html>



**'Searchheadetails.php' File (Called in file above)**     

     <?
$detectorid=$_GET['detectorid'];
require "config.php";
$q=mysql_query("SELECT * FROM searchheads WHERE detectorid='$detectorid' ORDER BY 'searchheadname' ASC");
echo mysql_error();
$myarray=array();
$str="";
while($nt=mysql_fetch_array($q)){
$str=$str . "\"$nt[searchheadname]\"".",";
}
$str=substr($str,0,(strLen($str)-1)); // Removing the last char , from the string
echo "new Array($str)";

?>  

【问题讨论】:

  • 您应该做的一件事是检查 HTTP 事务以查看浏览器向服务器发送的内容。您可以使用 Chrome 开发人员工具中的“网络”选项卡之类的工具,或者使用 Firefox 中的 Firebug 或 Tamper Data 来完成此操作。
  • 您好,非常感谢您回复我的帖子。我必须承认我对此相当陌生。你能告诉我你推荐的软件好用吗?亲切的问候。克里斯
  • 嗯,这不是世界上最简单的事情,但是如果你要在很大程度上从事这种工作,如果你不学习,你将永远感到困惑和困惑他们。 Chrome 中的“网络”选项卡可能是最容易使用的,尽管 Firefox 的篡改数据也非常简单(如果有点难看)。它们让您做的重要事情是检查 HTTP 请求内容,就像浏览器将它们发送到服务器时它们实际看到的那样。它有助于将服务器问题与客户端问题分开!
  • 嗨,我一直在处理这些文件,我发现它们可以正常工作。我想做的是更改保存到 mySQl 数据库中的值。我已将代码添加到我的原始帖子中,但基本上对于名为“searchheads”的第二个下拉菜单,我想保留文本值供用户选择,而不是保存文本值,我想保存'id' 值代替。我只是想知道 somoene 是否有可能向我展示我需要更改哪些内容才能使其正常工作。非常感谢和亲切的问候。克里斯

标签: php javascript ajax google-maps-api-3


【解决方案1】:

我会尝试在下面的一行代码中将detectorid 更改为detectorname

<div>
<div align="left">
<select name=detectors id="detectorid" onchange="AjaxFunction(this.value);">
<option value=''>Select One</option>
<?
require "phpfile.php";// connection to database 
$q=mysql_query("SELECT * from detectors 
  WHERE userid='1'ORDER BY 'detectorname' ASC");
while($n=mysql_fetch_array($q)){
echo "<option value=$n[detectorname]>$n[detectorname]</option>";
//***I changed the line above***  TODO:Remove this comment
}
?>
</select>
</div>
</div>

【讨论】:

  • 您好,非常感谢您抽出宝贵时间回复我的帖子。我已经尝试了您的建议,但不幸的是它没有给出我想要的结果。将字段从“detectorid”更改为“detectorname”意味着第二个下拉菜单中没有值。我认为更改需要在第二个 php 文件的这一行中: str=$str 。 "\"$nt[搜索头名]\"".",";但我不确定要改变什么。你能告诉我,你有什么想法吗?再次非常感谢和亲切的问候。克里斯
猜你喜欢
  • 2022-08-17
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
相关资源
最近更新 更多