如何确定此数据库插入和检索的中断位置?

时间:2011-11-30 04:01:21

标签: php jquery mysql

问题解决了......变量未定义。当stackoverflow允许我回答自己的问题时,我会添加完整的答案

更新,firebug告诉我plugin.php中的变量大律师是未定义的,但我确实定义了该变量(或者至少我尝试过) 这是它未定义的行:if(barrister.attr("value"))

这是我尝试定义它的行:var barrister = $('input:radio[name=barrister]:checked').val();


我正在使用带有单选按钮的表单来提交数据。文件plugin.php应该使用javascript / ajax获取数据,然后将其发送到results.php,以便可以将其插入到数据库中。信息也从数据库中检索出来,并且应该插入到html中。我无法弄清楚它在哪里崩溃,但我确实知道数据库连接本身是有效的。知道如何找出破碎的链接吗?当我测试并检查数据库时,其中没有数据。

the database

表格

<form method="post" id="form">  
    <table>  
    <tr>  
        <td><label>Barrister's Exam</label></td>  
        <td><input type="radio" id="barrister" name="barrister" value="1" /> Pass</td>
        <td><input type="radio" id="barrister" name="barrister" value="0" /> Fail</td>  
    </tr>
    <tr>  
        <td>Submit</td>  
        <td><input id="send" type="submit" value="Submit" /></td>  
    </tr>  
    </table>
</form>  

使用plugin.php获取表单数据

function my_function() { ?>

<script type="text/javascript">

$(document).ready(function(){
    //global vars
    var barrister = $('input:radio[name=barrister]:checked').val();
        var loading = $("#loading");
    var messageList = $(".content > ul");

    //functions
    function updateShoutbox(){
        //just for the fade effect
        messageList.hide();
        loading.fadeIn();
        //send the post to shoutbox.php
        $.ajax({
            type: "POST", url: "http://yearofcall.com/wp-content/plugins/myplugin/results.php", data: "action=update",
            complete: function(data){
                loading.fadeOut();
                messageList.html(data.responseText);
                messageList.fadeIn(2000);
            }
        });
    }
    //check if all fields are filled
    function checkForm(){
        if(barrister.attr("value"))
            return true;
        else
            return false;
    }

    //Load for the first time the shoutbox data
    updateShoutbox();

    //on submit event
    $("#form").submit(function(){
        if(checkForm()){
            var barrister = barrister.attr("value");
            //we deactivate submit button while sending
            $("#send").attr({ disabled:true, value:"Sending..." });
            $("#send").blur();
            //send the post to results.php
            $.ajax({
                type: "POST", url: "http://yearofcall.com/wp-content/plugins/myplugin/results.php", data: "action=insert&barrister=" + barrister,
                complete: function(data){
                    messageList.html(data.responseText);
                    updateShoutbox();
                    //reactivate the send button
                    $("#send").attr({ disabled:false, value:"Send" });
                }
             });
        }
        else alert("Please fill all fields!");
        //we prevent the refresh of the page after submitting the form
        return false;
    });
});

</script>
<?php

}

add_action('wp_head', 'my_function');

使用results.php将数据放入数据库“year”的“results”表中我知道数据库连接正常工作

<?php
define("HOST", "host");  
define("USER", "user");  
define("PASSWORD", "password");  
define("DB", "year");  

/************************
    FUNCTIONS
/************************/
function connect($db, $user, $password){
    $link = @mysql_connect($db, $user, $password);
    if (!$link)
        die("Could not connect: ".mysql_error());
    else{
        $db = mysql_select_db(DB);
        if(!$db)
            die("Could not select database: ".mysql_error());
        else return $link;
    }
}
function getContent($link, $num){
    $res = @mysql_query("SELECT barrister FROM results ORDER BY date DESC LIMIT ".$num, $link);
    if(!$res)
        die("Error: ".mysql_error());
    else
        return $res;
}
function insertMessage($barrister){
    $query = sprintf("INSERT INTO results(barrister) VALUES('%s');", mysql_real_escape_string(strip_tags($barrister))
));
    $res = @mysql_query($query);
    if(!$res)
        die("Error: ".mysql_error());
    else
        return $res;
}

/******************************
    MANAGE REQUESTS
/******************************/
if(!$_POST['action']){
    //We are redirecting people to our shoutbox page if they try to enter in our shoutbox.php
    header ("Location: index.html"); 
}
else{
    $link = connect(HOST, USER, PASSWORD);
    switch($_POST['action']){
        case "update":
            $res = getContent($link, 100);
            while($row = mysql_fetch_array($res)){
                $result .= "<li><strong>".$row['user']."</strong><img src=\"http://eslangel.com/wp-content/plugins/myplugin/CSS/images/bullet.gif\" alt=\"-\" />".$row['message']." </li>";
            }
            echo $result;
            break;
        case "insert":
            echo insertMessage($_POST['barrister']);
            break;
    }
    mysql_close($link);
}


?>

从数据库中检索数据时返回的html

 <div id="container">  
        <ul class="menu">  
            <li></li>  
        </ul>  
        <span class="clear"></span>  
        <div class="content">  
            <div id="loading"><img src="http:///></div>  
            <ul>  
            <ul>  
        </div>  
        </div> 

4 个答案:

答案 0 :(得分:1)

我注意到的第一个错误是所有单选按钮都具有相同的ID。 ID属性在页面上应该是唯一的。除此之外,调试javascript的最佳工具是控制台。

Javascript Debugging for beginners

修改

以下是使用您的标记http://jsfiddle.net/UADu5/

提交的ajax表单示例
$(function(){
  // Submit form via ajax
  $('#check').click(function(){
    var barrister = null
    $.each($("input[name='barrister']:checked"), function(){
      if($(this).val() == 1)
        barrister = $(this).attr('value');
    });
    if(barrister){
      $.ajax({
        type: "POST", url: "http://yearofcall.com/wp-content/plugins/myplugin/results.php", 
        data: "action=insert&barrister=" + barrister,
        complete: function(data){
          messageList.html(data.responseText);
          updateShoutbox();

          //reactivate the send button
          $("#send").attr({ disabled:false, value:"Send" });
        }
      });
    } else {
      alert('Please fill all fields!')
    }

  })
})

<form method="post" id="form">
  <fieldset>
    <legend>Grade Exams</legend>
    <ul>
      <li>
        <p>Barrister's Exam</p>
        <label>
          <input type="radio" name="barrister" value="1" /> Pass
        </label>
        <label>
          <input type="radio" name="barrister" value="0" /> Fail
        </label>
      </li>  
      <li class="submit">
        <input type="button" id="check" value="Test">
      </li>
    </ul>
  </fieldset>
</form>

答案 1 :(得分:0)

我强烈建议使用Firebug,因为它会向您显示所有正在发出的请求以及所有请求/响应标头信息,以便您可以查看AJAX是否以及在哪里出错。它也适用于调试HTML / CSS的东西!

Firebug在JavaScript和CSS方面几乎改变了我的生活。

答案 2 :(得分:0)

我认为你在insert语句中有错误:

//remove extra bracket and semicolon
sprintf("INSERT INTO results(barrister) VALUES('%s')", mysql_real_escape_string(strip_tags($barrister))
);

希望有所帮助

答案 3 :(得分:0)

更改

var barrister = $('input:radio[name=barrister]:checked').val();

barrister = $('input:radio[name=barrister]:checked');

应该有帮助。