Inloggen bij webservice

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Quincy

Quincy

18/01/2010 13:31:00
Quote Anchor link
Hey,

Ik heb een webservice in PHP gemaakt, met gebruik van NuSOAP & wsdl:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);

?>


Om gebruik te maken van deze webservice, wordt er dus een login() functie aangeroepen welke in database.php zit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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();
    }
?>


Nu wil ik dus de functie callStream testen met de volgende testclient:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<!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);
    }
?>


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!
 
PHP hulp

PHP hulp

28/11/2024 14:16:16
 
Mr.Ark

Mr.Ark

18/01/2010 13:35:00
Quote Anchor link
Zet eens het volgende bovenin je code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?PHP

ini_set ('display_errors', 1);
error_reporting(E_ALL);

?>


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
 
Quincy

Quincy

18/01/2010 13:46:00
Quote Anchor link
Moet idd = zijn.

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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if ($_GET['action'] == 1 && $_POST['kenteken'] != null)
 
- SanThe -

- SanThe -

18/01/2010 13:52:00
Quote Anchor link
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.
 
Mr.Ark

Mr.Ark

18/01/2010 13:53:00
Quote Anchor link
Ik denk eerder dat je zoiets moet hebben.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
   }
}


?>
Gewijzigd op 01/01/1970 01:00:00 door Mr.Ark
 
Quincy

Quincy

18/01/2010 14:06:00
Quote Anchor link
Mja het script om de resultaten op te vragen werkte al, maar zodra de inlog if loop bij oa de functie callStream toegevoegd wordt, gaat het fout.

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.


Dat idee krijg ik nu dus ook, ff naar een oplossing snuisteren..
 
Quincy

Quincy

18/01/2010 20:38:00
Quote Anchor link
OK,

nu test ik ff met de functie testFunctie, deze volledig op de schop genomen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?
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)
PHP script in nieuw venster Selecteer het PHP script
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
<!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>';
            }
        }


    }
}

?>


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
 
Quincy

Quincy

18/01/2010 21:17:00
Quote Anchor link
Hm, hij werkt nu, ik zal later ff de werkende code posten.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.