tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
543
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Erks
    Erks Erks ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    237
    Hi,
    ich habe seit gestern mit dem Webservice, den ich über PHP anstatt über ASP.NET laufenlassen kann, angefangen.

    Meine ersten gehversuche haben geklappt, doch nun kommt ich zu den MySQL Datenbankabfragen, die ich in ein C# Programm einlesen möchte.

    Was geklappt hat, war:
    PHP-Code:
    require('mysql.php');
    require_once (
    "lib/nusoap.php");
    $namespace "http://www.event4net.de/....";
    $server = new soap_server();
    $server->configureWSDL("WebService_ConnectPHP2MySQL");
    $server->wsdl->schemaTargetNamespace $namespace;

    $server->register(
                    
    'insert',
                    array(
    'name'=>'xsd:int'), 
                    array(
    'return'=>'xsd:string'),
                    
    $namespace,
                    
    false,
                    
    'rpc',
                    
    'encoded',
                    
    'A simple insert into'
    );

    ....

    function 
    insert($id) {
        require(
    'mysql.php');
        
    mysql_query("INSERT INTO test VALUES('".$id."')") or die(mysql_error());
        return 
    "Data executed";
    }
     
    ....
               
    $POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) 
                    ? 
    $GLOBALS['HTTP_RAW_POST_DATA'] : '';
                     
    $server->service($POST_DATA);                
    exit(); 
    Nun wollte ich das mit Select ausprobieren, aber da hakts. Irgendwie wird die Array nicht richtig gelesen, oder gefüllt. Wieso?

    PHP-Code:
    require('mysql.php');
    require_once (
    "lib/nusoap.php");
    $namespace "http://www.event4net.de/....";
    $server = new soap_server();
    $server->configureWSDL("WebService_ConnectPHP2MySQL");
    $server->wsdl->schemaTargetNamespace $namespace;


    $server->wsdl->addComplexType('ListArray',
                    
    'complexType',
                    
    'array',
                    
    '',
                    
    'SOAP-ENC:Array',
                    array(),
                    array(
                        array(
    'ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'xsd:string[]')
                    ),
                    
    'xsd:string'
    );

    $server->register(
                    
    'select'
                    array( ), 
                    array(
    'return' => 'tns:ListArray'),
                    
    $namespace,
                    
    false,
                    
    'rpc',
                    
    'encoded',
                    
    'A simple select'
    );

    function 
    select() {
        require(
    'mysql.php');
        
        
    $game=array();
        
        
    $select_ort "SELECT id FROM test";    
        if(!
    $res_id_ort mysql_query($select_ort)){
            die(
    mysql_error());
        }
        while(
    $ort=mysql_fetch_array($res_id_ort)){
            
    $game[] = $ort;
        }
        return array(
    "ListArray" => $game);
    }
                 
    $POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) 
                    ? 
    $GLOBALS['HTTP_RAW_POST_DATA'] : '';

    $server->service($POST_DATA);                
    exit(); 
    Die SQL Tabelle ist...
    Code :
    1
    
    CREATE TABLE test(id varchar(10) PRIMARY KEY);

    Danke für Antworten
    Geändert von Erks (16.07.11 um 15:06 Uhr)
     
    PHP-Code:
    <?php
    echo 'http://acs-it-worx.de/'// mit Android App
    echo 'http://www.youtube.com/user/ACSITWorx/'// mein YouTube Kanal
    echo '-----------------------------------------------------------------';
    echo 
    'http://www.autoservice-asberg.de/';
    ?>

  2. #2
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.520
    Ein die() in einem Webservice ist pfui. Bau das doch mal so um, das du ein Logging hast, ob überhaupt die Funktion select() aufgerufen wird. trigger_error() hilft dir dabei.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  3. #3
    Avatar von Erks
    Erks Erks ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    237
    Das SELECT Statement wird augerufen. Das hab ich in der DB selbst eingegeben und es hat mir das Erfragte geliefert.

    Wie kann ich das mit trigger_error() realisieren, damit ich weiß, ob select() aufgerufen wird?

    anstatt die() dann ...
    Code :
    1
    
    sqlerrorhandler("(".mysql_errno().") ".mysql_error(), $query, $_SERVER['PHP_SELF'], __LINE__);

    ?
    Geändert von Erks (23.07.11 um 23:37 Uhr)
     
    PHP-Code:
    <?php
    echo 'http://acs-it-worx.de/'// mit Android App
    echo 'http://www.youtube.com/user/ACSITWorx/'// mein YouTube Kanal
    echo '-----------------------------------------------------------------';
    echo 
    'http://www.autoservice-asberg.de/';
    ?>

  4. #4
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.520
    Wird zum Beispiel in diesem Tutorial erklärt: http://www.tutorials.de/content/1126...p-scripts.html
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  5. #5
    Avatar von Erks
    Erks Erks ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    237
    Ok, aber bleiben wir kurznoch bei diesem die()

    Als ich hab mal extern ausprobiert, ob mein SQL Statement überhaupt das Richtige ausgibt. Ja tut es, auch als 2 Dimensionale Array.

    Hier nochmal der relevante PHP Code:
    PHP-Code:
    require('mysql.php');
    require_once (
    "lib/nusoap.php");
    $namespace "http://www.....";
    $server = new soap_server();
    $server->configureWSDL("WebService_ConnectPHP2MySQL");
    $server->wsdl->schemaTargetNamespace $namespace;

    $server->wsdl->addComplexType(
                    
    'MyComplexType',
                    
    'complexType',
                    
    'struct',
                    
    'all',
                    
    '',
                    array( 
                        
    'ID' => array('name' => 'ID','type' => 'xsd:int'),
                        
    'YourName' => array('name' => 'YourName','type' => 'xsd:string')
                    )
    ); 

    $server->register(
                    
    'select'
                    array( ), 
                    array(
    'return' => 'tns:MyComplexType'),
                    
    $namespace,
                    
    false,
                    
    'rpc',
                    
    'encoded',
                    
    'A simple select'
    );

    function 
    select() {
        require(
    'mysql.php');
        
        
    $output_1=array();
        
    $output_2=array();
        
        
    $select_test "SELECT * FROM student_detail";    
        if(!
    $res_id_test mysql_query($select_test)){
            die(
    mysql_error());
        }
        while(
    $test=mysql_fetch_array($res_id_test)){
            
    $output_2['ID'] = $test['id'];
            
    $output_2['YourName'] = $test['vorname'];
            
    array_push($output_1,$output_2);
        }
        return 
    $output_1[0];
    }
    ?> 
    Wenn ich nun bei der function select() "return $output_1[0];" angebe, dann kann ich via C# auf das jeweilige Element zugreifen. Aber wieso kann ich nicht auf alle zugreifen wenn ich nur "return $output_1;" angebe?

    Liegt mein Fehler in "$server->wsdl->addComplexType" oder "$server->register"?

    Hier mal mein C# Code, mit dem ich auslesen konnte:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    using WindowsFormsApplication1.Services;
     
    ...
     
    private void button1_Click(object sender, EventArgs e)
    {
                WebService_ConnectPHP2MySQL s = new WebService_ConnectPHP2MySQL();
     
                try
                {
                    MyComplexType mct = new MyComplexType();
                    mct = s.select();
      
     
                    MessageBox.Show(mct.ID.ToString() + "\nType: " + mct.ID.GetType().ToString());
                    MessageBox.Show(mct.YourName + "\nType: " + mct.YourName.GetType().ToString());
                }
                catch (Exception ex) { 
                    MessageBox.Show(ex.ToString());
                }
    }
     
    PHP-Code:
    <?php
    echo 'http://acs-it-worx.de/'// mit Android App
    echo 'http://www.youtube.com/user/ACSITWorx/'// mein YouTube Kanal
    echo '-----------------------------------------------------------------';
    echo 
    'http://www.autoservice-asberg.de/';
    ?>

  6. #6
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.520
    Sowohl, als auch. Du registriesrt die Methode mit dem Return-Value eines Single-Objekts und kannst damit auch kein Array zurück geben.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

Ähnliche Themen

  1. MySQL Webservice
    Von Operator_Jon im Forum .NET Web und Kommunikation
    Antworten: 9
    Letzter Beitrag: 13.09.09, 22:32
  2. Antworten: 3
    Letzter Beitrag: 16.09.08, 14:08
  3. Antworten: 3
    Letzter Beitrag: 27.11.07, 09:32
  4. Antworten: 8
    Letzter Beitrag: 18.05.05, 15:43
  5. neues Select nach select aus mysql
    Von mrbong im Forum PHP
    Antworten: 15
    Letzter Beitrag: 14.10.04, 00:05

Stichworte