【问题标题】:Trouoble with Ajax submitting to databaseAjax 提交到数据库的问题
【发布时间】:2012-09-01 19:36:20
【问题描述】:

我有这个表格:

<form method = \"get\" action = \"\" onsubmit = \"return addBeer('$user','$id','$name','$abv','$ibu','$icon','$style','$brewery','$breweryID','$icon')\" >

<p> <input type = \"submit\" value = \"Go Fishing\" /> </p>

</form>

调用这个 JavaScript 函数:

function addBeer(user,id,bname,abv,ibu,icon,bstyle,brewery,breweryID,icon)
        {
            //get elements

            alert('userID' + user);

            alert('beerid'+id); 

            alert('beername'+bname);        

            alert('style'+bstyle);

            alert('brewery'+brewery);

            alert('abv'+abv);

            alert('ibu'+ibu);

            alert('brewery id'+ breweryID);

            alert('icon'+icon);


            //run ajax
            var ajaxSettings2 = 
            {
                type: "POST",
                url: "addBeer.php",
                data: "uID="+user+"&bID="+id+"&bName="+bname+"&bStyle="+bstyle+"&bBrewery="+brewery+"&abv="+abv+"&ibu="+ibu+"&breweryID="+breweryID,
                success: function() 
                {
                    $('#sbutton').remove();
                    alert('Load was performed.');
                },

                error: function(xhr, status, error) { alert("error: " + error); }   };
            $.ajax(ajaxSettings2);

        }

所有的警报都有效,所以我知道信息是从表单传递到函数的,但它在对 addBeer.php 的 ajax 调用中失败,因为它运行错误函数并弹出错误警报。不幸的是,弹出窗口中没有报告任何内容。

这是为添加到数据库而调用的 addBeer.php 文件:

<?php

                require_once('myConnectDB.inc.php');
                require_once('page.inc.php');

                session_start();





                        //add beer to database code
                        $userID = $_POST['uID'];
                        $beerName = $_POST['bName'];
                        $beerID = $_POST['bid'];
                        $brewery = $_POST['bBrewery'];
                        $style = $_POST['bStyle'];

                        $abv = $_POST['abv'];
                        $ibu = $_POST['ibu'];
                        $breweryID = $_POST['breweryID'];
                        //$icon = $_POST['icon'];


                        //get brewery icon
                        $uri3 = "http://api.brewerydb.com/v2/brewery/$breweryID?key=myKey&format=json";
                        $response3 = file_get_contents($uri3);
                        //parse xml
                        $myBrew = json_decode($response3);
                        $iconBrew = $myBrew->data->images->medium;

                        //add above data to database
                        $db = new myConnectDB();

                        $beerName = $db->real_escape_string($beerName);
                        $beerID = $db->real_escape_string($beerID);
                        $brewery = $db->real_escape_string($brewery);
                        $style = $db->real_escape_string($style);
                        $userID = $db->real_escape_string($userID);
                        $abv = $db->real_escape_string($abv);
                        $ibu = $db->real_escape_string($ibu);
                        $breweryID = $db->real_escape_string($breweryID);           
                        $icon = $db->real_escape_string($icon); 




                        $query3 = "INSERT INTO tableName (userID,beerID,beerName,beerStyle,beerBrewery,abv,ibu,breweryID,icon, brewIcon) VALUES ($userID, '$beerID', '$beerName', '$style' , '$brewery', '$abv','$ibu','$breweryID', '$icon', '$iconBrew')";
                        $db->query($query3);


                ?>

为了安全起见,我取出了我的 api 密钥和表名。

我在检查元素下检查了 chrome 中的网络选项卡,当我点击 addBeer.php 调用并在标题下查看时,它在表单数据中显示正在传递信息。

更新:

我正在转义我的引号,因为它是从 php 打印出来的

【问题讨论】:

  • 您可能希望通过 addBeer 返回 false 来阻止表单提交
  • 感谢您的提示,我忘记了这一点,想知道为什么我的页面仍然在刷新。
  • 嗨,迈克,您能编辑您的帖子并解释为什么您在 HTML 表单中转义引号吗?这还不清楚。
  • @jmort253 感谢您的建议,我在上面添加了您要求的信息。
  • 另外,您是否尝试过提取所有 DB 代码并回显您从 AJAX 收到的内容?这将进一步帮助缩小错误的来源,这样您就不必发布整个项目。 ;) 例如,如果您在没有 DB 代码的情况下没有收到错误,则问题出在 DB 代码中,如果您在没有 DB 代码的情况下仍然收到该错误,则问题可能出在 AJAX 中。另外,调试器中的 NET 选项卡是什么意思?您收到服务器的响应了吗?

标签: php ajax database


【解决方案1】:

经过无数次挫折后,我发现了我的问题。我发送的信息是从另一个数据库查询的,但所有这些信息并不总是完整的。

如果我单击提交并且函数调用中的一个变量是一个空字符串,它不喜欢它。

【讨论】:

    【解决方案2】:

    您的方法在表单中为 GET,但在 Ajax 中为 POST

    【讨论】:

    • 我把它改成了一个帖子,但它不起作用。我认为这不应该解决问题,因为表单并没有真正提交任何只是调用函数的东西。
    • hmm 可能是因为您在 addBeer() 前面写了 return ,如果它没有插入数据库,可能是因为您没有在插入查询中在 $userID 周围添加单引号希望这可以解决它
    • 我不相信我需要 $userID 上的单引号,因为它是 int 而不是字符串。无论如何我试了一下,它没有改变任何事情。
    • 那么确切的问题是什么,它没有插入还是 ajax 没有将您的信息发送到 php 文件?
    • 我很确定它会根据我上面在阅读我页面的 chrome 中的检查元素的帖子中所说的内容发送到 php 文件。但是必须在某个地方抛出错误,因为它会在我的 ajax 调用中转到错误函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多