如何更改已显示的变量?

时间:2014-01-12 22:09:01

标签: php jquery html mysql sql-update

我希望在没有刷新的情况下在DataBase中写入后更新html表的两行。现在一切正常,除非这件事我必须刷新页面以查看表中的修改值。

这是我的网页:

first.php

<?php
require_once('config.php');
$id=$_GET['id'];
$sql="SELECT S.ID_student, C.name, D.h-theory, D.h-practice FROM students as S, students_details as D WHERE D.ID_student=C.ID_student AND S.ID_student=$id";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);  
echo'</br></br>

<table class="my-tabel">
    <tr><td>Student name</td><td>'.$row['name'].'</td></tr>
    <tr><td>Hours of practice/td><td>'.$row['h-theory'].'</td></tr>
    <tr><td>Hours of theory</td><td>'.$row['h-practice'].'</td></tr>
</table>';

 ?>

 <form action="javascript:void(0);" method="post">
    <label>Hours of practice:&nbsp&nbsp&nbsp </label> </td> <td><input type="text" id="practice" class="text" name="h_practice"/>
    <label>Hours of theory:</label> </td> <td> <input type="text" id="theory" class="text" name="h_theory"/>
    <input type="submit" class="send-h" value="Submit">
 </form>

 <script>
    $('.send-h').click(function(){
        $('.send-h').fadeOut();
        var practice = false;
        var theory = false;
        practice = $('#practice').val();
        theory = $('#theory').val();
        var id = <?php echo json_encode($id) ?>;
        jQuery.get('add.php?practice='+practice+'&theory='+theory+'&id='+id, function(data,self){
        });
    });

 </script>

add.php

<?php
require_once('config.php');
$id=$_GET['id'];
$practice=$_GET['practice'];
$theory=$_GET['theory'];
$sql="UPDATE `student_details` SET `ore_practice`='$practice', `ore_theory`='$theory' WHERE ID_student='$id'";
$result = mysql_query($sql);
 ?>

提前谢谢!

2 个答案:

答案 0 :(得分:1)

首先:

$ id = $ _GET ['id']; // mysql注入危险

$query =" ... HERE D.ID_student=C.ID_student AND S.ID_student=$id";

使用mysql_real_escape_string作为字符串 $ id是数字,所以至少要

$ query =“... HERE D.ID_student = C.ID_student AND S.ID_student =”。($ id + 0);

要添加html行,您需要在接收表单数据的函数中使用ajax。 http://api.jquery.com/jquery.ajax/

一个不那么优雅的解决方案是add.php将输出表中所需的新html:

$('.send-h').click(function(){
  $.ajax({
    url: 'add.php?practice='+practice+'&theory='+theory+'&id='+id,
  }).done(function(html_response) {
    $( "#YOUR_LIST_ID" ).append(html_response);
  });
}

请记住,查询可能由于各种原因而失败。 这就是为什么你不应盲目添加你提交的数据。 add.php还必须输出“成功”标志。

所以add.php可以输出

echo json_encode(array('success'=>1, 'html'=> $generated_html)); //if all ok

echo json_encode(array('success'=>0, 'html'=> '')); //if all not ok

并在.done(函数(响应))中执行

var obj = jQUery.parseJSON(response);
if (obj.success == 1) {
  $( "#YOUR_LIST_ID" ).append(obj.html);
}else{
  alert('dberror');
}

您也可以使用数据表(http://datatables.net/examples/api/add_row.html) 如果你打算经常使用这种东西。

答案 1 :(得分:0)

我相信你应该能够做到以下

 <script>
    $('.send-h').click(function(){
        $('.send-h').fadeOut();
        var practice = false;
        var theory = false;
        practice = $('#practice').val();
        theory = $('#theory').val();
        var id = <?php echo json_encode($id) ?>;
        jQuery.get('add.php?practice='+practice+'&theory='+theory+'&id='+id, function(data,self){

            console.log(data); // Shows the returned data in the console
            $('#my_id').html(data); // Shows the returned data in an element with the id `my_id`

        });
    });

 </script>

您可以在echoadd.php添加回复,因此echo $result;之类的内容将成为add.php文件中的最后一行,并且应该在data中你函数的变量。

然后您可以使用$(some_selector).html(data)在某个选择器中显示返回的内容,也可以使用append$(some_selector).append(data)