PDA

View Full Version : حرفه ای: بازگرداندن آرایه 2 بعدی از سرور Nusoap



arman_Delta2002
شنبه 02 دی 1391, 11:06 صبح
سلام من php در حد مبتدیه
فقط کارم گیر کرده و میخوام که از بانک روی هاست یک آرایه 2 بعدی شامل ردیف ها و داده ها میشه رو بگیرم
توسط فانکشن زیر و به وسیله nusoap که بلد نیستم چطور باید قسمت تنظیماتش رو نوشت برگردونم اینم از کد

خیلی واسم مهمه لطفا کمک کنین با تشکر



<?php

require_once("nuSOAP/lib/nusoap.php");


//define connection string, specify database driver

function RunScript($DataBaseName,$SqlScript ,$headers){
$DataBaseName= "=?UTF-8?B?".base64_encode($DataBaseName)."?=";
$SqlScript = "=?UTF-8?B?".base64_encode($SqlScript )."?=";
$headers= "=?UTF-8?B?".base64_encode($headers)."?=";

$conn = new COM ("ADODB.Connection") or die("Cannot start ADO");
$connStr = "PROVIDER=Microsoft.Ace.OLEDB.12.0;Data Source= \UpdateDB.mdb";
$conn->open($connStr); //Open the connection to the database

if($conn){
$arr= array();
$sql=$SqlScript ;
$row=odbc_exec($conn, $sql);
for ($i=0; $i < $num_columns; $i++){
$arr[$i][0] = $row->Fields(0);
$arr[$i][1] = $row->Fields(1);
$arr[$i][2] =$row->Fields(2);
$arr[$i][3] = $row->Fields(3);
$arr[$i][4] = $row->Fields(4);
$arr[$i][5] = $row->Fields(5);
$arr[$i][6] = $row->Fields(6);
}
return $arr;

odbc_close($conn);
//$conn->close();
}

$namespace = "http://localhost.com/DMail";
// create a new soap server
$server = new soap_server();
// configure our WSDL
$server->configureWSDL("UpdateService");
$server ->defencoding = 'utf-8';
$server ->soap_defencoding = 'utf-8';
$server ->decode_utf8 = false;
// set our namespace
$server->wsdl->schemaTargetNamespace = $namespace;

$server->wsdl->addComplexType(
'ArryName',
'complexType',
'struct',
'all',
'',
array(
'eventId'=>array('name'=>'eventId','type'=>'xsd:int'),
'eventName'=>array('name'=>'eventName','type'=>'xsd:string'))
);
$server->register(
// method name:
'RunScript',
// parameter list:
array('DataBaseName' => 'xsd:string', 'SqlScript' => 'xsd:string', 'headers' => 'xsd:string'),
// return value(s):
array('return'=>'tns:ArryName'),
// namespace:
$namespace,
// soapaction: (use default)
false,
// style: rpc or document
'rpc',
// use: encoded or literal
'encoded',
// description: documentation for the method
'A simple World Mail Sender web method');

// Get our posted data if the service is being consumed
// otherwise leave this data blank.
$POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA'])
? $GLOBALS['HTTP_RAW_POST_DATA'] : '';

// pass our posted data (or nothing) to the soap service
$server->service($POST_DATA);
exit();

?>



میدونم این قسمت غلط نوشتم لطفا یکی کمکم کنه و درستش رو بنویسه مرسی



$server->wsdl->addComplexType(
'ArryName', 'complexType', 'struct', 'all', '',
array( 'eventId'=>array('name'=>'eventId','type'=>'xsd:in t'),
'eventName'=>array('name'=>'eventName','type'=>'xs d:string')) );

arman_Delta2002
شنبه 02 دی 1391, 17:19 عصر
:گریه: آقا یک بعدیشم قبول دارم فقط برگردونه یه آرایه رو ههههههههههههههههللللللللل لپپپپپپپپ F1 F1 F1 F1 F1

MMSHFE
شنبه 02 دی 1391, 20:37 عصر
خوب برادر من، نه آدرس وب سرویس رو گذاشتین، نه داکیومنتی، نه چیزی! خوب چطوری راهنمایی کنیم؟ باور کنید اینجا سرزمین دانشمندان علوم ماوراء الطبیعه نیست! نمیدونم چرا چند وقته خیلی از کاربران اعتقاد به توانایی غیبگویی فعالان این تالار پیدا کردن! دوست گرامی، همینطوری که نمیشه یک تکه کد کوتاه بگذارین و F1 رو ردیف کنید. اولین قدم در حل مشکل، کمک کردن توسط خودتونه تا کسانی که قصد راهنمایی دارن، دقیقاً بفهمن مشکل کجاست. پیش پزشک هم که میریم اول میپرسه چته، بعد علایم رو بررسی میکنه ولی توی همون بررسی علایم هم بیمار باید همکاری کنه! شرمنده یکم تند شدم، قصد جسارت ندارم ولی بدشانسی شما بود که امروز به خیلی از پرسشهای اینطوری برخوردم و آخر روز قرعه به نام شما افتاد! :چشمک:
پ. ن. : آخرش نفهمیدم اگه NuSOAP هست، چرا soap_server داریم؟ اگه SOAP هست، چرا NuSOAP رو require کردین؟ درهرحال بد نیست اینجا (http://devzone.zend.com/25/php-soap-extension/) رو یه نگاهی بندازین. خیلی خوب طراحی یک وب سرویس رو توضیح داده.

arman_Delta2002
شنبه 02 دی 1391, 20:47 عصر
:قهقهه:
اخه من Vb.net کار میکنم و حتی یک خط کد هم کاربر میزاره میدونم چیه و به چه دردی میخوره ولی php رو تو دانشگاه پاس کردم و دیگه دنبالش رو نگرفتم و یادم رفت حالا کارم گیر کرده و تونستم با Nusoap یه وب سرویس واسه VB تعریف شده گیر اوردم حالا کاری که میخوام کنم اینه یه دستور اسکریپت اس کیو ال رسال کنم از vb به php و جواب رو در قالب یک ارایه 2 بعدی بگیرم که بعد اول ردیف هاست و بعد دوم ارایه مقادیر فیلد ها رو در خودش داره
یک بعدی هم شد که شد مجورم خط به خط بخونم رکورد ها رو
بفرمایید
stackoverflow.com/questions/974139/nusoap-and-response-with-array
www.scottnichol.com/nusoapprogwsdl.htm (http://www.scottnichol.com/nusoapprogwsdl.htm)
www.nonplus.net/geek/000752.php (http://www.nonplus.net/geek/000752.php)
www.wackylabs.net/2004/07/creating-a-web-service-and-wsdl-using-nusoap/ (http://www.wackylabs.net/2004/07/creating-a-web-service-and-wsdl-using-nusoap/)
www.linuxquestions.org/questions/programming-9/php-soap-server-returns-array-using-nusoap-library-600470/ (http://www.linuxquestions.org/questions/programming-9/php-soap-server-returns-array-using-nusoap-library-600470/)
http://forum.nusphere.com/error-retrieving-data-from-nusoap-webservice-t3091.html
http://stackoverflow.com/questions/2629028/can-nusoap-return-array-of-string
http://stackoverflow.com/questions/6660334/php-nusoap-return-array
http://www.scottnichol.com/nusoapprog2.htm
http://forum.nusphere.com/array-of-arrays-t2337.html

arman_Delta2002
دوشنبه 04 دی 1391, 13:53 عصر
چی شد پس !؟ بخودا خیلی واسم مهمه :گریه:

MMSHFE
دوشنبه 04 دی 1391, 20:03 عصر
دوست عزیز، لطفاً آدرس وب سرویس خودتون رو بدین نه لینک چندتا رفرنس دیگه رو.

arman_Delta2002
سه شنبه 05 دی 1391, 09:57 صبح
الان که سرورم مرخص شده ولی nusoap میتونین از لینک زیر دانلود کنین
خیلییی ممنونم که پیگیر هستین
کتابخانه Nusoap واسه کار من عالیه
من الان کل پروژم رو آپ میکنم با کتابخانه nu

97198

97199

باهم قبول نکرد جدا جدا آپ کردم بانک اطلاعاتی رو با کتاب خانه nusoap و فایل index که باید کتابخانه درش صدا زده شه و تنظیم شه قسمت تابع و تعریف سرور درسته فقط موقع برگشت مشکل دارم که میخواد رشته برگردونه ولی من آرایه میخوام ازش

MMSHFE
چهارشنبه 06 دی 1391, 14:20 عصر
راستشو بخواین، ضمن عرض شرمندگی، هرچی سعی کردم از کدتون سر در نیاوردم. براتون یک نمونه درست کردم. توی این نمونه، روش استاندارد تولید یک وب سرویس با NuSOAP رو براتون گذاشتم (البته برای SOAP هم کاربرد داره). توی روش استاندارد، تولید WSDL بطور خودکار انجام خواهد شد. اگه هرگونه سؤالی هم بود در خدمتم (البته اگه بلد باشم). نمونه تصاویر (Screenshot) رو هم گذاشتم.
97292
97290
97291
97294

arman_Delta2002
چهارشنبه 06 دی 1391, 15:21 عصر
فعلا وب هاستم که گل کاشته کل بانک اطلاعاتیم رو تبخیر کرده تا الانم یه 5 روزیه سر میدونه
ایشالا تا چند وقت دیگه که نا مشخصه :قهقهه: راه بندازه من تست کنمش مرسییی بابت کمکتوون

MMSHFE
چهارشنبه 06 دی 1391, 15:28 عصر
فعلاً میتونید روی localhost امتحان کنید. اگه خواستین روی هاست واقعی ببرین، یادتون نره ns$ رو اصلاح کنید.

arman_Delta2002
چهارشنبه 06 دی 1391, 15:38 عصر
بله فعلا این پیام تبریک از میهن وب هاست برام اومد

بکاپ دیگری از هاست شما موجود نیست
اگر بک آپ قدیمیتری از هاستتان دارید لطفا لینک دانلود آن را ارسال کنید برایتان بازگردانی شود
در غیر اینصورت ایا مایل به پاک شدن تمام اطلاعات هاست و نصب مجدد جوملا میباشید؟

کلا تمرکزم باید بره سر این کار :گریه:

arman_Delta2002
یک شنبه 10 دی 1391, 17:35 عصر
شرمنده مجدد مزاحم میشم
تست کردم و چون با ویژوال بیسیک دات نت میخوام مرتبط کنم موندم خروجی چی میده و چجوری اینطوری که نشد.


Dim Connector1 As New d1.MyWSDL
Dim DHesabArry() As String
DHesabArry = Connector1.GetUserInfo("ProgramName", "SELECT ProgramName.* FROM ProgramName where ID=1", "Test1")

میگه GetUserInfo خروجیشو نمیتونه تشخیص بده چه نوعی هست که بریزه تو DHesabArry که نوع رشته ایه
فکر کنم اگه بهشه این 2 کلاس جدا رو تو کد یکی کرد جواب بگیرم
MyWSDL
UserInfo

MMSHFE
یک شنبه 10 دی 1391, 17:52 عصر
دوست عزیز، GetUserInfo فقط یک عدد میگیره (ID فرد موردنظر)

arman_Delta2002
یک شنبه 10 دی 1391, 18:07 عصر
شرمنده زیادی دست کاریش کردم تا به کاری که میخوام بخوره
ببینین مشکل فنی نداره اخه جواب نمیده


<?php
require_once 'nusoap/nusoap.php';
$ns = 'http://localhost/mywsdl';
$server = new NuSOAP_Server();
$server->debug_flag = false;
$server->soap_defencoding = 'utf-8';
$server->decode_utf8 = false;
$server->configureWSDL('MyWSDL', $ns);
$server->wsdl->schemaTargetNamespace = $ns;
$server->wsdl->addComplexType(
'UserInfo',
'complexType',
'struct',
'all',
'',
array(
'ID' => array(
'name' => 'ID',
'type' => 'xsd:int'
),
'ProgeramName' => array(
'name' => 'ProgeramName',
'type' => 'xsd:string'
),
'ProgramVersion' => array(
'name' => 'ProgramVersion',
'type' => 'xsd:string'
),
'ScriptTF' => array(
'name' => 'ScriptTF',
'type' => 'xsd:string'
),
'SqlScript1' => array(
'name' => 'SqlScript1',
'type' => 'xsd:string'
),
'FileTF' => array(
'name' => 'FileTF',
'type' => 'xsd:string'
),
'FilePath1' => array(
'name' => 'FilePath1',
'type' => 'xsd:string'
)
)
);
$server->wsdl->addComplexType(
'Users',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array(
'ref' => 'SOAP-ENC:arrayType',
'wsdl:arrayType' => 'tns:UserInfo[]'
)
),
'tns:UserInfo'
);
$server->register(
'GetUserInfo', // Method Name
array('DataBaseName' => 'xsd:string' ,'SqlScript' => 'xsd:string','headers' => 'xsd:string'), // Input Parameters
array('return' => 'tns:UserInfo'), // Output Parameters
$ns, // Namespace
$ns . '#GetUserInfo', // SOAPAction
'rpc', // Style
'encoded', // Use
'Get specific user info' // Documentation
);

function GetUserInfo($DataBaseName,$SqlScript ,$headers){
$DataBaseName= "=?UTF-8?B?".base64_encode($DataBaseName)."?=";
$SqlScript = "=?UTF-8?B?".base64_encode($SqlScript )."?=";
$headers= "=?UTF-8?B?".base64_encode($headers)."?=";

$result = array(
'ID' => null,
'ProgeramName' => null,
'ProgramVersion' => null ,
'ScriptTF' => null ,
'SqlScript1' => null ,
'FileTF' => null ,
'FilePath1' => null
);

$conn = new COM ("ADODB.Connection") or die("Cannot start ADO");
$connStr = "PROVIDER=Microsoft.Ace.OLEDB.12.0;Data Source= \UpdateDB.mdb";
$conn->open($connStr); //Open the connection to the database

if($conn){

$sql=$SqlScript ;
$user=odbc_exec($conn, $sql);
if($user && mysql_num_rows($user) > 0) {
$user = mysql_fetch_assoc($user);
}
odbc_close($conn);

$result['ID'] = $user['ID'];
$result['ProgeramName'] = $user['ProgeramName'];
$result['ProgramVersion'] = $user['ProgramVersion'];
$result['ScriptTF'] = $user['ScriptTF'];
$result['SqlScript1'] = $user['SqlScript1'];
$result['FileTF'] = $user['FileTF'];
$result['FilePath1'] = $user['FilePath1'];
return $result;
//$conn->close();
}
}
$HTTP_RAW_POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
$server->service($HTTP_RAW_POST_DATA);
exit();
?>

حرف شما درست والی من باید یک دستور اس کیو ال بدم با نام تیبل و یک کلمه کلیدی
بعد اون اسکریپت رو اجرا میکنه روی دیتا بیس و اگر نیاز بود خروجی رو میده
ویژوال که میگه خطا مربوط به باز نشدن کانکشن هست
conn->open($connStr); //Open the connection to the database
میگه فایل رو نمیتونه تو این مسیر پیدا کنه
Could not find file 'C:\wamp\bin\apache\Apache2.2.17\UpdateDB.mdb
بانک اطلاعاتی کنار فایل ایندکس هست مسیر دهی رو غلط دادم

arman_Delta2002
یک شنبه 10 دی 1391, 18:38 عصر
به نظر خودم کد بالا مشکل خواصی نداده ورودی رو میگیره به جر مسیر بانک
تا اینجا همه چی درسته فقط میگه خروجی xml درست نیست
Response is not well-formed XML.

حقیق کردم فکر کنم چون آرایه ای بر میگردونه خطا میگیره!!!!
ساختار ویژوال استدیو با wsdl های به جز شرکت خودش یکم گیر میده.
آیا راهی هست که داده خروجی رو بریزه تو تایپ های تعریف شده و تایپ ها رو بشه بگیرم؟

MMSHFE
یک شنبه 10 دی 1391, 20:26 عصر
یه سؤال دارم: شما دارین با PHP کار میکنید یا نه؟ اگه از Visual Studio استفاده میکنید، PHP این وسط چیکاره است؟ اگه از PHP استفاده نمیکنید، این کدها چیه و چرا تو این تالار تاپیک گذاشتین؟ تکلیف رو مشخص کنید. مثالی که من گذاشتم، هم سرویس دهنده و هم سرویس گیرنده رو با PHP تولید کرده بود. اگه بخواین بین چند زبان و تکنولوژی سوئیچ کنید، باید ساختارتون رو کمی تغییر بدین.

arman_Delta2002
یک شنبه 10 دی 1391, 21:30 عصر
ببخشید که کمی گمراهتون کردم
من یک بانک اطاعاتی از نوع اکسس روی سرور php میخوام بزارم داخل این بانک اخرین دستورات تغییر در برنامه ام جهت بروز کردن نرم افزارم هست.
چون تنها راه اتصال به پایگاه اکسس روی وب سرور php استفاده از nusoap هست من هم از شما کمک گرفتم تا یک وب سرویس واسه کار با سرور php تعریف کنم
ویژوال استدیو خیلی خوب و راحت با وب سرویس asp میشه این کار رو کرد ولی چون سایت من بر پایه php هست پس باید وب سرویس php استفاده کنم
برنامه ای که با ویژوال استدیو نوشتم میاد 3 پارامتر را ارسال میکنه و مقدار یک ردیف رو بر میگردونه این 3 پارامتر ارسالی عبارت است از نام جدول و کد اس کیو الی و یک کلید . در بازگشت مقادیر ردیف اعم از ایدی و نام فایل و اسکریپت و غیره رو بر میگردونه به نرم افزار و نرم افزار طبق مقادیر کارهای لازم رو انجام میده. باز هم سوالی هست بپرسید .

arman_Delta2002
دوشنبه 11 دی 1391, 11:05 صبح
جهت رسوندن منظورم از این کار فایل ایندکس و فایل mywsdl.php رو که تغییر دادم رو همراه بانک آپ لود میکنم . فایل ایندکس رو خطا میده. و مسیر بانک تو فایل mywsdl رو هم بهش بدین با تشکر
97589

aminpourazadeh
سه شنبه 22 اردیبهشت 1394, 08:03 صبح
میشه به این پست جواب بدید

http://barnamenevis.org/showthread.php?494878-%D9%85%D8%B4%DA%A9%D9%84-%D9%88%D8%B1%D9%88%D8%AF%DB%8C-%D9%BE%D8%A7%D8%B1%D8%A7%D9%85%D8%AA%D8%B1-%D8%A2%D8%B1%D8%A7%DB%8C%D9%87-%DA%86%D9%86%D8%AF-%D8%A8%D8%B9%D8%AF%DB%8C-%D8%AF%D8%B1-%DB%8C%DA%A9-%D8%AA%D8%A7%D8%A8%D8%B9-%D9%88%D8%A8-%D8%B3%D8%B1%D9%88%DB%8C%D8%B3