Javascript PHP出现500内部服务器错误-将数据插入VFP9数据库

Javascript PHP出现500内部服务器错误-将数据插入VFP9数据库,javascript,php,Javascript,Php,我试图用PHP编写一个API脚本,将记录插入Foxpro 9数据库,但调用API时收到“500 Internal Server Error”消息。我是一名Foxpro开发人员,但对PHP还很陌生 <?php // required headers header("Access-Control-Allow-Origin: *"); header("Content-Type: application/json; charset=UTF-8"); header("Access-Control

我试图用PHP编写一个API脚本,将记录插入Foxpro 9数据库,但调用API时收到“500 Internal Server Error”消息。我是一名Foxpro开发人员,但对PHP还很陌生

<?php 

// required headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");

// database connection
$conn = new COM("ADODB.Connection");

try {
    $conn->Open('Provider=VFPOLEDB.1;DSN=RECEIPT;Mode=ReadWrite;Password="";Collating Sequence=MACHINE;');
    if (! $conn) {
       throw new Exception("Could not connect!");
    }
}
catch (Exception $e) {
    echo "Error (File:): ".$e->getMessage()."<br>";
}

if (!$conn)
    {exit("Connection Failed: " . $conn);}
echo "Connection Sucessfull";

// get posted data
$data = json_decode(file_get_contents("php://input"));

// set payment values received
$jrefnum = $data->refnum;
$jpaydate = $data->paydate;
$jcustname = $data->custname;
$jcustemail = $data->custemail;
$jdemandno = $data->demandno;
$jdemanddate = $data->demanddate;
$jamount = $data->amount;
$jrecpdesc = $data->recpdesc;
$jpaybank = $data->paybank;
$jpayref = $data->payref;

// create the payment
if(create()){
    echo "Payment was created.";
} 

// if unable to create the payment, tell the user
else {
    echo "Unable to create payment.";
}

// create payment
function create(){

    global $conn;
    global $jrefnum, $jpaydate, $jcustname, $jcustemail, $jdemandno, $jdemanddate, $jamount, $jrecpdesc, $jpaybank, $jpayref;

    // sanitize
    $srefnum=htmlspecialchars(strip_tags($jrefnum));
    $spaydate=htmlspecialchars(strip_tags($jpaydate));
    $scustname=htmlspecialchars(strip_tags($jcustname));
    $scustemail=htmlspecialchars(strip_tags($jcustemail));
    $sdemandno=htmlspecialchars(strip_tags($jdemandno));
    $sdemanddate=htmlspecialchars(strip_tags($jdemanddate));
    $samount=htmlspecialchars(strip_tags($jamount));
    $srecpdesc=htmlspecialchars(strip_tags($jrecpdesc));
    $spaybank=htmlspecialchars(strip_tags($jpaybank));
    $spayref=htmlspecialchars(strip_tags($jpayref));

   // query to insert record
    $query = "INSERT INTO SON2100 (refnum, paydate, custname, custemail, demandno, demanddate, amount, recpdesc, paybank, payref) 
      VALUES ($srefnum, $spaydate, $scustname, $scustemail, $sdemandno, $sdemanddate, $smount, $srecpdesc, $spaybank, $spayref)";

   // prepare query
    $stmt = $conn->prepare($query);

    // execute query
    if($stmt->execute()){
        return true;
    } 

    return false;
}
?>
我已经在这个网站和其他网站上讨论了一些关于这个主题的问题和评论,并且已经实施了几乎所有建议的解决方案,但都无济于事。以下是我迄今为止采取的步骤:

  • 已安装并配置IIS和PHP。(phpinfo()显示正确)
  • VFP 9已完全安装。(带VFPOLEDB驱动器)
  • 我已经分别完全清除了浏览数据
  • 我不确定问题出在哪里(因为“500 internal server error”消息可能是PHP脚本或PHP配置的问题。有人可以看看下面的PHP脚本来帮助解决问题吗

    蒂亚

    
    
    下面是调用API的javascript

    <script>
    function sendData(data) {
        var XHR = new XMLHttpRequest();
        var jsonData = {"refnum":"1111-2222-3333", "paydate":"01-06-2018", "custname":"O. A. BECKLEY VENTURES", "custemail":"beckleyventures@gmail.com", "demandno":"DEMAND NOTE 001", "demanddate":"01-06-2018", "amount":"15550.00", "recpdesc":"SONCAP", "paybank":"ZENITH BANK PLC", "payref":"0123456789"};
    
        // Define what happens on successful data submission
        XHR.addEventListener('load', function(event) {
            window.alert('Yeah! Data sent and response loaded.');
        });
    
        // Define what happens in case of error
        XHR.addEventListener('error', function(event) {
            window.alert('Oops! Something goes wrong.');
        });
    
        // Set up our request
        XHR.open('POST', 'http://localhost/sonreceipt/api/create_payment.php', true);
    
        // Add the required HTTP header for form data POST requests
        XHR.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    
        // Finally, send our data.
        XHR.send(jsonData);
    }
    </script>
    
    
    函数sendData(数据){
    var XHR=new XMLHttpRequest();
    var jsonData={“refnum”:“1111-2222-3333”,“付款日期”:“01-06-2018”,“客户名称”:“O.A.贝克利风险投资公司”,“客户电子邮件”:beckleyventures@gmail.com“,”需求编号“:”需求通知单001“,”需求日期“:”01-06-2018“,”金额“:”15550.00“,”收款行“:”SONCAP“,”付款银行“:”天顶银行股份有限公司“,”付款参考“:”0123456789“};
    //定义成功提交数据时发生的情况
    XHR.addEventListener('load',函数(事件){
    window.alert('是的!数据已发送,响应已加载');
    });
    //定义发生错误时发生的情况
    XHR.addEventListener('error',函数(事件){
    window.alert('Oops!出了点问题');
    });
    //提出我们的要求
    XHR.open('POST','http://localhost/sonreceipt/api/create_payment.php",对),;
    //为表单数据POST请求添加所需的HTTP标头
    setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    //最后,发送我们的数据。
    XHR.send(jsonData);
    }
    
    这是经过编辑的脚本,但仍然不起作用

    <?php 
    
    // required headers
    header("Access-Control-Allow-Origin: *");
    header("Content-Type: application/json; charset=UTF-8");
    header("Access-Control-Allow-Methods: POST");
    header("Access-Control-Max-Age: 3600");
    header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
    
    // database connection
    $conn = new COM("ADODB.Connection");
    
    try {
        $conn->Open('Provider=VFPOLEDB.1;DSN=RECEIPT;Mode=ReadWrite;Password="";Collating Sequence=MACHINE;');
        if (! $conn) {
           throw new Exception("Could not connect!");
        }
    }
    catch (Exception $e) {
        echo "Error (File:): ".$e->getMessage()."<br>";
    }
    
    if (!$conn)
        {exit("Connection Failed: " . $conn);}
    echo "Connection Sucessfull";
    
    // get posted data
    $data = json_decode(file_get_contents("php://input"));
    
    // set payment values received
    $jrefnum = $data->refnum;
    $jpaydate = $data->paydate;
    $jcustname = $data->custname;
    $jcustemail = $data->custemail;
    $jdemandno = $data->demandno;
    $jdemanddate = $data->demanddate;
    $jamount = $data->amount;
    $jrecpdesc = $data->recpdesc;
    $jpaybank = $data->paybank;
    $jpayref = $data->payref;
    
    // create the payment
    if(create()){
        echo "Payment was created.";
    } 
    
    // if unable to create the payment, tell the user
    else {
        echo "Unable to create payment.";
    }
    
    // create payment
    function create(){
    
        global $conn;
        global $jrefnum, $jpaydate, $jcustname, $jcustemail, $jdemandno, $jdemanddate, $jamount, $jrecpdesc, $jpaybank, $jpayref;
    
        // sanitize
        $srefnum=htmlspecialchars(strip_tags($jrefnum));
        $spaydate=htmlspecialchars(strip_tags($jpaydate));
        $scustname=htmlspecialchars(strip_tags($jcustname));
        $scustemail=htmlspecialchars(strip_tags($jcustemail));
        $sdemandno=htmlspecialchars(strip_tags($jdemandno));
        $sdemanddate=htmlspecialchars(strip_tags($jdemanddate));
        $samount=htmlspecialchars(strip_tags($jamount));
        $srecpdesc=htmlspecialchars(strip_tags($jrecpdesc));
        $spaybank=htmlspecialchars(strip_tags($jpaybank));
        $spayref=htmlspecialchars(strip_tags($jpayref));
    
       // query to insert record
        $query = "INSERT INTO SON2100 (refnum, paydate, custname, custemail, demandno, demanddate, amount, recpdesc, paybank, payref) 
          VALUES ($srefnum, $spaydate, $scustname, $scustemail, $sdemandno, $sdemanddate, $smount, $srecpdesc, $spaybank, $spayref)";
    
       // prepare query
        $stmt = $conn->prepare($query);
    
        // execute query
        if($stmt->execute()){
            return true;
        } 
    
        return false;
    }
    ?>
    

    您尚未在
    create()
    函数中声明SQL的
    值部分中使用的变量,并且缺少分号

    //  you have
    global $conn
    
    // should be
    global $conn ;
    
    使用


    查找您的错误。

    这意味着您的脚本中没有解析某些内容。我已经做了您注意到的更正,但仍然不起作用。我还在script.echo的开头放了下面一行“PHP脚本已启动!”;仍然不工作。这似乎表明php脚本没有执行。我将3行代码放在php脚本的顶部,但它仍然不工作。仍然会出现500内部服务器错误。在这一点上,我认为问题可能在于php的配置(我可能错了!)。尽管phpinfo()从浏览器调用时显示。我需要尽快使此脚本工作。是的,查找错误的3行代码现在正在工作,我已经能够在一定程度上进行故障排除。现在,问题是数据库查询。这是来自php的错误消息:php致命错误:未捕获com_异常:源代码:ADODB.Connection
    Description:参数类型错误、超出可接受的范围或相互冲突。在C:\inetpub\wwwroot\sonreceive\api\create\u test.php:67堆栈跟踪:#0 C:\inetpub\wwwroot\sonreceive\api\create\u test.php(67):com->prepare('INSERT INTO SON2100…')中,这是php文件中的数据库查询:`$query=“在SON2100中插入(参考编号、付款日期、客户名称、客户电子邮件、需求编号、需求日期、金额、收款日期、付款银行、付款参考)值($srefnum、$spaydate、$scustname、$scustemail、$sdemandno、$sdemanddate、$samount、$srecpdesc、$spaybank、$spayref)”`
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);