I'm currently developing a PHP webservice that will be consumed by the Document Management Software DocuWare. Right now it mostly consists of reading the database and getting a value by their ID. The folder for the webservice consists of the following folders:
dataLayer
ServiceLayer
frontEndLayer
lib (nusoap)
samples (nusoap)
In dataLayer
I have client.php
<?php
require "../lib/nusoap.php";
$url="http://localhost/service/dataLayer/service.php";
$client=new nusoap_client($url."?wsdl",'wsdl');
$code=$_POST[idCourse];
$courses=$client->call('listCourses',array("code"=>$code),'uri:'.$url,'uri:'.$url.'/listCourses');
if($client->fault){
echo "Error";
print_r($courses);
}else{
if($client->getError()){
echo '<b>Error: '.$client->getError().'</b>';
}else{
print_r($courses);
}
}
?>
and connection.php
<?php
require(../dataLayer/auth.php);
function connect(){
$conn = mysql_connect($host,$hostuser,$hostpw)or die(mysql_error());
mysql_select_db("tickets",$conn);
return($conn);
}
?>
With that in mind; I made the serviceLayer which consists of a simple "service.php"
file.
<?php
include('../lib/nusoap.php');
require ('../dataLayer/connection.php');
$url = "http://localhost/service/dataLayer/service.php";
$server->configureWSDL("consult",$url);
$server->wsdl->schematargetNamespace=$url;
$server->soap_defencoding='utf-8';
$server->register;
("listcourses",
array("code"=> "xsd:string"),
array("return => "xsd:string"), $url
);
function listcourses($code){
$conn=connect();
if($code!=0){
$sql="select id from ticket where id='$code'";
}else{
$sql="select id from ticket";
}
$rs=mysql_query($sql,$conn);
$i=0;
$chainset="<?xml version='1.0' encoding='utf-8'?>";
if($rs!=null){
$chainset.="<courses>";
if(mysql_num_rows($rs)>0){
while ($row = mysql_fetch_row($rs)){
$chainset.="<course>";
$chainset.="<br>";
$chainset.="<code>".row[0]."<code>";
$chainset.="<br>";
$chainset.="<name>".row[1]."<name>";
$chainset.="</course";
$i++;
}
}else{
$chainset.="<error>No data available</error>"
}
$chainset.="</course";
}else{
$chainset.="<error>Error".mysql_error()."</error>";
}
$repl=new soapval('return','xsd:string',$chainset);
return $repl;
}
if(!isset($HTTP_RAW_POST_DATA))
$HTTP_RAW_POST_DATA=file_get_contents('php://input');
$server->service($HTTP_RAW_POST_DATA);
?>
Theorically everything is OK. I made the front end layer, which is just a simple form.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<script src="jquery/jquery2.1.js"></script>
<script>
function sendForm(form){
document.getElementById(form).submit();
}
</script>
</head>
<body>
<div class="container">
<section id="content">
<form id="login" name="login" method="POST" action="../dataLayer/client.php">
<div>
<label for="idCourse">Course</label>
</div>
<br>
<div>
<input type="text" maxlength="2" id="idCourse" name="idCourse" placeholder="Example - 76" required="required" size="10"/>
</div>
<input type="reset" name="button" value="Reset"/>
<input type="submit" name="button" value="Submit"/>
</form>
</section>
</div>
</body>
</html>
And I get the following error:
( ! ) Notice: Use of undefined constant idCourse- assumed 'idCourse' in C:\wamp64\www\service\dataLayer\client.php on line 5 Call Stack
Time Memory Function Location 1 0.0003 245144 {main}( ) ...\client.php:0 Error: wsdl error: XML error parsing WSDL from
http://localhost/service/dataLayer/service.php?wsdl on line 2:
Invalid document end
I don't know what's wrong since everything seems to be fine.