Autor Zpráva
greg
Profil
Dobrý den, řeším korespondenční úkol do školy a nevím si rady s webovou službou (SOAP), client mi nevrací žádný výsledek ani se nehlásí žádná chyba. client by měl vyhledat v databázi záznami podle daného kritéria, konzultoval jsem to s profesorem ale není my schopen odpovědět.

Client :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Untitled 1</title>
</head>

<body>
<?php  
  $celed = $_POST["celed"];
?>  

<?php
 $soap = new SoapClient("http://cipisek.upce.cz/e11412/WS/e11412.wsdl");
  $response = $soap->getCount($celed);
  
?>  
<form name="frm" action="client.php" method="post" enctype="multipart/form-data">

  <select name="celed">
   <option value="Prvni" <?php if($celed == 'Prvni') { ?> selected="selected" <?php } ?>>Prvni</option>
   <option value="Druha" <?php if($celed == 'Druha') { ?> selected="selected" <?php } ?>>Druha</option>
   <option value="Treti" <?php if($celed == 'Treti') { ?> selected="selected" <?php } ?>>Treti</option>
  </select>

<input type="submit" value="Zjisti počet"/> Pocet zaznamu je : <? echo $response; ?>

</form>
</body>

</html>
server :
<?php
  include("config.php");
  function getCount($typ)
  {
    $sql = "SELECT count(*) FROM Pavouci WHERE Celed='".$typ."'";
    $ret = mysql_query($sql);
    $row = mysql_fetch_array($ret);
    return $row[0];
  }  

  ini_set("soap.wsdl_cache_enabled","0");
  $server = new SoapServer("e11412.wsdl");
  $server->addFunction("getCount");
  $server->handle();
  
?>  

WSDL:
<?xml version='1.0' encoding='windows-1250' ?>
<definitions targetNamespace="http://cipisek.upce.cz/e11412/WS/"
xmlns:pavouk="http://cipisek.upce.cz/e11412/WS/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/">

<message name="getCountRequest">
<part name="symbol" type="xsd:string"/>
</message>

<message name="getCountResponse">
<part name="result" type="xsd:integer"/>
</message>

<portType name="typType">
<operation name="getCount">
<input message="pavouk:getCountRequest"/>
<output message="pavouk:getCountResponse"/>
</operation>
</portType>

<binding name="pavoukBinding" type="pavouk:typType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getCount">
<soap:operation soapAction="urn:xmethods-delayed-quotes#getCount"/>
<input><soap:body use="encoded" namespace="urn:xmethods-delayed-quotes"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/></input>
<output><soap:body use="encoded" namespace="urn:xmethods-delayed-quotes"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/></output>
</operation>
</binding>

<service name="PavoukService">
<port name="pavoukPort" binding="pavoukBinding">
<soap:address location="http://cipisek.upce.cz/e11412/WS/server.php"/>
</port>
</service>
</definitions>

Jsem z toho už bezradný..kdyby někdo viděl nějakou chybu budu moc vděčný..děkuji
rafej
Profil
Nemůže být problém třeba v tom, že odesílaný požadavek nic nenajde? Vypiš si postupně, co odesílá formulář, co vyleze z DB a co se vrací pomocí SOAP.
greg
Profil
rafej:
v případě že nic nenajde, měl by vratit 0 ale nezobrazí se ani ta..jsme začatečník a toto dělám prvně..
juriad
Profil
Zkus si přidat do na začátek funkce getCount řádek:
file_put_contents('getCount.1.txt', 'Vstup: ' . $typ);
A na konec té funkce:
file_put_contents('getCount.2.txt', 'Výstup: ' . $row[0]);

A pak podle toho, zda se takový soubor vytvořil, zjistíš, zda se funkce zavolala a jestli dotaz prošel v pořádku.
greg
Profil
juriad:
udělal jsem to takto :
<?php
  include("config.php");
  function getCount($typ)
  {
    file_put_contents('getCount.1.txt', 'Vstup: ' . $typ);
    $sql = "SELECT count(*) FROM Pavouci WHERE Celed='".$typ."'";
    $ret = mysql_query($sql);
    $row = mysql_fetch_array($ret);
    return $row[0];
    file_put_contents('getCount.2.txt', 'Výstup: ' . $row[0]);
  }  

  ini_set("soap.wsdl_cache_enabled","0");
  $server = new SoapServer("http://cipisek.upce.cz/e11412/WS/e11412.wsdl");
  $server->addFunction("getCount");
  $server->handle();
  
?>
a bohužel soubor se nevytvořil..není možná chyba v databazi?
juriad
Profil
Ten druhý se ani vytvořit nemůže, příkaz jsi dal až za return. Přesuň jej o řádek výš.
Vytvořil se alespoň ten vstupní soubor?
Pokud ne, tak se ta funkce ani nezavolá.

Mimochodem, ta doména cipisek.upce.cz neexistuje, není problém v tom?
greg
Profil
juriad:
nevytvořil se ani jeden..k domeně jsem připojen přes VPN..ale ta funkce se vážně asi nevolá, ale kde je chyba to netušim..
rafej
Profil
U databázového dotazu nevidím žádnou kontrolu, jestli se dotaz vykonal.
Nehledě na to, že posíláš do databáze neošetřený vstup, který ti může rozbít celý dotaz. Ošetřuj proměnné pomocí funkce mysql_real_escape_string.
A prohlédni si logy PHP.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: