siDDis Skrevet 4. desember 2006 Del Skrevet 4. desember 2006 Blir litt mas idag, og det blir nok enda meir av det ut i veka Eg held på å lage ein Webservice som skal fungerer slik: Du åpner ein webside og skriver inn verdier om kva slags type værdata som skal hentes frå serveren. Det er implementert sånn at clienten kjører og ein webservice sånn at serveren får desse verdiane med ein SOAP spørring. På serveren så kjøres ein SQL kommando som henter desse dataene og ein webservice som kan sende resultatet. Problemet er at det fungerer bare ein veg. Eg får ikkje til at serveren som oppfører seg først som ein client og så ein server Det er 3 filer her: index.php som lager siden der du putter inn verdiane for at serveren skal finna ut kva den skal leite etter. server.php som gjer verdiane frå database klare for å sendes client.php som henter desse verdiane. Men server.php må hente verdier frå index.php for å kunne fullføre. Når eg implementerer ein SOAP request i server.php så får eg Apache til å gå heilt i stå Apache må då manuelt restartes. Garantert brukerfeil, men vanskeleg å debugge server.php ser sånn ut: <?php // Get the configured variables require_once("inc/config.php"); $client = new SoapClient("wsdl/dbdata.wsdl"); $db_parameters = array( 0 => $client->getData("weatherstation"), 1 => $client->getData("element_measurement_type"), 2 => $client->getData("loginterval"), 3 => $client->getData("from_time"), 4 => $client->getData("to_time") ); function getData($symbol) { global $quotes; return $quotes[$symbol]; } $dbConnection = pg_connect("host=$dbinfo[host] dbname=$dbinfo[database] user=$dbinfo[user] password=$dbinfo[pass]") or die('Could not connect: ' . pg_last_error()); $query = "SELECT observation.time_measured AS time_measured, observation.value_calculated AS value, element_measurement_type_details.name AS element_measurement_type, weatherstation.name AS weatherstation, loginterval.loginterval_shortname AS loginterval FROM observation, element_measurement_type_details, weatherstation, loginterval WHERE observation.weatherstation_id=11 AND observation.element_measurement_type_id=1 AND observation.loginterval_id=1 AND observation.time_measured BETWEEN '2006-03-15 00:00:00' AND '2006-03-15 00:00:00' AND element_measurement_type_details.element_measurement_type_id = observation.element_measurement_type_id AND weatherstation.weatherstation_id = observation.weatherstation_id AND loginterval.loginterval_id = observation.loginterval_id ORDER BY observation.time_measured ASC"; $result = pg_query($query) or die('Query failed: ' . pg_last_error()); if($result) { for ($rowNumber = 0; $rowNumber < pg_NumRows($result); $rowNumber++) { $row = pg_fetch_assoc($result); $wdata[0] = $row['time_measured']; $wdata[1] = $row['weatherstation']; $wdata[2] = $row['element_measurement_type']; $wdata[3] = $row['loginterval']; $wdata[4] = $row['value']; } } // Free resultset pg_free_result($result); // Closing connection pg_close($dbConnection); $quotes = array( "time_measured" => $wdata[0], "weatherstation" => $wdata[1], "element_measurement_type" => $wdata[2], "loginterval" => $wdata[3], "value" => $wdata[4] ); // disabling WSDL cache ini_set("soap.wsdl_cache_enabled", "0"); $server = new SoapServer("wsdl/wdata.wsdl"); $server-> addFunction("getData"); $server-> handle(); ?> Prøver eg å løyse dette heilt feil? Eller er eg nesten der? Lenke til kommentar
siDDis Skrevet 5. desember 2006 Forfatter Del Skrevet 5. desember 2006 Då greide eg eg å løyse dette med ein liten vri, men eg er ikkje heilt i mål enda. Nå må klienten lage to filer og *vite* kva den skal spør om i databasen. Det blir sjåande sånt ut nå: client_db_request.php <?php function getData($symbol) { global $quotes; return $quotes[$symbol]; } /*$quotes = array( "weatherstation" => $_POST['weatherstation'], "element_measurement_type" => $_POST['measurement_type'], "loginterval" => $_POST['interval'], "from_time" => $_POST['from_time'], "to_time" => $_POST['to_time'] ); */ $quotes = array( "weatherstation" => 11, "element_measurement_type" => 1, "loginterval" => 1, "from_time" => '2006-03-15 02:00:00', "to_time" => '2006-03-15 02:00:00' ); // disabling WSDL cache ini_set("soap.wsdl_cache_enabled", "0"); $server = new SoapServer("wsdl/db_request.wsdl"); $server-> addFunction("getData"); $server-> handle(); ?> server.php <?php // Get the configured variables require_once("inc/config.php"); $client = new SoapClient("wsdl/db_request.wsdl"); $db_parameters = array( 0 => $client->getData("weatherstation"), 1 => $client->getData("element_measurement_type"), 2 => $client->getData("loginterval"), 3 => $client->getData("from_time"), 4 => $client->getData("to_time") ); function getData($symbol) { global $quotes; return $quotes[$symbol]; } $dbConnection = pg_connect("host=$dbinfo[host] dbname=$dbinfo[database] user=$dbinfo[user] password=$dbinfo[pass]") or die('Could not connect: ' . pg_last_error()); $query = "SELECT observation.time_measured AS time_measured, observation.value_calculated AS value, element_measurement_type_details.name AS element_measurement_type, weatherstation.name AS weatherstation, loginterval.loginterval_shortname AS loginterval FROM observation, element_measurement_type_details, weatherstation, loginterval WHERE observation.weatherstation_id= $db_parameters[0] AND observation.element_measurement_type_id= $db_parameters[1] AND observation.loginterval_id= $db_parameters[2] AND observation.time_measured BETWEEN '$db_parameters[3]' AND '$db_parameters[4]' AND element_measurement_type_details.element_measurement_type_id= observation.element_measurement_type_id AND weatherstation.weatherstation_id= observation.weatherstation_id AND loginterval.loginterval_id= observation.loginterval_id ORDER BY observation.time_measured ASC"; $result = pg_query($query) or die('Query failed: ' . pg_last_error()); if($result) { for ($rowNumber = 0; $rowNumber < pg_NumRows($result); $rowNumber++) { $row = pg_fetch_assoc($result); $wdata[0] = $row['time_measured']; $wdata[1] = $row['weatherstation']; $wdata[2] = $row['element_measurement_type']; $wdata[3] = $row['loginterval']; $wdata[4] = $row['value']; } } // Free resultset pg_free_result($result); // Closing connection pg_close($dbConnection); $quotes = array( "time_measured" => $wdata[0], "weatherstation" => $wdata[1], "element_measurement_type" => $wdata[2], "loginterval" => $wdata[3], "value" => $wdata[4] ); // disabling WSDL cache ini_set("soap.wsdl_cache_enabled", "0"); $server = new SoapServer("wsdl/wdata.wsdl"); $server-> addFunction("getData"); $server-> handle(); ?> client.php <?php require_once("inc/template.class.php"); $client = new SoapClient("wsdl/wdata.wsdl"); $template = new Template; $template->load("templates/printdata.tmp"); $template->replace("weatherstation", $client->getData("weatherstation")); $template->replace("time_measured", $client->getData("time_measured")); $template->replace("value", $client->getData("value")); $template->replace("m_type", $client->getData("element_measurement_type")); $template->replace("interval", $client->getData("loginterval")); $template->publish(); ?> Det er ikkje så veldig elegant løsning. Korleis kan eg få bestemt desse variablane frå ein form? Saken er at når ein åpner index.php så skal ein få moglegheit til å velgja dei forskjellige værstasjonene osv også klikke submit for så å få opp tabellen med desse verdiane. Lenke til kommentar
siDDis Skrevet 5. desember 2006 Forfatter Del Skrevet 5. desember 2006 Då greide eg dette til slutt med å eksportere databaseverdiane som det skal søkes etter ved å leggja det i ein xml fil som client_db_request.php parset Det som er litt rotete her er at klienten spør serveren om data utan at serveren enda veit kva slags data klienten spør etter. Sånn som eg har gjort det nå så spør serveren ein webservice hos klienten som parser XML fila og sender den tilbake til serveren sånn at den kan finn data i databasen levere det til klienten igjen. Veldig lite elegant, men eg får sjå om eg får tid å rydde opp i det etterkvart. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå