Inloggen bij webservice
Ik heb een webservice in PHP gemaakt, met gebruik van NuSOAP & wsdl:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
//nusoap library importeren en configureren webservice + wsdl
require_once("lib/nusoap.php");
require_once("stream.php");
//nameservice registreren
$ns="http://localhost/nusoap";
//soap server opzetten
$server = new soap_server();
$server->configureWSDL('StreamingService',$ns);
$server->wsdl->schemaTargetNamespace=$ns;
//dynamisch WSDL is te vinden op ../streamingservice.php?wsdl
//zorgen dat database koppeling mogelijk is
include("database.php");
//webservice functies registreren
//format:
//method name
//input array
//output array
$server->register('callStream',
array('username' => 'xsd:string', 'password' => 'xsd:string', 'stream_naam' => 'xsd:string'),
array('stream_url' => 'xsd:string'),
$ns);
$server->register('listStreams',
array('username' => 'xsd:string', 'password'=> 'xsd:string'),
array('streamlist' => 'xsd:string'),
$ns);
$server->register('testFunctie',
array('username' => 'xsd:string', 'password'=> 'xsd:string'),
array('streamlist' => 'xsd:string'),
$ns);
//webservice functies definiëren
function testFunctie($username, $password){
$streamlist = 'hij werkt';
return $streamlist;
}
function callStream($username, $password, $stream_naam){
if(login($username,$password)){
//verbinden met database & ophalen streamurl
db_connect();
$sql = "SELECT bestandsnaam FROM videos WHERE naam LIKE '".$stream_naam."'";
$database_result = mysql_fetch_object($sql) or die(mysql_error());
$url_stream = 'rtmp://serveripadres/vod/'.$database_result;
//db_close();
//return new soapval('stream_url','string', $url_stream);
return $url_stream;
}
else{
$error = "Geen Stream Gevonden";
//return new soapval('stream_url','string', $error);
return $error;
}
}
function listStreams(){
if(login($username,$password)== true){
//verbinden met database & ophalen streams
db_connect();
$sql = "SELECT * FROM videos";
$database_result= mysql_query($sql) or die(mysql_error());
$streams = array();
while($row = mysql_fetch_object($database_result)) {
$streams = new stream();
$streams->naam = $row->naam;
$streams->omschrijving = $row->omschrijving;
}
db_close();
return $streams;
//return new soapval('streamlist','array', $streams);
}
else{
$error = "Aanmelden StreamingService Mislukt";
return $error;
}
//return new soapval('streamlist','string', $streams);
}
//overige functies
//invoke service
$server->service($HTTP_RAW_POST_DATA);
?>
//nusoap library importeren en configureren webservice + wsdl
require_once("lib/nusoap.php");
require_once("stream.php");
//nameservice registreren
$ns="http://localhost/nusoap";
//soap server opzetten
$server = new soap_server();
$server->configureWSDL('StreamingService',$ns);
$server->wsdl->schemaTargetNamespace=$ns;
//dynamisch WSDL is te vinden op ../streamingservice.php?wsdl
//zorgen dat database koppeling mogelijk is
include("database.php");
//webservice functies registreren
//format:
//method name
//input array
//output array
$server->register('callStream',
array('username' => 'xsd:string', 'password' => 'xsd:string', 'stream_naam' => 'xsd:string'),
array('stream_url' => 'xsd:string'),
$ns);
$server->register('listStreams',
array('username' => 'xsd:string', 'password'=> 'xsd:string'),
array('streamlist' => 'xsd:string'),
$ns);
$server->register('testFunctie',
array('username' => 'xsd:string', 'password'=> 'xsd:string'),
array('streamlist' => 'xsd:string'),
$ns);
//webservice functies definiëren
function testFunctie($username, $password){
$streamlist = 'hij werkt';
return $streamlist;
}
function callStream($username, $password, $stream_naam){
if(login($username,$password)){
//verbinden met database & ophalen streamurl
db_connect();
$sql = "SELECT bestandsnaam FROM videos WHERE naam LIKE '".$stream_naam."'";
$database_result = mysql_fetch_object($sql) or die(mysql_error());
$url_stream = 'rtmp://serveripadres/vod/'.$database_result;
//db_close();
//return new soapval('stream_url','string', $url_stream);
return $url_stream;
}
else{
$error = "Geen Stream Gevonden";
//return new soapval('stream_url','string', $error);
return $error;
}
}
function listStreams(){
if(login($username,$password)== true){
//verbinden met database & ophalen streams
db_connect();
$sql = "SELECT * FROM videos";
$database_result= mysql_query($sql) or die(mysql_error());
$streams = array();
while($row = mysql_fetch_object($database_result)) {
$streams = new stream();
$streams->naam = $row->naam;
$streams->omschrijving = $row->omschrijving;
}
db_close();
return $streams;
//return new soapval('streamlist','array', $streams);
}
else{
$error = "Aanmelden StreamingService Mislukt";
return $error;
}
//return new soapval('streamlist','string', $streams);
}
//overige functies
//invoke service
$server->service($HTTP_RAW_POST_DATA);
?>
Om gebruik te maken van deze webservice, wordt er dus een login() functie aangeroepen welke in database.php zit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
//include_once("backend/scripts/functions.php")
$USER = "avans_uitgeverij";
$PASS = "wachtwoord";
$SERVER = "localhost";
function db_connect(){
$connection = mysql_connect($SERVER, $USER, $PASS)
or die ("Unable to connect to server.");
mysql_select_db("avans_uitgeverij", $connection);
}
function db_close(){
$connection = mysql_connect($SERVER, $USER, $PASS);
mysql_close($connection);
}
function login($username,$password){
//kijken of de gespecificeerde inloggegevens kloppen
db_connect();
$sql = "SELECT wachtwoord FROM klanten WHERE gebruikersnaam LIKE'".$username."'";
$isingelogt = mysql_query($sql) or die(mysql_error());
if($password == $isingelogt){
return true;
}
else{
return false;
}
//db_close();
}
?>
//include_once("backend/scripts/functions.php")
$USER = "avans_uitgeverij";
$PASS = "wachtwoord";
$SERVER = "localhost";
function db_connect(){
$connection = mysql_connect($SERVER, $USER, $PASS)
or die ("Unable to connect to server.");
mysql_select_db("avans_uitgeverij", $connection);
}
function db_close(){
$connection = mysql_connect($SERVER, $USER, $PASS);
mysql_close($connection);
}
function login($username,$password){
//kijken of de gespecificeerde inloggegevens kloppen
db_connect();
$sql = "SELECT wachtwoord FROM klanten WHERE gebruikersnaam LIKE'".$username."'";
$isingelogt = mysql_query($sql) or die(mysql_error());
if($password == $isingelogt){
return true;
}
else{
return false;
}
//db_close();
}
?>
Nu wil ik dus de functie callStream testen met de volgende testclient:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?php
require_once("lib/nusoap.php");
//include("stream.php")
//include('database.php');
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test</title>
</head>
<body>
<form action="webservicetestclient.php?action=1" method="POST">
Vind stream<br />
<input type='text' name='kenteken'><br />
<input type='submit' value='Zoek'>
</form>
</body>
</html>
<?php
if ($_GET['action'] == 1) {
//$result = new stream();
$zoek_stream = $_POST['kenteken'];
$client = new nusoap_client('http://uitgeverij.quincyvermue.nl/webservice/streamingservice.php?wsdl', true);
$result = $client->call('callStream', array('username' => 'Quincy', 'password' => '098f6bcd4621d373cade4e832627b4f6','stream_naam' => $zoek_stream));
//echo implode(" ",$result);
echo $result;
//print_r($result);
}
?>
<?php
require_once("lib/nusoap.php");
//include("stream.php")
//include('database.php');
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test</title>
</head>
<body>
<form action="webservicetestclient.php?action=1" method="POST">
Vind stream<br />
<input type='text' name='kenteken'><br />
<input type='submit' value='Zoek'>
</form>
</body>
</html>
<?php
if ($_GET['action'] == 1) {
//$result = new stream();
$zoek_stream = $_POST['kenteken'];
$client = new nusoap_client('http://uitgeverij.quincyvermue.nl/webservice/streamingservice.php?wsdl', true);
$result = $client->call('callStream', array('username' => 'Quincy', 'password' => '098f6bcd4621d373cade4e832627b4f6','stream_naam' => $zoek_stream));
//echo implode(" ",$result);
echo $result;
//print_r($result);
}
?>
Echter, krijg ik helemaal niks terug. Er word niks ge-echo't (of een lege array/string).
Wanneer ik echter de login loop verwijder uit de functie callStream, krijg ik netjes een resultaat terug.
Iemand die hier zijn licht op wil werpen? Alvast bedankt!
Denk dat het komt omdat je niet controleerd of je $_POST wel bestaat.
Verder snap ik niet waarom je LIKE gebruikt in je query's ??
Moet dat niet gewoon = zijn?
Gewijzigd op 01/01/1970 01:00:00 door Mr.Ark
Zodra ik die errormessages in de test client aanzet komen er een hoop warnings uit nusoap library naar voren hehe..
Overigens geeft ie ook niks weer wanneer ik bij de knop het volgende toevoeg:
Bijvoorbeekd dit:
$isingelogt = mysql_query($sql) or die(mysql_error());
if($password == $isingelogt){
Hier vergelijk je een password met een resultset van een query.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?PHP
# Kijken of er gepost wordt
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
# Kijken of er een kenteken wordt gepost
if(!empty($_POST['kenteken']))
{
$client = new nusoap_client('http://uitgeverij.quincyvermue.nl/webservice/streamingservice.php?wsdl', true);
$result = $client->call('callStream', array('username' => 'Quincy', 'password' => '098f6bcd4621d373cade4e832627b4f6','stream_naam' => $zoek_stream));
echo $result;
}
}
?>
# Kijken of er gepost wordt
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
# Kijken of er een kenteken wordt gepost
if(!empty($_POST['kenteken']))
{
$client = new nusoap_client('http://uitgeverij.quincyvermue.nl/webservice/streamingservice.php?wsdl', true);
$result = $client->call('callStream', array('username' => 'Quincy', 'password' => '098f6bcd4621d373cade4e832627b4f6','stream_naam' => $zoek_stream));
echo $result;
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Mr.Ark
SanThe schreef op 18.01.2010 13:52:
Ik geloof niet dat bovenstaand script correct kan werken.
Bijvoorbeekd dit:
$isingelogt = mysql_query($sql) or die(mysql_error());
if($password == $isingelogt){
Hier vergelijk je een password met een resultset van een query.
Bijvoorbeekd dit:
$isingelogt = mysql_query($sql) or die(mysql_error());
if($password == $isingelogt){
Hier vergelijk je een password met een resultset van een query.
Dat idee krijg ik nu dus ook, ff naar een oplossing snuisteren..
nu test ik ff met de functie testFunctie, deze volledig op de schop genomen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?
function testFunctie($username, $password){
$USER = "avans_uitgeverij";
$PASS = "wachtwoord";
$SERVER = "localhost";
$connection = mysql_connect($SERVER, $USER, $PASS)
or die ("Unable to connect to server.");
mysql_select_db("avans_uitgeverij", $connection);
$query = "SELECT * FROM klanten WHERE gebruikersnaam='".$username."' AND wachtwoord='".md5($password)."'";
$result = mysql_query($query, $connection);
$aantal = mysql_num_rows($result);
if($aantal == 1){
$streamlist = "het werkt!";
}
if($aantal == 0){
$streamlist = "inloggen mislukt";
}
else{
$streamlist = 'er ging wat mis';
}
return array('streamlist' => $streamlist);
}?>
function testFunctie($username, $password){
$USER = "avans_uitgeverij";
$PASS = "wachtwoord";
$SERVER = "localhost";
$connection = mysql_connect($SERVER, $USER, $PASS)
or die ("Unable to connect to server.");
mysql_select_db("avans_uitgeverij", $connection);
$query = "SELECT * FROM klanten WHERE gebruikersnaam='".$username."' AND wachtwoord='".md5($password)."'";
$result = mysql_query($query, $connection);
$aantal = mysql_num_rows($result);
if($aantal == 1){
$streamlist = "het werkt!";
}
if($aantal == 0){
$streamlist = "inloggen mislukt";
}
else{
$streamlist = 'er ging wat mis';
}
return array('streamlist' => $streamlist);
}?>
De code van de testclient:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?php
require_once("lib/nusoap.php");
//include("stream.php")
//include('database.php');
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
Vind stream<br />
<input type='text' name='kenteken'><br />
<input type='submit' value='Zoek'>
</form>
</body>
</html>
<?php
# Kijken of er gepost wordt
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
# Kijken of er een kenteken wordt gepost
if(!empty($_POST['kenteken']))
{
//$result = new stream();
$stream_naam = $_POST['kenteken'];
$client = new nusoap_client('http://uitgeverij.quincyvermue.nl/webservice/streamingservice.php?wsdl', true);
$err = $client->getError();
if ($err) {
// Display the error
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
// At this point, you know the call that follows will fail
}
$result = $client->call('testFunctie', array('username' => 'Quincy', 'password' => 'test'));
if ($client->fault) {
echo '<h2>Fault</h2><pre>';
print_r($result);
echo '</pre>';
} else {
// Check for errors
$err = $client->getError();
if ($err) {
// Display the error
echo '<h2>Error</h2><pre>' . $err . '</pre>';
} else {
// Display the result
echo '<h2>Result</h2><pre>';
print_r($result);
echo '</pre>';
}
}
}
}
?>
<?php
require_once("lib/nusoap.php");
//include("stream.php")
//include('database.php');
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
Vind stream<br />
<input type='text' name='kenteken'><br />
<input type='submit' value='Zoek'>
</form>
</body>
</html>
<?php
# Kijken of er gepost wordt
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
# Kijken of er een kenteken wordt gepost
if(!empty($_POST['kenteken']))
{
//$result = new stream();
$stream_naam = $_POST['kenteken'];
$client = new nusoap_client('http://uitgeverij.quincyvermue.nl/webservice/streamingservice.php?wsdl', true);
$err = $client->getError();
if ($err) {
// Display the error
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
// At this point, you know the call that follows will fail
}
$result = $client->call('testFunctie', array('username' => 'Quincy', 'password' => 'test'));
if ($client->fault) {
echo '<h2>Fault</h2><pre>';
print_r($result);
echo '</pre>';
} else {
// Check for errors
$err = $client->getError();
if ($err) {
// Display the error
echo '<h2>Error</h2><pre>' . $err . '</pre>';
} else {
// Display the result
echo '<h2>Result</h2><pre>';
print_r($result);
echo '</pre>';
}
}
}
}
?>
De testclient geeft als resultaat: 'Array', maar ik krijg het niet voor elkaar (ook niet met bv. implode) om uit te lezen wat er feitelijk ín de array zit. Wanneer ik implode($result) doe, krijg ik als foutmelding dat $result geen array is..
Overigens werkt de SQL query wel, deze heb ik getest in een ander bestand.
Gewijzigd op 01/01/1970 01:00:00 door Quincy
Hm, hij werkt nu, ik zal later ff de werkende code posten.