0

我已经编写了用于在同一页面上显示记录的代码,但它不起作用。实际上,我希望在插入同一页面的页面中以表格格式显示所有记录,并且还显示最近添加的记录而不刷新页面。

ajaxinsert.php

<script type="text/javascript" src="../jquery.js"></script>

<script type="text/javascript" >
$(document).ready(function() {
    $("#insert").click(function() {
       var name  = $("#name").val();
       var rno  = $("#rno").val();
    var address = $("#address").val();

    //var dataString = "&name="+name"+&address="+address;
    $.ajax({
      type:'POST',
      data:{name: name,
            rno:rno,
            address:address},
      url:'demo_insert.php',
      success:function(data){
       if(data="inserted") {
          alert("Insertion Success");
        } else {
          alert("Not Inserted"); 
        }
     } 
   });  
    });
});
</script>
</head>

<body>
<form id="myform" action="demo_insert.php"> 
<label>Name: </label> <input id="name" type="text" />
<label>Rno: </label> <input id="rno" type="text" />
<label>Address: </label> <input id="address" type="text" />
<input name="Submit" type="button"  id="insert" value="Submit"/>
<!--<a id="insert" title="Insert Data" href="#">Push into mysql</a>-->
 <!-- For displaying a message -->

<div id="message"></div>
</form>
</body>

demo_insert.php

<?
    include('connection.php');
 //Pull data from home.php front-end page

 $name=mysql_escape_string($_POST['name']);
 $rno=mysql_escape_string($_POST['rno']);
 $address=mysql_escape_string($_POST['address']);
 //Insert Data into mysql
$query=mysql_query("INSERT INTO school(name,rno,address) VALUES('$name','$rno','$address')");

$dispquery=mysql_query("select * from school"); 
echo "<table border=1>";

   echo "<tr>";
   echo"<td>Srno</td>";
   echo "<td>Name</td>";
   echo"<td>Rno</td>";
   echo "<td>Address</td>";  
   echo"</tr>";
$i=1;
while($result=mysql_fetch_array($dispquery))
{
    echo "<tr>";
    echo "<td>" .$i."</td>";
    echo "<td>" .$result['name'] ."</td>";
     echo "<td>" .$result['rno'] ."</td>"; 
    echo "<td>" .$result['address'] ."</td>";   
    echo "</tr>";
    $i++;
}
   echo"</table>";
?>
4

4 回答 4

1

您必须实际将内容添加到 DOM。在您的 Ajax 调用的回调函数中,您将获得数据,您可以使用这些数据使用.append()或之类的函数来填充您的表.html()。要查看您的 Ajax 调用从您的 PHP 脚本返回的内容,请console.log(data)输入回调,然后您可以使用它来确定您想要如何生成内容。

此外,不推荐使用 PHPmysql扩展。mysqli请用或PDO替换它。

于 2013-04-09T01:45:59.490 回答
1

首先,请使用 mysqli 或 PDO 连接到数据库,mysql 方法已被弃用,并且很快就会停止工作并破坏所有代码。

其次,你几乎一直到那里,虽然不完全。我建议采取稍微不同的方法,也许可以使用您的 jQuery 和 JSON。

像这样更改第一个文件:

<script type="text/javascript" >
    $(document).ready(function() {
        $.ajax({
            type:'POST',
            data: {
                name: $("#name").val(),
                rno: $("#rno").val(),
                address: $("#address").val()
            },
            dataType: 'json',
            url:'demo_insert.php',
            success: function(data) {
                if(data.insert) {
                    alert("Insertion Success");
                    // All your content will be in data.output now which you can append wherever
                } else {
                    alert("Not Inserted"); 
                }
            } 
        }); 
    });
</script>

和你的 php 一样,请注意我没有将你的代码更改为 PDO 或 mysqli,但你应该调查一下!

<?php
include('connection.php');
//Pull data from home.php front-end page

$response = new StdClass();

$name=mysql_escape_string($_POST['name']);
$rno=mysql_escape_string($_POST['rno']);
$address=mysql_escape_string($_POST['address']);

//Insert Data into mysql
$query=mysql_query("INSERT INTO school(name,rno,address) VALUES('$name','$rno','$address')");

// Add the insert to the response
$response->insert = !$query ? false : true;

// Only continue if its true
if ($response->insert) {
$dispquery=mysql_query("select * from school");
    $response->output = '';
    $response->output .= "
        <table border=1>
        <tr>
        <td>Srno</td>
        <td>Name</td>
        <td>Rno</td>
        <td>Address</td>
        </tr>";
    $i=1;

    while($result=mysql_fetch_array($dispquery)) {
        $response->output .= "
        <tr>
        <td>$i</td>
        <td>{$result['name']}</td>
        <td>{$result['rno']}</td>
        <td>{$result['address']}</td>
        </tr>";
        $i++;
    }
    $response->output .= "</table>";
}

header('Content-Type: application/json');
echo json_encode($response);

?>

于 2013-04-09T01:57:18.133 回答
0

您的if陈述与您返回的内容不符。您正在响应一个 html 表格,并在您的成功回调中将其视为一个简单的变量。

success:function(data){
       if(data="inserted") {
          alert("Insertion Success");
        } else {
          alert("Not Inserted"); 
        }
     } 

您想附加data到您的 DOM 或用它做其他事情。根据您的 php,您希望将其附加到某处。

于 2013-04-09T01:48:47.227 回答
0

几件事,对我看到的一些问题的概括回答

通常,如果您遵循某种 php 编码的 MVC 结构,您将希望将您的读取查询逻辑与更新、插入逻辑等分开

因此,在您的 php 上,如果您将插入封装在一个函数或单独的页面中,如果插入成功,您可以返回一个布尔值,然后通过成功函数中的另一个 ajax getJson 调用您的读取表查询

在 php 中,您通常希望返回查询结果集 echo json_encode($results)

然后在你的 javascript 中,一旦 ajax 完成()(用于处理 ajax json 成功的最新 jquery 方法)或 success(),你可以使用 $.each 来遍历结果集

如果您有兴趣,我可以提供更多代码示例

于 2013-04-09T01:57:16.480 回答