【问题标题】:AJAX PHP Database query not workingAJAX PHP数据库查询不起作用
【发布时间】:2015-11-25 01:22:43
【问题描述】:

我正在尝试学习 AJAX,但进展并不顺利。在我的网站上,用户可以请求培训。提交请求后,教师应该能够从此页面管理请求。但是,当尝试“声明”请求时,AJAX 无法正常运行,没有错误。

  • 内部 html 不变
  • 数据库条目未更改
  • 我知道 php 文件正在运行,因为我之前收到了错误

PHP/HTML/Javascript/AJAX

<table class="sidebar" style="width:50%;">
    <tr><th>My Open Requests</th></tr>
    <div id="myopen">
    <?php
        if(!empty($myopen)){
            foreach($myopen as $request){
                $date = date('F d Y - gA', $request['submitted']);
                echo '<tr><td>'.$request['vid'].' - '.$request['type'].' - '.$request['comments'].' - '.$date.'</td></tr>';
            }
        }
        else{
            echo '<tr><td>NONE</td></tr>';
        }
    ?>
    </div>
</table>

<table class="sidebar" style="width:50%;">
    <tr><th>My Closed Requests</th></tr>
    <?php
        if(!empty($myclosed)){
            foreach($myclosed as $request){
                $date = date('F d Y - gA', $request['submitted']);
                echo '<tr><td>'.$request['vid'].' - '.$request['type'].' - '.$request['comments'].' - '.$date.'</td></tr>';
            }
        }
        else{
            echo '<tr><td>NONE</td></tr>';
        }
    ?>
</table>

<table class="sidebar" style="width:50%;">
    <tr><th>Unclaimed Requests</th></tr>
    <div id="unclaimed">
    <?php
        if(!empty($unclaimed)){
            foreach($unclaimed as $request){
                $date = date('F d Y - gA', $request['submitted']);
                $id = $request['id'];
                $name = "'".$this->registry->getData('firstname').' '.$this->registry->getData('lastname')."'";
                echo '<tr><td>'.$request['vid'].' - '.$request['type'].' - '.$request['comments'].' - '.$date.' <a href="" onclick="claim('.$id.','.$name.')">Claim</a></td></tr>';

            }
        }
        else{
            echo '<tr><td>NONE :)</td></tr>';
        }
    ?>
    </div>
</table>
<table class="sidebar" style="width:50%;">
    <tr><th>Request Log</th></tr>
    <?php
        if(!empty($claimed)){
            foreach($claimed as $request){
                echo '<tr><td>'.print_r($request).'</td></tr>';
            }
        }
        else{
            echo '<tr><td>NONE</td></tr>';
        }
    ?>
</table>
<script>
    function claim(id, name){
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                document.getElementById("myopen").innerHTML = xmlhttp.responseText;
            }
        };
        xmlhttp.open("POST", "/lib/AJAX/trainingRequestManage.php", true);
        xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlhttp.send("id="+id+"&name="+name);
    }
</script>

trainingRequestManage.php

<?php
$id = $_POST["id"];
$id = $_POST["name"];

include('http://www.ivaoxa.org/config/db.php');

$sql = "UPDATE trainingRequests SET trainer='".$name."' WHERE id=".$id;

// Prepare statement
$stmt = $db->prepare($sql);

// execute the query
$stmt->execute();

echo 'test';

db.php

<?php
$db = new PDO('mysql:host=localhost;dbname=xx;charset=utf8', 'xx', 'xx');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

【问题讨论】:

  • $myopen 应该是什么?
  • 这不是准备声明的正确方法,因此请同时查看,以便您从一开始就学习正确的方法
  • $myopen 是一个数组,其中包含已声明的每个请求的数据库信息。同样,$unclaimjed 是尚未声明的训练请求的数据库信息。这些变量是在包含之前计算的,并且它们被很好地传递了
  • @Hanky 我已经直接从 w3schools 获得了准备好的语句代码,如果不正确,我很抱歉
  • $id = $_POST["id"]; $id = $_POST["name"]; ???错误报告会在这里帮助你。未定义变量名通知。

标签: javascript php mysql ajax database


【解决方案1】:

除非http://www.ivaoxa.org/config/db.php 用作纯文件,否则以下行永远不会起作用:

include('http://www.ivaoxa.org/config/db.php');

更多信息:http://php.net/manual/en/function.include.php

【讨论】:

  • 详细说明,如果此文件位于同一服务器上,您需要提供该文件的服务器路径。像这样:include('config/db.php');
  • 即使我将数据库连接信息直接放入php也没有
  • 是的,听起来您的连接字符串可能有问题。你能发布你db.php的内容吗?忽略敏感信息。此外,看起来您正在使用 PDO,因此将其包装在 try catch 中,以便您可以看到错误:try { $stmt = $db->prepare($sql); } catch(Exception $e) { echo '错误:'; var_dump($e->getMessage()); }
  • @aknatn 发布 db.php 问题。我添加了 try catch 仍然没有
  • 你应该得到一个异常,没有错误或任何东西?现在尝试评论包含并在尝试中调用 PDO,就像从这篇文章 stackoverflow.com/a/8776392/563043 一样验证 PDO 已安装:stackoverflow.com/a/3131455/563043 并且您有错误报告:error_reporting(E_ALL);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 2011-12-07
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多