Skip to content

8. المرفقات

8.1. أدوات تطوير الويب

نوضح هنا أين يمكن العثور على الأدوات اللازمة لتطوير الويب وكيفية تثبيتها. وقد تطورت إصدارات بعض الأدوات، وقد لا تكون الإرشادات الواردة هنا مناسبة للإصدارات الأحدث. لذا سيتعين على القارئ التكيف مع ذلك... في دورة البرمجة على الويب، سنستخدم بشكل أساسي الأدوات التالية، وجميعها متاحة مجانًا:

  • متصفح حديث قادر على عرض XML. تم اختبار أمثلة الدورة التدريبية باستخدام Internet Explorer 6.
  • مجموعة أدوات تطوير Java (JDK) حديثة. تم اختبار أمثلة الدورة باستخدام JDK 1.4. يأتي هذا JDK مزودًا بمكوّن Java الإضافي 1.4 للمتصفحات، مما يسمح لهذه الأخيرة بعرض تطبيقات Java الصغيرة التي تستخدم JDK 1.4.
  • بيئة تطوير Java لكتابة برامج servlet الخاصة بـ Java. وهنا نستخدم JBuilder 7.
  • خوادم الويب: Apache، PWS (خادم الويب الشخصي)، Tomcat.
    • سيُستخدم Apache لتطوير تطبيقات الويب بلغة PERL (Practical Extracting and Reporting Language) أو PHP (Personal Home Page)
    • سيتم استخدام PWS لتطوير تطبيقات الويب بلغة ASP (Active Server Pages) أو PHP
    • سيُستخدم Tomcat لتطوير تطبيقات الويب باستخدام سيرفلتات Java أو صفحات JSP (صفحات خادم Java)
  • تطبيق لإدارة قواعد البيانات: MySQL
  • EasyPHP: أداة تجمع بين خادم الويب Apache ولغة PHP و SGBD MySQL

8.1.1. خوادم الويب، المتصفحات، لغات البرمجة النصية

  1. خوادم الويب الرئيسية
    • أباتشي (Linux، Windows)
    • خادم المعلومات الداخلي IIS (NT)، خادم الويب الشخصي PWS (ويندوز 9x)
  1. المتصفحات الرئيسية
    • إنترنت إكسبلورر (ويندوز)
    • Netscape (لينكس، ويندوز)
  1. لغات البرمجة النصية على جانب الخادم
    • VBScript (IIS، PWS)
    • JavaScript (IIS، PWS)
    • Perl (Apache، IIS، PWS)
    • PHP (أباتشي، IIS، PWS)
    • جافا (أباتشي، تومكات)
    • لغات البرمجة .NET
  1. لغات البرمجة النصية على جانب المتصفح
    • VBScript (IE)
    • جافا سكريبت (IE، نيتسكيب)
    • PerlScript (IE)
    • Java (IE، Netscape)

8.1.2. أين يمكن العثور على الأدوات

Netscape
http://www.netscape.com/ (رابط التنزيلات)
Internet Explorer
http://www.microsoft.com/windows/ie/default.asp
PHP
http://www.php.net
http://www.php.net/downloads.php (ملفات Windows الثنائية)
PERL
http://www.activestate.com http://www.activestate.com/Products/
http://www.activestate.com/Products/ActivePerl/
Vbscript, Javascript
http://msdn.microsoft.com/scripting (اتبع رابط Windows Script)
JAVA
http://java.sun.com/
http://java.sun.com/downloads.html (JSE)
http://java.sun.com/j2se/1.4/download.html
Apache
http://www.apache.org/
http://www.apache.org/dist/httpd/binaries/win32/
PWS
مضمن في حزمة الخيارات 4.0 لـ NT لنظام التشغيل Windows 95
مضمن في حزمة CD لنظام التشغيل Windows 98
http://www.microsoft.com/ntserver/nts/downloads/recommended/NT4OptPk/win95.asp
IIS 
(windows NT/2000)
http://www.microsoft.com
Tomcat
http://jakarta.apache.org/tomcat/
JBuilder
http://www.borland.com/jbuilder/
http://www.borland.com/products/downloads/download_jbuilder.html
EasyPHP
http://www.easyphp.org/
http://www.easyphp.org/telechargements.php3

8.1.3. EasyPHP

يتميز هذا التطبيق بكونه عمليًا للغاية، حيث يجمع في حزمة واحدة:

  • خادم الويب Apache (1.3.x)
  • لغة PHP (4.x)
  • SGBD MySQL (3.23.x)
  • أداة إدارة لـ MySQL: PhpMyAdmin

يظهر تطبيق التثبيت بالشكل التالي:

Image

لا يطرح تثبيت EasyPHP أي مشكلة ويتم إنشاء شجرة مجلدات في نظام الملفات:

Image

easyphp.exe
ملف التطبيق القابل للتنفيذ
apache
هيكل مجلدات خادم Apache
mysql
هيكل مجلدات قاعدة بيانات MySQL الخاصة بـ SGBD
phpmyadmin
هيكل مجلدات تطبيق phpmyadmin
php
هيكل مجلدات php
www
الجذر لهيكل الصفحات الويب التي يقدمها خادم Apache الخاص بـ EasyPHP
cgi-bin
هيكل المجلدات حيث يمكن وضع البرامج النصية CGI لخادم Apache

الميزة الرئيسية لـ EasyPHP هي أن التطبيق يأتي مهيئًا مسبقًا. وبالتالي، فإن Apache و PHP و MySQL مهيأة بالفعل للعمل معًا. عند تشغيل EasyPhp عبر الرابط الموجود في قائمة البرامج، تظهر أيقونة في أسفل يمين الشاشة.

يجب أن تومض الحرف «E» مع النقطة الحمراء إذا كان خادم الويب Apache وقاعدة البيانات MySQL قيد التشغيل. عند النقر عليها بزر الفأرة الأيمن، تظهر خيارات القائمة التالية:

Image

يتيح الخيار Administration إجراء التعديلات واختبارات التشغيل:

Image

8.1.3.1. الإدارة PHP

يجب أن يتيح لك زر «معلومات PHP» التحقق من حسن سير عمل ثنائي Apache-PHP: يجب أن تظهر صفحة معلومات PHP:

Image

يعرض زر «الملحقات» قائمة بالملحقات المثبتة لـ PHP. وهي في الواقع مكتبات وظائف.

Image

تُظهر الشاشة أعلاه، على سبيل المثال، أن الوظائف اللازمة لاستخدام قاعدة البيانات MySQL موجودة بالفعل.

يُظهر زر «الإعدادات» معرف login/motdepasse لمسؤول قاعدة البيانات MySQL.

Image

يتجاوز استخدام قاعدة البيانات MySQL نطاق هذا العرض السريع، ولكن من الواضح هنا أنه يجب تعيين كلمة مرور لمسؤول قاعدة البيانات.

8.1.3.2. إدارة Apache

وفي صفحة إدارة EasyPHP أيضًا، يتيح الرابط «أسماءك المستعارة» تعريف أسماء مستعارة مرتبطة بأحد الدلائل. وهذا يسمح بوضع صفحات الويب في مكان آخر غير دليل www ضمن شجرة easyPhp.

Image

إذا أدخلنا المعلومات التالية في الصفحة أعلاه:

Image

واستخدمنا الزر valider، فسيتم إضافة الأسطر التالية إلى الملف <easyphp>\apache\conf\httpd.conf:

    Alias /st/ "e:/data/serge/web/"

    <Directory "e:/data/serge/web">
        Options FollowSymLinks Indexes
        AllowOverride None
        Order deny,allow
        allow from 127.0.0.1
        deny from all
    </Directory>

يشير <easyphp> إلى دليل تثبيت EasyPHP. httpd.conf هو ملف تكوين خادم Apache. لذلك يمكن القيام بنفس الشيء عن طريق تحرير هذا الملف مباشرةً. عادةً ما يتم تطبيق أي تعديل على الملف httpd.conf على الفور بواسطة Apache. إذا لم يحدث ذلك، فسيكون من الضروري إيقافه ثم إعادة تشغيله، دائمًا باستخدام أيقونة easyphp:

Image

لإنهاء مثالنا، يمكننا الآن وضع صفحات الويب في الشجرة e:\data\serge\web:

C:\winnt\system32>dir e:\data\serge\web\html\balises.htm

14/07/2002  17:02                3 767 balises.htm

والاستعلام عن هذه الصفحة باستخدام الاسم المستعار st:

Image

في هذا المثال، تم تكوين خادم Apache للعمل على المنفذ 81. المنفذ الافتراضي له هو 80. يتم التحكم في هذه النقطة من خلال السطر التالي في الملف httpd.conf الذي سبق ذكره:

Port 81

8.1.3.3. ملف تكوين Apache htpd.conf

عندما نرغب في إجراء بعض التعديلات الدقيقة على إعدادات Apache، نضطر إلى تعديل ملف التكوين الخاص به «يدويًّا»، وهو httpd.conf الموجود هنا في المجلد <easyphp>\apache\conf:

Image

فيما يلي بعض النقاط التي يجب تذكرها بشأن ملف التكوين هذا:

ligne(s)
الدور
ServerRoot "D:/Program Files/Apache Group/Apache"
يشير إلى المجلد الذي توجد فيه شجرة Apache
Port 80
يحدد المنفذ الذي سيعمل عليه خادم الويب. عادةً ما يكون 80. من خلال تغيير هذا السطر، يمكن تشغيل خادم الويب على منفذ آخر
ServerAdmin root@istia.univ-angers.fr
عنوان البريد الإلكتروني لمسؤول خادم Apache
ServerName stahe.istia.uang
اسم الجهاز الذي «يعمل» عليه خادم Apache
ServerRoot "E:/Program Files/EasyPHP/apache"
مجلد تثبيت خادم Apache. عندما تظهر أسماء ملفات نسبية في ملف التكوين، فإنها تكون نسبية بالنسبة لهذا المجلد.
DocumentRoot "E:/Program Files/EasyPHP/www"
المجلد الجذر لهيكل الصفحات الويب التي يقدمها الخادم. هنا، سيتوافق الرابط http://machine/rep1/fic1.html مع الملف E:\Program Files\EasyPHP\www \rep1\fic1.html
<Directory "E:/Program Files/EasyPHP/www">
يحدد خصائص المجلد السابق
ErrorLog logs/error.log
مجلد السجلات، أي في الواقع <ServerRoot>\logs\error.log: E:\Program Files\EasyPHP\apache\logs\error.log. هذا هو الملف الذي يجب الرجوع إليه إذا لاحظت أن خادم Apache لا يعمل.
    ScriptAlias /cgi-bin/ "E:/Program Files/EasyPHP/cgi-bin/"
E:\Program Files\EasyPHP\cgi-bin سيكون جذر الشجرة حيث يمكن وضع البرامج النصية CGI. وبالتالي، فإن الرابط (URL) لبرنامج URL هو: http://machine/cgi-bin/rep1/script1.pl، وhttp://machine/cgi-bin/rep1/script1.pl هو الرابط لبرنامج CGI: E:\Program Files\EasyPHP\cgi-bin\rep1\script1.pl.
<Directory "E:/Program Files/EasyPHP/cgi-bin/">
يحدد خصائص المجلد المذكور أعلاه
LoadModule php4_module "E:/Program
 Files/EasyPHP/php/php4apache.dll"
AddModule mod_php4.c
أسطر تحميل الوحدات النمطية التي تسمح لـ Apache بالعمل مع PHP4.
    AddType application/x-httpd-php
 .phtml .pwml .php3 
.php4 .php .php2 .inc
تحديد اللاحقات للملفات التي يجب اعتبارها ملفات يجب معالجتها بواسطة PHP

8.1.3.4. إدارة MySQL باستخدام PhpMyAdmin

في صفحة إدارة EasyPhp، انقر على الزر PhpMyAdmin:

Image

تتيح القائمة المنسدلة الموجودة أسفل Accueil عرض قواعد
.
الرقم الموجود بين قوسين هو عدد الجداول. إذا
اختيار قاعدة بيانات، تُعرض الجداول الموجودة فيها:

توفر صفحة الويب عددًا من العمليات التي يمكن إجراؤها على قاعدة البيانات:

Image

إذا نقرنا على الرابط Afficher من user:

Image

لا يوجد هنا سوى مستخدم واحد: root، وهو مسؤول MySQL. من خلال اتباع الرابط Modifier، يمكن تغيير كلمة المرور الخاصة به، والتي هي فارغة حاليًا، وهو أمر غير مستحسن بالنسبة لمسؤول.

لن نذكر المزيد عن PhpMyAdmin، وهو برنامج غني بالميزات ويستحق شرحًا يمتد لعدة صفحات.

8.1.4. PHP

لقد رأينا كيفية الحصول على PHP من خلال تطبيق EasyPhp. للحصول على PHP مباشرةً، ننتقل إلى الموقع http://www.php.net.

لا يقتصر استخدام PHP على الويب فقط. يمكن استخدامه كلغة برمجة نصية في نظام Windows. قم بإنشاء البرنامج النصي التالي واحفظه باسم date.php:

<?
   // script php affichant l'heure
  $maintenant=date("j/m/y, H:i:s",time());
  echo "Nous sommes le $maintenant";
?>

في نافذة DOS، انتقل إلى مجلد date.php وقم بتشغيله:

E:\data\serge\php\essais>"e:\program files\easyphp\php\php.exe" date.php
X-Powered-By: PHP/4.2.0
Content-type: text/html

Nous sommes le 18/07/02, 09:31:01

8.1.5. PERL

من الأفضل أن يكون Internet Explorer مثبتًا بالفعل. إذا كان موجودًا، فسيقوم Active Perl بتكوينه بحيث يقبل البرامج النصية PERL في الصفحات HTML، وهي برامج نصية سيتم تنفيذها بواسطة IE نفسه من جانب العميل. يوجد موقع Active Perl على الرابط URL http://www.activestate.comA. عند التثبيت، سيتم تثبيت PERL في مجلد سنسميه <perl>. ويحتوي هذا المجلد على الهيكل التالي:

DEISL1   ISU        32 403  23/06/00  17:16 DeIsL1.isu
BIN            <REP>        23/06/00  17:15 bin
LIB            <REP>        23/06/00  17:15 lib
HTML           <REP>        23/06/00  17:15 html
EG             <REP>        23/06/00  17:15 eg
SITE           <REP>        23/06/00  17:15 site
HTMLHELP       <REP>        28/06/00  18:37 htmlhelp

يوجد الملف القابل للتنفيذ perl.exe في <perl>\bin. لغة Perl هي لغة برمجة نصية تعمل على أنظمة Windows وUnix. كما أنها تُستخدم في البرمجة WEB. لنكتب أول برنامج نصي:

# script PERL affichant l'heure

# modules
use strict;

# programme
my ($secondes,$minutes,$heure)=localtime(time);
print "Il est $heure:$minutes:$secondes\n";

احفظ هذا البرنامج النصي في ملف باسم heure.pl. افتح نافذة DOS، وانتقل إلى المجلد الذي يحتوي على البرنامج النصي السابق وقم بتشغيله:

E:\data\serge\Perl\Essais>e:\perl\bin\perl.exe heure.pl
Il est 9:34:21

8.1.6. Vbscript، Javascript، Perlscript

هذه اللغات هي لغات برمجة نصية لنظام ويندوز. يمكنها العمل في بيئات مختلفة مثل

  • Windows Scripting Host للاستخدام المباشر في نظام Windows، لا سيما لكتابة نصوص برمجية لإدارة نظام
  • Internet Explorer. ويتم استخدامها في صفحات HTML حيث تضفي عليها تفاعلية معينة لا يمكن تحقيقها باستخدام لغة HTML وحدها.
  • Internet Information Server (IIS)، وهو خادم الويب الخاص بشركة مايكروسوفت على نظام NT/2000، ونظيره Personal Web Server (PWS) على نظام Win9x. في هذه الحالة، يُستخدم vbscript للبرمجة من جانب خادم الويب، وهي تقنية تسميها مايكروسوفت ASP (Active Server Pages).

يمكن تنزيل ملف التثبيت من الرابط التالي: http://msdn.microsoft.com/scripting ثم اتباع الروابط الخاصة بـ Windows Script. يتم تثبيت ما يلي:

  • حاوية Windows Scripting Host، وهي حاوية تسمح باستخدام لغات برمجة نصية متنوعة، مثل Vbscript وJavascript، بالإضافة إلى لغات أخرى مثل PerlScript التي تأتي مع Active Perl.
  • مترجم VBscript
  • مترجم لغة Javascript

دعونا نقدم بعض الاختبارات السريعة. لنقم بإنشاء البرنامج vbscript التالي:

' une classe
class personne
  Dim nom
  Dim age
End class

' création d'un objet personne
Set p1=new personne
With p1
  .nom="dupont"
  .age=18
End With

' affichage propriétés personne p1
With p1
  wscript.echo "nom=" & .nom
  wscript.echo "age=" & .age
End With

يستخدم هذا البرنامج كائنات. لنسمه objets.vbs (اللاحقة vbs تشير إلى ملف vbscript). لننتقل إلى المجلد الذي يوجد فيه ونقوم بتشغيله:

E:\data\serge\windowsScripting\vbscript\poly\objets>cscript objets.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

nom=dupont
age=18

الآن لنقم بكتابة برنامج جافا سكريبت التالي الذي يستخدم المصفوفات:

// tableau dans un variant
// tableau vide
tableau=new Array();
affiche(tableau);
// tableau croît dynamiquement
for(i=0;i<3;i++){
  tableau.push(i*10);
}
// affichage tableau
affiche(tableau);
// encore
for(i=3;i<6;i++){
  tableau.push(i*10);
}
affiche(tableau);

// tableaux à plusieurs dimensions
WScript.echo("-----------------------------");

tableau2=new Array();
for(i=0;i<3;i++){
  tableau2.push(new Array());
  for(j=0;j<4;j++){
    tableau2[i].push(i*10+j);
  }//for j
}// for i
affiche2(tableau2);

// fin
WScript.quit(0);

// ---------------------------------------------------------
function affiche(tableau){
  // affichage tableau
  for(i=0;i<tableau.length;i++){
    WScript.echo("tableau[" + i + "]=" + tableau[i]);
  }//for
}//function

// ---------------------------------------------------------
function affiche2(tableau){
   // affichage tableau
  for(i=0;i<tableau.length;i++){
    for(j=0;j<tableau[i].length;j++){
      WScript.echo("tableau[" + i + "," + j + "]=" + tableau[i][j]);
    }// for j
  }//for i
}//function

يستخدم هذا البرنامج الجداول. لنسمه tableaux.js (اللاحقة js تشير إلى ملف جافا سكريبت). لننتقل إلى المجلد الذي يوجد فيه ونقوم بتشغيله:

E:\data\serge\windowsScripting\javascript\poly\tableaux>cscript tableaux.js
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. Tous droits réservés.

tableau[0]=0
tableau[1]=10
tableau[2]=20
tableau[0]=0
tableau[1]=10
tableau[2]=20
tableau[3]=30
tableau[4]=40
tableau[5]=50
-----------------------------
tableau[0,0]=0
tableau[0,1]=1
tableau[0,2]=2
tableau[0,3]=3
tableau[1,0]=10
tableau[1,1]=11
tableau[1,2]=12
tableau[1,3]=13
tableau[2,0]=20
tableau[2,1]=21
tableau[2,2]=22
tableau[2,3]=23

مثال أخير بلغة Perlscript في الختام. يجب تثبيت Active Perl للوصول إلى Perlscript.

<job id="PERL1">
  <script language="PerlScript">
       # du Perl classique
    %dico=("maurice"=>"juliette","philippe"=>"marianne");
    @cles= keys %dico;
    for ($i=0;$i<=$#cles;$i++){
        $cle=$cles[$i];
      $valeur=$dico{$cle};
        $WScript->echo ("clé=".$cle.", valeur=".$valeur);
    }
     # du perlscript utilisant les objets Windows Script
    $dico=$WScript->CreateObject("Scripting.Dictionary");
    $dico->add("maurice","juliette");
    $dico->add("philippe","marianne");
    $WScript->echo($dico->item("maurice"));
    $WScript->echo($dico->item("philippe"));    
  </script>
</job>

يوضح هذا البرنامج إنشاء واستخدام قاموسين: أحدهما بالطريقة التقليدية في لغة Perl، والآخر باستخدام كائن Scripting Dictionary في Windows Script. لنحفظ هذا الكود في الملف dico.wsf (wsf هي اللاحقة الخاصة بملفات Windows Script). لننتقل إلى المجلد الذي يحتوي على هذا البرنامج ونقوم بتشغيله:

E:\data\serge\windowsScripting\perlscript\essais>cscript dico.wsf
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. Tous droits réservés.

clé=philippe, valeur=marianne
clé=maurice, valeur=juliette
juliette
marianne

يمكن لـ Perlscript استخدام كائنات الحاوية التي يتم تنفيذه فيها. في هذه الحالة، كانت كائنات حاوية Windows Script. في سياق برمجة الويب، يمكن تنفيذ البرامج النصية VBscript، Javascript وPerlscript إما داخل المتصفح IE، أو داخل خادم PWS أو IIS. وإذا كان البرنامج النصي معقدًا بعض الشيء، فقد يكون من الحكمة اختباره خارج سياق الويب، داخل حاوية Windows Script كما رأينا سابقًا. وبذلك، لن يمكن اختبار سوى وظائف البرنامج النصي التي لا تستخدم كائنات خاصة بالمتصفح أو الخادم. وحتى مع هذا القيد، تظل هذه الإمكانية مثيرة للاهتمام لأنه من غير العملي عمومًا تصحيح أخطاء البرامج النصية التي يتم تنفيذها داخل خوادم الويب أو المتصفحات.

8.1.7. JAVA

تتوفر لغة Java على الرابط URL: http://www.sun.com وتُثبَّت في بنية شجرية سنسميها <java> تحتوي على العناصر التالية:

22/05/2002  05:51       <DIR>          .
22/05/2002  05:51       <DIR>          ..
22/05/2002  05:51       <DIR>          bin
22/05/2002  05:51       <DIR>          jre
07/02/2002  12:52                8 277 README.txt
07/02/2002  12:52               13 853 LICENSE
07/02/2002  12:52                4 516 COPYRIGHT
07/02/2002  12:52               15 290 readme.html
22/05/2002  05:51       <DIR>          lib
22/05/2002  05:51       <DIR>          include
22/05/2002  05:51       <DIR>          demo
07/02/2002  12:52           10 377 848 src.zip
11/02/2002  12:55       <DIR>          docs

في مجلد bin، ستجد javac.exe، وهو مُجمِّع Java، وjava.exe، وهي آلة Java الافتراضية. يمكنك إجراء الاختبارات التالية:

  1. كتابة البرنامج النصي التالي:
//programme Java affichant l'heure

import java.io.*;
import java.util.*;

public class heure{
  public static void main(String arg[]){
     // on récupère date & heure
     Date maintenant=new Date();
      // on affiche
     System.out.println("Il est "+maintenant.getHours()+
        ":"+maintenant.getMinutes()+":"+maintenant.getSeconds());
  }//main
}//class
  1. احفظ هذا البرنامج باسم heure.java. افتح نافذة DOS. انتقل إلى مجلد ملف heure.java وقم بتجميعه:
D:\data\java\essais>c:\jdk1.3\bin\javac heure.java
Note: heure.java uses or overrides a deprecated API.
Note: Recompile with -deprecation for details.

في الأمر أعلاه، يجب استبدال c:\jdk1.3\bin\javac بالمسار الدقيق لمترجم javac.exe. يجب أن تحصل في نفس المجلد الذي يوجد فيه heure.java على ملف heure.class، وهو البرنامج الذي سيتم تنفيذه الآن بواسطة الآلة الافتراضية java.exe.

  1. تشغيل البرنامج:
D:\data\java\essais>c:\jdk1.3\bin\java heure
Il est 10:44:2

8.1.8. خادم Apache

لقد رأينا أنه يمكن الحصول على خادم Apache من خلال التطبيق EasyPhp. وللحصول عليه مباشرةً، سننتقل إلى موقع Apache: http://www.apache.org. يؤدي التثبيت إلى إنشاء هيكل مجلدات يحتوي على جميع الملفات اللازمة للخادم. لنسمي هذا المجلد <apache>. وهو يحتوي على هيكل مجلدات مشابه لما يلي:

UNINST   ISU       118 805  23/06/00  17:09 Uninst.isu
HTDOCS         <REP>        23/06/00  17:09 htdocs
APACHE~1 DLL       299 008  25/02/00  21:11 ApacheCore.dll
ANNOUN~1             3 000  23/02/00  16:51 Announcement
ABOUT_~1            13 197  31/03/99  18:42 ABOUT_APACHE
APACHE   EXE        20 480  25/02/00  21:04 Apache.exe
KEYS                36 437  20/08/99  11:57 KEYS
LICENSE              2 907  01/01/99  13:04 LICENSE
MAKEFI~1 TMP        27 370  11/01/00  13:47 Makefile.tmpl
README               2 109  01/04/98   6:59 README
README   NT          3 223  19/03/99   9:55 README.NT
WARNIN~1 TXT           339  21/09/98  13:09 WARNING-NT.TXT
BIN            <REP>        23/06/00  17:09 bin
MODULES        <REP>        23/06/00  17:09 modules
ICONS          <REP>        23/06/00  17:09 icons
LOGS           <REP>        23/06/00  17:09 logs
CONF           <REP>        23/06/00  17:09 conf
CGI-BIN        <REP>        23/06/00  17:09 cgi-bin
PROXY          <REP>        23/06/00  17:09 proxy
INSTALL  LOG         3 779  23/06/00  17:09 install.log
conf
مجلد ملفات تكوين Apache
logs
مجلد ملفات السجلات (التتبع) لـ Apache
bin
ملفات Apache القابلة للتنفيذ

8.1.8.1. Configuration

في المجلد <Apache>\conf، توجد الملفات التالية: httpd.conf، srm.conf، access.conf. في الإصدارات الأخيرة من Apache، تم دمج الملفات الثلاثة في ملف httpd.conf. وقد سبق أن عرضنا النقاط المهمة في ملف التكوين هذا. في الأمثلة التالية، استُخدمت نسخة Apache من ملف EasyPhp لإجراء الاختبارات، وبالتالي تم استخدام ملف التكوين الخاص بها. وفي هذا الملف، يشير DocumentRoot إلى جذر شجرة صفحات الويب وهو e:\program files\easyphp\www.

8.1.8.2. رابط PHP - Apache

لإجراء الاختبار، قم بإنشاء الملف intro.php الذي يحتوي على السطر التالي فقط:

<? phpinfo() ?>

وضعه في جذر صفحات خادم Apache (DocumentRoot أعلاه). اطلب URL http://localhost/intro.php. يجب أن تظهر قائمة بالمعلومات php:

Image

يعرض البرنامج النصي PHP التالي الوقت. وقد سبق أن تناولناه:

<?php
   // time : nb de millisecondes depuis 01/01/1970
   // "format affichage date-heure
   // d: jour sur 2 chiffres
   // m: mois sur 2 chiffres
   // y : année sur 2 chiffres
   // H : heure 0,23
   // i : minutes
   // s: secondes
  print "Nous sommes le " . date("d/m/y H:i:s",time());
?>

لنضع هذا الملف النصي في المجلد الجذر لصفحات خادم Apache (DocumentRoot) ونسميه date.php. لنطلب عبر متصفح الويب http://localhost/date.php. سنحصل على الصفحة التالية:

Image

8.1.8.3. رابط PERL-APACHE

يتم إنشاؤه بواسطة سطر بالصيغة: ScriptAlias /cgi-bin/ "E:/Program Files/EasyPHP/cgi-bin/" من الملف <apache>\conf\httpd.conf. وصيغته هي ScriptAlias /cgi-bin/ "<cgi-bin>" حيث <cgi-bin> هو المجلد الذي يمكن وضع البرامج النصية فيه CGI. CGI (واجهة البوابة المشتركة) هي معيار للتواصل بين الخادم WEB <--> والتطبيقات. يطلب العميل من خادم الويب صفحة ديناميكية، c.a.d، وهي صفحة تم إنشاؤها بواسطة برنامج. لذلك، يجب على الخادم WEB أن يطلب من أحد البرامج إنشاء الصفحة. يحدد CGI التفاعل بين الخادم والبرنامج، ولا سيما طريقة نقل المعلومات بين هذين الكيانين.

إذا لزم الأمر، قم بتعديل السطر ScriptAlias /cgi-bin/ "<cgi-bin>" وأعد تشغيل خادم Apache. ثم قم بإجراء الاختبار التالي:

  1. اكتب البرنامج النصي:
#!c:\perl\bin\perl.exe

# script PERL affichant l'heure

# modules
use strict;

# programme
my ($secondes,$minutes,$heure)=localtime(time);
print <<FINHTML
Content-Type: text/html

<html>
 <head>
  <title>heure</title>
 </head>
 <body>
  <h1>Il est $heure:$minutes:$secondes</h1>
 </body>
FINHTML
;
  1. ضع هذا البرنامج النصي في <cgi-bin>\heure.pl حيث <cgi-bin> هو المجلد الذي يمكنه استيعاب البرامج النصية CGI (انظر httpd.conf). السطر الأول #!c:\perl\bin\perl.exe يشير إلى مسار الملف القابل للتنفيذ perl.exe. قم بتعديله إذا لزم الأمر.
  2. قم بتشغيل Apache إذا لم يكن قد تم تشغيله بعد
  3. اطلب عبر متصفح الويب ملف URL http://localhost/cgi-bin/heure.pl. ستظهر الصفحة التالية:

Image

8.1.9. الخادم PWS

8.1.9.1. Installation

الخادم PWS (Personal Web Server) هو نسخة شخصية من خادم IIS (Internet Information Server) من Microsoft. هذا الأخير متوفر على أنظمة التشغيل NT و2000. على أجهزة win9x، يتوفر PWS عادةً مع حزمة تثبيت Internet Explorer. ومع ذلك، فهو غير مثبت بشكل افتراضي. يجب إجراء تثبيت مخصص لـ IE وطلب تثبيت PWS. كما أنه متوفر في حزمة الخيارات NT 4.0 لـ Windows 95.

8.1.9.2. الاختبارات الأولية

جذر صفحات الويب الخاصة بالخادم PWS هو محرك الأقراص:\inetpub\wwwroot، حيث يمثل «محرك الأقراص» القرص الذي قمت بتثبيت PWS عليه. سنفترض في ما يلي أن هذا القرص هو D. وبالتالي، فإن عنوان URL http://machine/rep1/page1.html سيشير إلى الملف d:\inetpub\wwwroot\rep1\page1.html. يقوم الخادم PWS بتفسير أي ملف بامتداد .asp (صفحات الخادم النشط) على أنه برنامج نصي يجب تنفيذه لإنتاج صفحة HTML.

يعمل PWS افتراضيًا على المنفذ 80. وكذلك خادم الويب Apache... لذا يجب إيقاف Apache للعمل مع PWS إذا كان لديك الخادمان. الحل الآخر هو تكوين Apache ليعمل على منفذ آخر. وهكذا، في ملف تكوين Apache الخاص بـ httpd.conf، نستبدل السطر Port 80 بـ Port 81، وسيعمل Apache من الآن فصاعدًا على المنفذ 81 ويمكن استخدامه في نفس الوقت مع PWS. إذا تم تشغيل PWS، وعند طلب URL http://localhost، فسنحصل على صفحة مشابهة للصفحة التالية:

Image

8.1.9.3. رابط PHP - PWS

  1. فيما يلي ملف .reg مخصص لتعديل سجلات التسجيل. انقر نقرًا مزدوجًا على هذا الملف لتعديل السجلات. هنا، يوجد الملف dll المطلوب في d:\php4 مع الملف القابل للتنفيذ لـ php. قم بالتعديل إذا لزم الأمر. يجب مضاعفة علامات \ في مسار ملف dll.
REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parameters\Script Map]
".php"="d:\\php4\\php4isapi.dll"
  1. أعد تشغيل الجهاز حتى يتم تطبيق التغييرات على سجل التسجيل.
  1. قم بإنشاء مجلد php في d:\inetpub\wwwroot، وهو المجلد الجذر لخادم PWS. بعد ذلك، قم بتشغيل PWS وانتقل إلى علامة التبويب «خيارات متقدمة». انقر على زر «إضافة» لإنشاء مجلد افتراضي:
Répertoire/Parcourir : d:\inetpub\wwwroot\php
Alias : php
Cocher la case exécuter.
  1. قم بتأكيد كل شيء وأعد تشغيل PWS. أدخل في d:\inetpub\wwwroot\php الملف intro.php الذي يحتوي على السطر التالي فقط:
<? phpinfo() ?>
  1. اطلب من الخادم PWS ملف URL http://localhost/php/intro.php. يجب أن تظهر قائمة معلومات PHP التي تم عرضها مسبقًا باستخدام Apache.

8.1.10. Tomcat: سيرفلتات Java وصفحات JSP (Java Server Pages)

Tomcat هو خادم ويب يتيح إنشاء صفحات HTML بفضل السيرفلتات (برامج Java التي ينفذها خادم الويب) أو صفحات JSP (Java Server Pages)، وهي صفحات تجمع بين كود Java وكود HTML. وهي تعادل صفحات ASP (Active Server Pages) الخاصة بخادم IIS/PWS من Microsoft، حيث يتم هناك دمج كود VBScript أو جافا سكريبت مع كود HTML.

8.1.10.1. Installation

يتوفر Tomcat على الرابط URL: http://jakarta.apache.org. يتم تنزيل ملف .exe للتثبيت. عند تشغيل هذا البرنامج، يبدأ أولاً بالإشارة إلى JDK الذي سيستخدمه. في الواقع، يحتاج Tomcat إلى JDK للتثبيت ثم ترجمة وتشغيل برامج Java. لذلك، يجب أن يكون لديك JDK Java مثبتًا قبل تثبيت Tomcat. يُنصح باستخدام أحدث إصدار من JD. سيؤدي التثبيت إلى إنشاء شجرة <tomcat>:

Image

ويتم التثبيت ببساطة عن طريق فك ضغط هذا الأرشيف في مجلد ما. اختر مجلدًا لا يحتوي مساره إلا على أسماء خالية من المسافات (مثلًا، لا تختر «Program Files»)، وذلك بسبب وجود خطأ في عملية تثبيت Tomcat. اختر على سبيل المثال C:\tomcat أو D:\tomcat. لنسمي هذا المجلد <tomcat>. ستجد بداخله مجلدًا باسم jakarta-tomcat، وبداخله الشجرة التالية:

LOGS           <REP>        15/11/00   9:04 logs
LICENSE              2 876  18/04/00  15:56 LICENSE
CONF           <REP>        15/11/00   8:53 conf
DOC            <REP>        15/11/00   8:53 doc
LIB            <REP>        15/11/00   8:53 lib
SRC            <REP>        15/11/00   8:53 src
WEBAPPS        <REP>        15/11/00   8:53 webapps
BIN            <REP>        15/11/00   8:53 bin
WORK           <REP>        15/11/00   9:04 work

8.1.10.2. تشغيل/إيقاف خادم الويب Tomcat

Tomcat هو خادم ويب مثل Apache أو PWS. لتشغيله، تتوفر روابط في قائمة البرامج:

Start Tomcat
لتشغيل Tomcat
Stop Tomcat
لإيقافه

عند تشغيل Tomcat، تظهر نافذة DOS تحتوي على المحتوى التالي:

Image

يمكن تقليص نافذة DOS هذه إلى أيقونة. وستظل موجودة طالما ظل Tomcat قيد التشغيل. يمكن بعد ذلك الانتقال إلى الاختبارات الأولية. يعمل خادم الويب Tomcat على المنفذ 8080. بمجرد تشغيل Tomcat، افتح متصفح ويب واطلب العنوان http://localhost:8080. يجب أن تظهر لك الصفحة التالية:

Image

اتبع الرابط «أمثلة على Servlet»:

Image

انقر على الرابط Execute من RequestParameters ثم على الرابط الخاص بـ Source. ستحصل على لمحة أولية عن ماهية «سيرفلت» جافا. ويمكنك فعل الشيء نفسه مع الروابط الموجودة على الصفحات JSP.

لإيقاف تشغيل Tomcat، سنستخدم الرابط «Stop Tomcat» الموجود في قائمة البرامج.

8.1.11. JBuilder

Jbuilder هي بيئة لتطوير تطبيقات Java. لإنشاء سيرفلتات Java التي لا تحتوي على واجهات رسومية، ليس من الضروري وجود مثل هذه البيئة. يكفي استخدام محرر نصوص و JDK. إلا أن JBuilder يوفر بعض المزايا الإضافية مقارنةً بالطريقة السابقة:

  • سهولة تصحيح الأخطاء: يُشير المُجمِّع إلى الأسطر التي تحتوي على أخطاء في البرنامج، ومن السهل الانتقال إليها
  • اقتراح الكود: عند استخدام كائن Java، يعرض JBuilder قائمة بخصائصه وأساليبه مباشرةً. وهذا أمر عملي للغاية، خاصةً وأن معظم كائنات Java تحتوي على عدد كبير جدًا من الخصائص والأساليب التي يصعب تذكرها.

يمكن العثور على JBuilder على الموقع http://www.borland.com/jbuilder. يجب ملء نموذج للحصول على البرنامج. يتم إرسال مفتاح التنشيط عبر البريد الإلكتروني. لتثبيت JBuilder 7، تم اتباع الخطوات التالية على سبيل المثال:

  • تم الحصول على ثلاثة ملفات مضغوطة: للتطبيق، وللوثائق، وللأمثلة. ويوجد رابط منفصل لكل ملف مضغوط من هذه الملفات على موقع JBuilder.
  • تم تثبيت التطبيق أولاً، ثم الوثائق، وأخيراً الأمثلة
  • عند تشغيل التطبيق لأول مرة، يُطلب إدخال مفتاح التنشيط: وهو المفتاح الذي تم إرساله إليك عبر البريد الإلكتروني. في الإصدار 7، يمثل هذا المفتاح في الواقع ملفًا نصيًّا كاملاً يمكن وضعه، على سبيل المثال، في مجلد تثبيت JB7. عندما يُطلب المفتاح، قم بتحديد الملف المعني. وبمجرد القيام بذلك، لن يُطلب المفتاح مرة أخرى.

هناك بعض الإعدادات المفيدة التي يجب إجراؤها إذا كنت ترغب في استخدام JBuilder لإنشاء سيرفلتات Java. في الواقع، الإصدار المعروف باسم Jbuilder الشخصي هو إصدار مبسط لا يتضمن، على وجه الخصوص، جميع الفئات اللازمة لتطوير الويب بلغة Java. يمكننا ضبط JBuilder بحيث يستخدم مكتبات الفئات التي يوفرها Tomcat. ويتم ذلك على النحو التالي:

  • تشغيل JBuilder

Image

  • تنشيط الخيار «Tools/Configure» لـ JDKs

Image

في قسم «JDK Settings» أعلاه، عادةً ما يظهر في حقل «Name» الإصدار JDK 1.3.1. إذا كان لديك إصدار أحدث من JDK، فاستخدم زر «Change» لتحديد مجلد تثبيت هذا الإصدار. في المثال أعلاه، تم تحديد المجلد E:\Program Files\jdk14 حيث تم تثبيت نسخة JDK 1.4. من الآن فصاعدًا، سيستخدم JBuilder هذا الإصدار JDK في عمليات التجميع والتشغيل. في القسم (Class, Source, Documentation) توجد قائمة بجميع مكتبات الفئات التي سيستكشفها JBuilder، وهنا فئات JDK 1.4. لا تكفي فئات هذا الإصدار لتطوير الويب بلغة Java. لإضافة مكتبات فئات أخرى، نستخدم زر «Add» ونحدد ملفات .jar الإضافية التي نرغب في استخدامها. ملفات .jar هي مكتبات فئات. يأتي Tomcat 4.x مزودًا بجميع مكتبات الفئات اللازمة لتطوير الويب. وتوجد هذه المكتبات في <tomcat>\common\lib حيث يمثل <tomcat> مجلد تثبيت Tomcat:

Image

باستخدام الزر «Add»، سنقوم بإضافة هذه المكتبات، واحدة تلو الأخرى، إلى قائمة المكتبات التي يستكشفها JBuilder:

Image

من الآن فصاعدًا، يمكننا ترجمة برامج Java المتوافقة مع معيار J2EE، ولا سيما سيرفلتات Java. يستخدم JBuilder للتحويل البرمجي فقط، بينما يتولى Tomcat التنفيذ لاحقًا وفقًا للإجراءات الموضحة في الدورة التدريبية.

8.2. كود مصدر البرامج

8.2.1. العميل العام TCP

تعمل العديد من الخدمات التي تم إنشاؤها في بدايات الإنترنت وفقًا لنموذج خادم الصدى الذي درسناه سابقًا: حيث تتم عمليات التبادل بين العميل والخادم عن طريق تبادل أسطر نصية. سنقوم بكتابة عميل TCP عام يتم تشغيله بالطريقة التالية: java cltTCPgenerique خادم المنفذ

سيتصل هذا العميل TCP بالمنفذ port الخاص بالخادم serveur. وبمجرد القيام بذلك، سيقوم بإنشاء خيطين:

  1. خيط مسؤول عن قراءة الأوامر المكتوبة على لوحة المفاتيح وإرسالها إلى الخادم
  2. خيط آخر مسؤول عن قراءة الردود الواردة من الخادم وعرضها على الشاشة

لماذا خيطان؟ كل خدمة TCP-IP لها بروتوكولها الخاص، وقد نواجه أحيانًا الحالات التالية:

  • يجب على العميل إرسال عدة أسطر من النص قبل الحصول على رد
  • قد تتضمن استجابة الخادم عدة أسطر من النص

لذلك، فإن الحلقة التي تتمثل في إرسال سطر واحد إلى الخادم - واستلام سطر واحد مرسَل من الخادم - لا تكون مناسبة دائمًا. لذا سنقوم بإنشاء حلقتين منفصلتين:

  • حلقة لقراءة الأوامر المكتوبة على لوحة المفاتيح لإرسالها إلى الخادم. سيشير المستخدم إلى نهاية الأوامر باستخدام الكلمة الرئيسية fin.
  • حلقة لاستقبال وعرض ردود الخادم. وستكون هذه الحلقة حلقة لا نهائية لا تتوقف إلا بإغلاق تدفق الشبكة من قِبل الخادم أو من قِبل المستخدم عبر لوحة المفاتيح عند كتابة الأمر fin.

ولفصل هاتين الحلقتين عن بعضهما، نحتاج إلى خيطين مستقلين. لنعرض مثالاً على التنفيذ حيث يتصل عميل TCP العام لدينا بخدمة SMTP (بروتوكول النقل SendMail). هذه الخدمة مسؤولة عن توجيه البريد الإلكتروني إلى المستلمين. وهي تعمل على المنفذ 25 وتستخدم بروتوكول اتصال من نوع تبادل الأسطر النصية.

Dos>java clientTCPgenerique istia.univ-angers.fr 25
Commandes :
<-- 220 istia.univ-angers.fr ESMTP Sendmail 8.11.6/8.9.3; Mon, 13 May 2002 08:37:26 +0200
help
<-- 502 5.3.0 Sendmail 8.11.6 -- HELP not implemented
mail from: machin@univ-angers.fr
<-- 250 2.1.0 machin@univ-angers.fr... Sender ok
rcpt to: serge.tahe@istia.univ-angers.fr
<-- 250 2.1.5 serge.tahe@istia.univ-angers.fr... Recipient ok
data
<-- 354 Enter mail, end with "." on a line by itself
Subject: test

ligne1
ligne2
ligne3
.
<-- 250 2.0.0 g4D6bks25951 Message accepted for delivery
quit
<-- 221 2.0.0 istia.univ-angers.fr closing connection
[fin du thread de lecture des réponses du serveur]
fin
[fin du thread d'envoi des commandes au serveur]

دعونا نعلق على هذه التبادلات بين العميل والخادم:

  • تقوم الخدمة SMTP بإرسال رسالة ترحيب عندما يتصل بها أحد العملاء:
<-- 220 istia.univ-angers.fr ESMTP Sendmail 8.11.6/8.9.3; Mon, 13 May 2002 08:37:26 +0200
  • تحتوي بعض الخدمات على أمر help يقدم إرشادات حول الأوامر التي يمكن استخدامها مع الخدمة. لكن هذا ليس هو الحال هنا. الأوامر SMTP المستخدمة في المثال هي التالية:
    • mail from: expéditeur، للإشارة إلى العنوان الإلكتروني لمرسل الرسالة
    • rcpt to: destinataire، للإشارة إلى العنوان الإلكتروني لمستلم الرسالة. إذا كان هناك عدة مستلمين، يتم إعادة إرسال الأمر rcpt to: عدة مرات حسب الحاجة لكل مستلم.
    • data التي تُعلم الخادم SMTP بأننا سنرسل الرسالة. كما هو موضح في رد الخادم، فإن هذه الأوامر عبارة عن سلسلة من الأسطر تنتهي بسطر يحتوي على حرف النقطة فقط. قد تحتوي الرسالة على رؤوس (headers) مفصولة عن نص الرسالة بسطر فارغ. في مثالنا، قمنا بتحديد موضوع باستخدام الكلمة المفتاحية Subject:
  • بمجرد إرسال الرسالة، يمكن إعلام الخادم بأننا انتهينا باستخدام الأمر quit. عندئذٍ يقوم الخادم بإغلاق اتصال الشبكة. ويمكن لسلسلة عمليات القراءة اكتشاف هذا الحدث والتوقف.
  • ثم يضغط المستخدم على مفتاح «fin» على لوحة المفاتيح لإيقاف مؤشر القراءة الخاص بالأوامر المكتوبة على لوحة المفاتيح أيضًا.

إذا تحققنا من البريد الوارد، فسنجد ما يلي (Outlook):

Image

يُلاحظ أن الخدمة SMTP لا يمكنها تحديد ما إذا كان المرسل صالحًا أم لا. ولذلك لا يمكن أبدًا الوثوق بحقل from في أي رسالة. في هذه الحالة، لم يكن المرسل machin@univ-angers.fr موجودًا.

يمكن لهذا العميل TCP العام أن يتيح لنا اكتشاف بروتوكول تفاعل خدمات الإنترنت، ومن ثم إنشاء فئات متخصصة لعملاء هذه الخدمات. دعونا نكتشف بروتوكول تفاعل الخدمة POP (بروتوكول مكتب البريد) الذي يتيح استرداد رسائل البريد الإلكتروني المخزنة على الخادم. وهو يعمل على المنفذ 110.

Dos> java clientTCPgenerique istia.univ-angers.fr 110
Commandes :
<-- +OK Qpopper (version 4.0.3) at istia.univ-angers.fr starting.
help
<-- -ERR Unknown command: "help".
user st
<-- +OK Password required for st.
pass monpassword
<-- +OK st has 157 visible messages (0 hidden) in 11755927 octets.
list
<-- +OK 157 visible messages (11755927 octets)
<-- 1 892847
<-- 2 171661
...
<-- 156 2843
<-- 157 2796
<-- .
retr 157
<-- +OK 2796 octets
<-- Received: from lagaffe.univ-angers.fr (lagaffe.univ-angers.fr [193.49.144.1])
<--     by istia.univ-angers.fr (8.11.6/8.9.3) with ESMTP id g4D6wZs26600;
<--     Mon, 13 May 2002 08:58:35 +0200
<-- Received: from jaume ([193.49.146.242])
<--     by lagaffe.univ-angers.fr (8.11.1/8.11.2/GeO20000215) with SMTP id g4D6wSd37691;
<--     Mon, 13 May 2002 08:58:28 +0200 (CEST)
...
<-- ------------------------------------------------------------------------
<-- NOC-RENATER2                  Tl.  : 0800 77 47 95
<-- Fax : (+33) 01 40 78 64 00 ,  Email : noc-r2@cssi.renater.fr
<-- ------------------------------------------------------------------------
<--
<-- .
quit
<-- +OK Pop server at istia.univ-angers.fr signing off.
[fin du thread de lecture des réponses du serveur]
fin
[fin du thread d'envoi des commandes au serveur]

الأوامر الرئيسية هي التالية:

  • user login، حيث يتم إدخال اسم المستخدم الخاص بك على الجهاز الذي يحتوي على بريدك الإلكتروني
  • pass password، حيث يتم إدخال كلمة المرور المرتبطة باسم المستخدم السابق
  • list، للحصول على قائمة الرسائل في شكل رقم وحجم بالبايت
  • retr i، لقراءة الرسالة رقم i
  • quit، لإنهاء الحوار.

لنكتشف الآن بروتوكول الحوار بين العميل وخادم الويب الذي يعمل عادةً على المنفذ 80:

Dos> java clientTCPgenerique istia.univ-angers.fr 80
Commandes :
GET /index.html HTTP/1.0

<-- HTTP/1.1 200 OK
<-- Date: Mon, 13 May 2002 07:30:58 GMT
<-- Server: Apache/1.3.12 (Unix)  (Red Hat/Linux) PHP/3.0.15 mod_perl/1.21
<-- Last-Modified: Wed, 06 Feb 2002 09:00:58 GMT
<-- ETag: "23432-2bf3-3c60f0ca"
<-- Accept-Ranges: bytes
<-- Content-Length: 11251
<-- Connection: close
<-- Content-Type: text/html
<--
<-- <html>
<--
<-- <head>
<-- <meta http-equiv="Content-Type"
<-- content="text/html; charset=iso-8859-1">
<-- <meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<-- <title>Bienvenue a l'ISTIA - Universite d'Angers</title>
<-- </head>
....
<-- face="Verdana"> - Dernire mise  jour le <b>10 janvier 2002</b></font></p>
<-- </body>
<-- </html>
<--
[fin du thread de lecture des réponses du serveur]
fin
[fin du thread d'envoi des commandes au serveur]

يرسل عميل الويب أوامره إلى الخادم وفقًا للنموذج التالي:

commande1
commande2
...
commanden
[ligne vide]

لا يستجيب خادم الويب إلا بعد تلقي السطر الفارغ. في المثال، لم نستخدم سوى أمر واحد:

GET /index.html HTTP/1.0

الذي يطلب من الخادم URL /index.html ويشير إلى أنه يعمل باستخدام بروتوكول HTTP الإصدار 1.0. أحدث إصدار من هذا البروتوكول هو 1.1. يوضح المثال أن الخادم قد رد بإرسال محتوى الملف index.html ثم أغلق الاتصال، حيث نرى أن مؤشر ترابط قراءة الردود قد انتهى. قبل إرسال محتوى الملف index.html، أرسل خادم الويب سلسلة من الرؤوس تنتهي بسطر فارغ:

<-- HTTP/1.1 200 OK
<-- Date: Mon, 13 May 2002 07:30:58 GMT
<-- Server: Apache/1.3.12 (Unix)  (Red Hat/Linux) PHP/3.0.15 mod_perl/1.21
<-- Last-Modified: Wed, 06 Feb 2002 09:00:58 GMT
<-- ETag: "23432-2bf3-3c60f0ca"
<-- Accept-Ranges: bytes
<-- Content-Length: 11251
<-- Connection: close
<-- Content-Type: text/html
<--
<-- <html>

السطر <html> هو السطر الأول من الملف /index.html. ما سبق يُسمى رؤوس HTTP (بروتوكول النقل HyperText). لن ندخل هنا في تفاصيل هذه الرؤوس، لكن تجدر الإشارة إلى أن عميلنا العام يتيح الوصول إليها، وهو ما قد يكون مفيدًا لفهمها. السطر الأول على سبيل المثال:

<-- HTTP/1.1 200 OK

تشير إلى أن خادم الويب الذي تم الاتصال به يدعم بروتوكول HTTP/1.1 وأنه عثر بالفعل على الملف المطلوب (200 OK)، حيث يمثل الرقم 200 رمز استجابة HTTP. الأسطر

<-- Content-Length: 11251
<-- Connection: close
<-- Content-Type: text/html

تُعلم العميل بأنه سيتلقى 11251 بايت تمثل النص HTML (لغة ترميز HyperText) وأنه عند انتهاء الإرسال، سيتم إغلاق الاتصال.

إذن، لدينا هنا عميل TCP عملي للغاية. لا شك أنه أقل قدرة من البرنامج الرسمي telnet، لكن كان من المثير للاهتمام أن نكتبه بأنفسنا. برنامج عميل TCP العام هو كما يلي:

// paquetages importés
import java.io.*;
import java.net.*;

public class clientTCPgenerique{

    // reçoit en paramètre les caractéristiques d'un service sous la forme
     // serveur port
     // se connecte au service
     // crée un thread pour lire des commandes tapées au clavier
     // celles-ci seront envoyées au serveur
     // crée un thread pour lire les réponses du serveur
     // celles-ci seront affichées à l'écran
     // le tout se termine avec la commande fin tapée au clavier

   // variable d'instance
  private static Socket client;

    public static void main(String[] args){

         // syntaxe
        final String syntaxe="pg serveur port";

         // nombre d'arguments
        if(args.length != 2)
            erreur(syntaxe,1);

         // on note le nom du serveur
        String serveur=args[0];

         // le port doit être entier >0
        int port=0;
        boolean erreurPort=false;
        Exception E=null;
        try{
            port=Integer.parseInt(args[1]);
        }catch(Exception e){
            E=e;
            erreurPort=true;
        }
        erreurPort=erreurPort || port <=0;
        if(erreurPort)
            erreur(syntaxe+"\n"+"Port incorrect ("+E+")",2);

        client=null;
         // il peut y avoir des problèmes
        try{
             // on se connecte au service
            client=new Socket(serveur,port);
        }catch(Exception ex){
             // erreur
            erreur("Impossible de se connecter au service ("+ serveur
                +","+port+"), erreur : "+ex.getMessage(),3);
             // fin
            return;
        }//catch

         // on crée les threads de lecture/écriture
    new ClientSend(client).start();
    new ClientReceive(client).start();

         // fin thread main
        return;
    }// main

     // affichage des erreurs
    public static void erreur(String msg, int exitCode){
         // affichage erreur
        System.err.println(msg);
         // arrêt avec erreur
        System.exit(exitCode);
    }//erreur
}//classe  

class ClientSend extends Thread {
    // classe chargée de lire des commandes tapées au clavier
     // et de les envoyer à un serveur via un client tcp passé en paramètre

    private Socket client;    // le client tcp

     // constructeur
    public ClientSend(Socket client){
         // on note le client tcp
        this.client=client;
    }//constructeur

     // méthode Run du thread
    public void run(){

        // données locales
        PrintWriter OUT=null;            // flux d'écriture réseau
    BufferedReader IN=null;        // flux clavier
        String commande=null;            // commande lue au clavier

         // gestion des erreurs
        try{
             // création du flux d'écriture réseau
            OUT=new PrintWriter(client.getOutputStream(),true);
      // création du flux d'entrée clavier
      IN=new BufferedReader(new InputStreamReader(System.in));
            // boucle saisie-envoi des commandes
            System.out.println("Commandes : ");
            while(true){
                 // lecture commande tapée au clavier
                commande=IN.readLine().trim();
                 // fini ?
                if (commande.toLowerCase().equals("fin")) break;
                // envoi commande au serveur
                OUT.println(commande);
                 // commande suivante
            }//while
        }catch(Exception ex){
             // erreur
            System.err.println("Envoi : L'erreur suivante s'est produite : " + ex.getMessage());
        }//catch
         // fin - on ferme les flux
        try{
            OUT.close();client.close();
        }catch(Exception ex){}
         // on signale la fin du thread
        System.out.println("[Envoi : fin du thread d'envoi des commandes au serveur]");
    }//run
}//classe

class ClientReceive extends Thread{
    // classe chargée de lire les lignes de texte destinées à un 
     // client tcp passé en paramètre

    private Socket client;    // le client tcp

     // constructeur
    public ClientReceive(Socket client){
         // on note le client tcp
        this.client=client;
    }//constructeur

     // méthode Run du thread
    public void run(){

        // données locales
        BufferedReader IN=null;        // flux lecture réseau
        String réponse=null;        // réponse serveur

         // gestion des erreurs
        try{
             // création du flux lecture réseau
            IN=new BufferedReader(new InputStreamReader(client.getInputStream()));
            // boucle lecture lignes de texte du flux IN
            while(true){
                 // lecture flux réseau
                réponse=IN.readLine();
                 // flux fermé ?
                if(réponse==null) break;
                // affichage
                System.out.println("<-- "+réponse);
            }//while
        }catch(Exception ex){
            // erreur
            System.err.println("Réception : L'erreur suivante s'est produite : " + ex.getMessage());
        }//catch
         // fin - on ferme les flux
        try{
            IN.close();client.close();
        }catch(Exception ex){}
         // on signale la fin du thread
        System.out.println("[Réception : fin du thread de lecture des réponses du serveur]");
    }//run
}//classe

8.2.2. خادم TCP العام

ننتقل الآن إلى خادم

  • يعرض على الشاشة الأوامر المرسلة من قبل عملائه
  • ويرسل إليهم كردّ الأسطر النصية التي يكتبها المستخدم على لوحة المفاتيح. وبالتالي، فإن المستخدم هو الذي يقوم بدور الخادم.

يتم تشغيل البرنامج بواسطة: java serveurTCPgenerique portEcoute، حيث يمثل portEcoute المنفذ الذي يجب على العملاء الاتصال به. وسيتم توفير الخدمة للعميل بواسطة خيطين:

  • خيط مخصص حصريًّا لقراءة أسطر النص المرسلة من العميل
  • خيط آخر مخصص حصريًا لقراءة الردود التي يكتبها المستخدم على لوحة المفاتيح. وسيقوم هذا الخيط بالإشارة، عبر الأمر fin، إلى أنه ينهي الاتصال مع العميل.

يقوم الخادم بإنشاء خيطين لكل عميل. إذا كان هناك n عميلًا، فسيكون هناك 2n خيطًا نشطًا في نفس الوقت. أما الخادم نفسه فلا يتوقف أبدًا إلا بضغط المستخدم على Ctrl-C على لوحة المفاتيح. لنلقِ نظرة على بعض الأمثلة.

يتم تشغيل الخادم على المنفذ 100 ونستخدم العميل العام للتواصل معه. نافذة العميل هي كما يلي:

E:\data\serge\MSNET\c#\réseau\client tcp générique> java clientTCPgenerique localhost 100
Commandes :
commande 1 du client 1
<-- réponse 1 au client 1
commande 2 du client 1
<-- réponse 2 au client 1
fin
L'erreur suivante s'est produite : Impossible de lire les données de la connexion de transport.
[fin du thread de lecture des réponses du serveur]
[fin du thread d'envoi des commandes au serveur]

السطور التي تبدأ بـ <-- هي تلك المرسلة من الخادم إلى العميل، أما البقية فهي تلك المرسلة من العميل إلى الخادم. نافذة الخادم هي كما يلي:


Dos> java serveurTCPgenerique 100
Serveur générique lancé sur le port 100
Thread de lecture des réponses du serveur au client 1 lancé
1 : Thread de lecture des demandes du client 1 lancé
<-- commande 1 du client 1
réponse 1 au client 1
1 : <-- commande 2 du client 1
réponse 2 au client 1
1 : [fin du Thread de lecture des demandes du client 1]
fin
[fin du Thread de lecture des réponses du serveur au client 1]

الأسطر التي تبدأ بـ <-- هي تلك المرسلة من العميل إلى الخادم. الأسطر N: هي الأسطر المرسلة من الخادم إلى العميل رقم N. الخادم المذكور أعلاه لا يزال نشطًا في حين أن العميل 1 قد انتهى. يتم تشغيل عميل ثانٍ لنفس الخادم:


Dos> java clientTCPgenerique localhost 100
Commandes :
commande 3 du client 2
<-- réponse 3 au client 2
fin
L'erreur suivante s'est produite : Impossible de lire les données de la connexion de transport.
[fin du thread de lecture des réponses du serveur]
[fin du thread d'envoi des commandes au serveur]

تكون نافذة الخادم عندئذٍ كما يلي:


Dos> java serveurTCPgenerique 100
Serveur générique lancé sur le port 100
Thread de lecture des réponses du serveur au client 1 lancé
1 : Thread de lecture des demandes du client 1 lancé
<-- commande 1 du client 1
réponse 1 au client 1
1 : <-- commande 2 du client 1
réponse 2 au client 1
1 : [fin du Thread de lecture des demandes du client 1]
fin
[fin du Thread de lecture des réponses du serveur au client 1]
Thread de lecture des réponses du serveur au client 2 lancé
2 : Thread de lecture des demandes du client 2 lancé
<-- commande 3 du client 2
réponse 3 au client 2
2 : [fin du Thread de lecture des demandes du client 2]
fin
[fin du Thread de lecture des réponses du serveur au client 2]
^C

لنحاكي الآن خادم ويب عن طريق تشغيل خادمنا العام على المنفذ 88:


Dos> java serveurTCPgenerique 88
Serveur générique lancé sur le port 88

لنستخدم الآن متصفحًا ونطلب الصفحة http://localhost:88/exemple.html. سيتصل المتصفح عندئذٍ بالمنفذ 88 الخاص بالجهاز localhost ثم يطلب الصفحة /exemple.html:

Image

لنلقِ نظرة الآن على نافذة الخادم الخاص بنا:

Dos>java serveurTCPgenerique 88
Serveur générique lancé sur le port 88
Thread de lecture des réponses du serveur au client 2 lancé
2 : Thread de lecture des demandes du client 2 lancé
<-- GET /exemple.html HTTP/1.1
<-- Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, */*
<-- Accept-Language: fr
<-- Accept-Encoding: gzip, deflate
<-- User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705; .NET CLR 1.0.2
914)
<-- Host: localhost:88
<-- Connection: Keep-Alive
<--

وهكذا نكتشف الرؤوس HTTP المرسلة من المتصفح. وهذا يسمح لنا باكتشاف بروتوكول HTTP تدريجيًا. في مثال سابق، أنشأنا عميل ويب لا يرسل سوى الأمر الوحيد GET. وكان ذلك كافياً. ونلاحظ هنا أن المتصفح يرسل معلومات أخرى إلى الخادم. والغرض من هذه المعلومات هو إعلام الخادم بنوع العميل الذي يتعامل معه. كما نلاحظ أن رؤوس الرسائل HTTP تنتهي بسطر فارغ.

لنقم بإعداد رد لعميلنا. المستخدم الذي يكتب على لوحة المفاتيح هو هنا الخادم الحقيقي ويمكنه إعداد الرد يدويًّا. لنتذكر الرد الذي قدمه خادم الويب في مثال سابق:

<-- HTTP/1.1 200 OK
<-- Date: Mon, 13 May 2002 07:30:58 GMT
<-- Server: Apache/1.3.12 (Unix)  (Red Hat/Linux) PHP/3.0.15 mod_perl/1.21
<-- Last-Modified: Wed, 06 Feb 2002 09:00:58 GMT
<-- ETag: "23432-2bf3-3c60f0ca"
<-- Accept-Ranges: bytes
<-- Content-Length: 11251
<-- Connection: close
<-- Content-Type: text/html
<--
<-- <html>

دعونا نحاول تقديم إجابة مماثلة:

...
<-- Host: localhost:88
<-- Connection: Keep-Alive
<--
2 : HTTP/1.1 200 OK
2 : Server: serveur tcp generique
2 : Connection: close
2 : Content-Type: text/html
2 :
2 : <html>
2 :   <head><title>Serveur generique</title></head>
2 :   <body>
2 :     <center>
2 :       <h2>Reponse du serveur generique</h2>
2 :     </center>
2 :    </body>
2 : </html>
2 : fin
L'erreur suivante s'est produite : Impossible de lire les données de la connexion de transport.
[fin du Thread de lecture des demandes du client 2]
[fin du Thread de lecture des réponses du serveur au client 2]

يتم إرسال الأسطر التي تبدأ بـ 2: من الخادم إلى العميل رقم 2. الأمر fin ينهي اتصال الخادم بالعميل. وقد اقتصرنا في ردنا على الرؤوس التالية لـ HTTP:

HTTP/1.1 200 OK
2 : Server: serveur tcp generique
2 : Connection: close
2 : Content-Type: text/html
2 :

نحن لا نحدد حجم الملف الذي سنرسله (Content-Length) بل نكتفي بالقول إننا سنغلق الاتصال (Connection: close) بعد إرساله. وهذا يكفي للمتصفح. وعندما يرى المتصفح أن الاتصال قد أُغلق، سيعلم أن استجابة الخادم قد اكتملت، وسيقوم بعرض الصفحة HTML التي تم إرسالها إليه. وهذه الصفحة هي كما يلي:

2 : <html>
2 :   <head><title>Serveur generique</title></head>
2 :   <body>
2 :     <center>
2 :       <h2>Reponse du serveur generique</h2>
2 :     </center>
2 :    </body>
2 : </html>

ثم يقوم المستخدم بإغلاق الاتصال بالعميل عن طريق كتابة الأمر fin. عندئذٍ يدرك المتصفح أن استجابة الخادم قد اكتملت ويمكنه عرضها:

Image

وإذا أدخلنا الأمر View/Source أعلاه لمعرفة ما تلقّاه المتصفح، فسنحصل على:

Image

أي بالضبط ما تم إرساله من الخادم العام.

رمز خادم TCP العام هو كما يلي:

// paquetages
import java.io.*;
import java.net.*;

public class serveurTCPgenerique{

     // programme principal
    public static void main (String[] args){

    // reçoit le port d'écoute des demandes des clients
     // crée un thread pour lire les demandes du client
     // celles-ci seront affichées à l'écran
     // crée un thread pour lire des commandes tapées au clavier
     // celles-ci seront envoyées comme réponse au client
     // le tout se termine avec la commande fin tapée au clavier

    final String syntaxe="Syntaxe : pg port";
   // variable d'instance
         // y-a-t-il un argument
     if(args.length != 1)
        erreur(syntaxe,1);

         // le port doit être entier >0
        int port=0;
        boolean erreurPort=false;
        Exception E=null;
        try{
            port=Integer.parseInt(args[0]);
        }catch(Exception e){
            E=e;
            erreurPort=true;
        }
        erreurPort=erreurPort || port <=0;
        if(erreurPort)
            erreur(syntaxe+"\n"+"Port incorrect ("+E+")",2);

     // on crée le servive d'écoute
    ServerSocket ecoute=null;
    int nbClients=0;    // nbre de clients traités
        try{
             // on crée le service
            ecoute=new ServerSocket(port);
             // suivi
            System.out.println("Serveur générique lancé sur le port " + port);

             // boucle de service aux clients
            Socket client=null;
            while (true){ // boucle infinie - sera arrêtée par Ctrl-C
                 // attente d'un client
                client=ecoute.accept();

                 // le service est assuré des threads séparés
                nbClients++;

                 // on crée les threads de lecture/écriture
        new ServeurSend(client,nbClients).start();
        new ServeurReceive(client,nbClients).start();

                // on retourne à l'écoute des demandes
            }// fin while
        }catch(Exception ex){
             // on signale l'erreur
            erreur("L'erreur suivante s'est produite : " + ex.getMessage(),3);
        }//catch
    }// fin main

     // affichage des erreurs
    public static void erreur(String msg, int exitCode){
         // affichage erreur
        System.err.println(msg);
         // arrêt avec erreur
        System.exit(exitCode);
    }//erreur
}//classe

class ServeurSend extends Thread{
    // classe chargée de lire des réponses tapées au clavier
     // et de les envoyer à un client via un client tcp passé au constructeur

    Socket client;    // le client tcp
    int numClient;        // n° de client

     // constructeur
    public ServeurSend(Socket client, int numClient){
         // on note le client tcp
        this.client=client;
         // et son n°
        this.numClient=numClient;
    }//constructeur

     // méthode Run du thread
    public void run(){

        // données locales
        PrintWriter OUT=null;        // flux d'écriture réseau
        String réponse=null;        // réponse lue au clavier
    BufferedReader IN=null;    // flux clavier

        // suivi
        System.out.println("Thread de lecture des réponses du serveur au client "+ numClient + " lancé");
         // gestion des erreurs
        try{
             // création du flux d'écriture réseau
            OUT=new PrintWriter(client.getOutputStream(),true);
      // création du flux clavier
      IN=new BufferedReader(new InputStreamReader(System.in));
            // boucle saisie-envoi des commandes
            while(true){
                 // identification client
                System.out.print("--> " + numClient + " : ");
                 // lecture réponse tapée au clavier
                réponse=IN.readLine().trim();
                // fini ?
                if (réponse.toLowerCase().equals("fin")) break;
                // envoi réponse au serveur
                OUT.println(réponse);
                 // réponse suivante
            }//while
        }catch(Exception ex){
             // erreur
            System.err.println("L'erreur suivante s'est produite : " + ex.getMessage());
        }//catch
         // fin - on ferme les flux
        try{
            OUT.close();client.close();
        }catch(Exception ex){}
         // on signale la fin du thread
        System.out.println("[fin du Thread de lecture des réponses du serveur au client "+ numClient+ "]");
    }//run
}//classe

class ServeurReceive extends Thread{
    // classe chargée de lire les lignes de texte envoyées au serveur 
     // via un client tcp passé au constructeur

    Socket client;    // le client tcp
    int numClient;        // n° de client

     // constructeur
    public ServeurReceive(Socket client, int numClient){
         // on note le client tcp
        this.client=client;
         // et son n°
        this.numClient=numClient;
    }//constructeur

     // méthode Run du thread
    public void run(){

        // données locales
        BufferedReader IN=null;        // flux lecture réseau
        String réponse=null;        // réponse serveur

         // suivi
        System.out.println("Thread de lecture des demandes du client "+ numClient + " lancé");
         // gestion des erreurs
        try{
             // création du flux lecture réseau
            IN=new BufferedReader(new InputStreamReader(client.getInputStream()));
            // boucle lecture lignes de texte du flux IN
            while(true){
                 // lecture flux réseau
                réponse=IN.readLine();
                 // flux fermé ?
                if(réponse==null) break;
                // affichage
                System.out.println("<-- "+réponse);
            }//while
        }catch(Exception ex){
            // erreur
            System.err.println("L'erreur suivante s'est produite : " + ex.getMessage());
        }//catch
         // fin - on ferme les flux
        try{
            IN.close();client.close();
        }catch(Exception ex){}
         // on signale la fin du thread
        System.out.println("[fin du Thread de lecture des demandes du client "+ numClient+"]");
    }//run
}//classe

8.3. JAVASCRIPT

نعرض في هذا القسم ثلاثة أمثلة على استخدام جافا سكريبت في الصفحات WEB. نركز هنا على إدارة النماذج، لكن جافا سكريبت قادرة على القيام بأكثر من ذلك بكثير.

8.3.1. استرداد المعلومات من نموذج

يوضح المثال أدناه كيفية استرداد البيانات التي أدخلها المستخدم في نموذج ما داخل المتصفح. ويتيح ذلك عمومًا إجراء معالجات مسبقة قبل إرسالها إلى الخادم.

8.3.1.1. النموذج

لدينا نموذج يضم المكونات الأكثر شيوعًا وزر «عرض» يسمح بعرض المدخلات التي أدخلها المستخدم.

Image

8.3.1.2. الكود

<html>

  <head>
    <title>Un formulaire traité par Javascript</title>
    <script language="javascript">
      function afficher(){
         // affiche dans une liste les infos du formulaire

         // on efface d'abord
        effacerInfos();

         // on affiche la valeur des # champs
        with(document.frmExemple){
           // champ caché
          ecrire("champ caché="+cache.value);
           // champ textuel simple
          ecrire("champ textuel simple="+simple.value);
           // champ textuel multiple
          ecrire("champ textuel multiple="+lignes.value);
          // boutons radio
          for(i=0;i<radio.length;i++){
            texte="radio["+i+"]="+radio[i].value;
            if(radio[i].checked) texte+=", coché";
            ecrire(texte);
          }//for
             // cases à cocher
          for(i=0;i<qcm.length;i++){
            texte="qcm["+i+"]="+qcm[i].value;
            if(qcm[i].checked) texte+=", coché";
            ecrire(texte);
          }//for
           //liste déroulante
          ecrire("index sélectionné dans le menu="+menu.selectedIndex);
          for(i=0;i<menu.length;i++){
            texte="menu["+i+"]="+menu.options[i].text;
            if(menu.options[i].selected) texte+=",sélectionné";
            ecrire(texte);
          }//for
           //liste à choix multiple
          for(i=0;i<lstVoitures.length;i++){
            texte="lstVoitures["+i+"]="+lstVoitures.options[i].text;
            if(lstVoitures.options[i].selected) texte+=",sélectionné";
            ecrire(texte);
          }//for
           //mot de passe
          ecrire("mot de passe="+passwd.value);
        }//with
      }//function

      function ecrire(texte){
         // écrit texte dans la liste des infos
        frmInfos.lstInfos.options[frmInfos.lstInfos.length]=new Option(texte);
      }//écrire

      function effacerInfos(){
        frmInfos.lstInfos.length=0;
      }//effacerInfos
    </script>
  </head>

  <body bgcolor="#C0C0C0" onload="afficher()">
    <center>
     <h2>Un formulaire traité par Javascript</h2>
    <hr>
    <form method="POST" name="frmExemple">
        <input type="hidden" name="cache" value="secret">
        <table border="0">
        <tr>
            <td align="center">Un champ textuel simple</td>
            <td align="center" width="100">&nbsp;</td>
            <td align="center">Un champ textuel sur plusieurs lignes</td>
        </tr>
        <tr>
            <td align="center"><input type="text" size="20" name="simple"></td>
            <td align="center" width="100">&nbsp;</td>
            <td align="center">
              <textarea name="lignes" rows="2" cols="40">Ce texte est modifiable</textarea>
            </td>
        </tr>
    </table>
    <table border="0">
      <tr>
       <td><strong>Des boutons radio :</strong></td>
        <td>
          <input type="radio" checked name="radio" value="FM">FM
        </td>
        <td>
          <input type="radio" name="radio" value="GO">GO
        </td>
        <td>
          <input type="radio" name="radio" value="PO">PO
        </td>
        <td>&nbsp;</td>
        <td><strong>Des choix multiples :</strong></td>
        <td>
          <input type="checkbox" name="qcm" value="un">un
        </td>
        <td>
          <input type="checkbox" name="qcm" value="deux">deux
        </td>
        <td>
          <input type="checkbox" name="qcm" value="trois">trois
        </td>
     </tr>
    </table>
    <table border="0">
      <tr>
       <td>Un menu déroulant : </td>
        <td>
          <select name="menu" size="1">
             <option>50 F</option>
              <option>60 F</option>
              <option>70 F</option>
              <option>100 F</option>
            </select>
        </td>
          <td>Une liste :</td>
           <td>
             <select name="lstVoitures" multiple size="3">
                <option>Renault</option>
                <option>Citroën</option>
                <option>Peugeot</option>
                <option>Fiat</option>
                <option>Audi</option>
              </select>
           </td>
        </tr>
    </table>
    <table border="0">
        <tr>
            <td>Un mot de passe : </td>
            <td><input type="password" size="21" name="passwd"></td>
            <td>&nbsp;</td>
            <td>Un champ de contexte caché : </td>
        </tr>
    </table>
    </form>
    <hr>
    <h2>Informations du formulaire</h2>
    <form name="frmInfos">
      <table>
        <tr>
          <td><input type="button" value="Effacer" onclick="effacerInfos()"></td>
          <td>
            <select name="lstInfos" multiple size="3">
            </select>
          </td>
          <td>
            <input type="button" name="cmdAfficher" value="Afficher" onclick="afficher()">
          </td>
        </tr>
    </form>
  </body>
</html>

8.3.2. التعبيرات العادية في جافا سكريبت

على مستوى المتصفح، يمكن استخدام جافا سكريبت للتحقق من صحة البيانات التي يدخلها المستخدم قبل إرسالها إلى الخادم. فيما يلي برنامج لاختبار هذه التعبيرات النمطية.

8.3.2.1. صفحة الاختبار

Image

8.3.2.2. كود الصفحة

<html>

  <head>
    <title>Les expressions régulières en Javascript</title>
    <script language="javascript">
      function afficherInfos(){
        with(document.frmRegExp){
           // qq chose à faire ?
          if (! verifier()) return;
          // c'est bon - on efface les résultats précédents
          effacerInfos();
           // vérification du modèle
          modele=new RegExp(txtModele.value);
          champs=modele.exec(txtChaine.value);
          if(champs==null)
             // pas de correspondance entre modèle et chaîne
            ecrireInfos("pas de correspondance");
          else{
             // correspondance - on affiche les résultats obtenus
            ecrireInfos("Il y a correspondance");
            for(i=0;i<champs.length;i++)
              ecrireInfos("champs["+i+"]=["+champs[i]+"]");
          }//else
        }//with
      }//function

      function ecrireInfos(texte){
        // écrit texte dans la liste des infos
        document.frmRegExp.lstInfos.options[document.frmRegExp.lstInfos.length]=new Option(texte);
      }//écrire

      function effacerInfos(){
        frmRegExp.lstInfos.length=0;
      }//effacerInfos

      function jouer(){
         // teste le modèle contre la chaîne dans l'exemple choisi
        with(document.frmRegExp){
          txtModele.value=lstModeles.options[lstModeles.selectedIndex].text
          txtChaine.value=lstChaines.options[lstChaines.selectedIndex].text
          afficherInfos();
        }//with
      }//jouer

      function ajouter(){
         //ajoute le test courant aux exemples
        with(document.frmRegExp){
          // qq chose à faire ?
          if (! verifier()) return;
           // ajout
          lstModeles.options[lstModeles.length]=new Option(txtModele.value);
          lstChaines.options[lstChaines.length]=new Option(txtChaine.value);
           // raz saisies
          txtModele.value="";
          txtChaine.value="";
        }//with
      }//ajouter

      function verifier(){
         // vérifie que les champs de saisie sont non vides
        with(document.frmRegExp){
          champs=/^\s*$/.exec(txtModele.value);
          if(champs!=null){
            alert("Vous n'avez pas indiqué de modèle");
            txtModele.focus();
            return false;
          }//if
          champs=/^\s*$/.exec(txtChaine.value);
          if(champs!=null){
            alert("Vous n'avez pas indiqué de chaîne de test");
            txtChaine.focus();
            return false;
          }//if
           // c'est bon
          return true;
        }//with
      }//verifier
    </script>
  </head>

  <body bgcolor="#C0C0C0">
    <center>
     <h2>Les expressions régulières en Javascript</h2>
    <hr>
    <form name="frmRegExp">
      <table>
        <tr>
          <td>Expression régulière</td>
          <td>Chaîne de test</td>
        </tr>
        <tr>
          <td><input type="text" name="txtModele" size="20"></td>
          <td><input type="text" name="txtChaine" size="20"></td>
        </tr>
        <tr>
          <td>
            <input type="button" name="cmdAfficher" value="Jouer le test" onclick="afficherInfos()">
          </td>
          <td>
            <input type="button" name="cmdAjouter" value="Ajouter aux exemples" onclick="ajouter()">
          </td>
        </tr>
      </table>
      <hr>
      <h2>Résultats de l'instruction champs=expression régulière.exec(chaine)</h2>
      <table>
        <tr>
          <td>
            <select name="lstInfos" size="3">
            </select>
          </td>
        </tr>
      </table>
      <hr>
      <h2>Exemples</h2>
      <table>
 <tr>
          <td align="center">Modèles</td>
          <td align="center">Chaînes</td>
        </tr>
        <tr>
          <td>
            <select name="lstModeles" size="1">
              <option>^\d+$</option>
              <option>^(\d+) (\d+)$</option>
              <option>^(\d+)(.*)(\d+)$</option>
              <option>^(\d+)(\s+)(\d+)$</option>
            </select>
          </td>
          <td>
            <select name="lstChaines" size="1">
              <option>67</option>
              <option>56 84</option>
              <option>45abcd67</option>
              <option>45   67</option>
            </select>
          </td>
          <td>
            <input type="button" name="cmdJouer" value="Jouer l'exemple" onclick="jouer()">
          </td>
        </tr>
    </form>
  </body>
</html>

8.3.3. إدارة القوائم في JavaScript

8.3.3.1. النموذج

Image

8.3.3.2. الرمز

<html>

  <head>
    <title>Les listes en Javascript</title>

    <script language="javascript">
       // ajouter
      function ajouter(L1,L2,T){
         // ajoute la valeur du champ T aux listes L1,L2
           // qq chose à faire ?
          champs=/^\s*$/.exec(T.value);
          if(champs!=null){
            // le champ est vide
            alert("Vous n'avez pas indiqué la valeur à ajouter");
            txtElement.focus();
            return;
          }//if
           // on ajoute l'élément
          L1.options[L1.length]=new Option(T.value);
          L2.options[L2.length]=new Option(T.value);
          T.value="";
      }//ajouter

       //vider
      function vider(L){
         // vide la liste L
        L.length=0;
      }//vider

      //transfert
      function transfert(L1,L2,simple){
        //transfére dans L2 les éléments sélectionnés dans la liste L1

         // qq chose à faire ?
         // index de l'élément sélectionné dans L1
        index1=L1.selectedIndex;
        if(index1==-1){
          alert("Vous n'avez pas sélectionné d'élément");
          return;
        }//if
         // quel est le mode de sélection des éléments des listes
        if(simple){ // sélection simple
          element1=L1.options[index1].text;
           //ajout dans L2
          L2.options[L2.length]=new Option(element1);
          //suppression dans L1
          L1.options[index1]=null;
        }//simple
        if(! simple){ //sélection multiple
           //on parcourt la liste 1 en sens inverse
          for(i=L1.length-1;i>=0;i--){
            //élément sélectionné ?
            if(L1.options[i].selected){
               //on l'ajoute à L2
              L2.options[L2.length]=new Option(L1.options[i].text);
              //on le supprime de L1
              L1.options[i]=null;
            }//if
          }//for i
        }//if ! simple
      }//transfert
   </script>
  </head>

  <body bgcolor="#C0C0C0">
    <center>
     <h2>Les listes en Javascript</h2>
    <hr>
    <form name="frmListes">
      <table>
        <tr>
          <td>
            <input type="button" name="cmdAjouter" value="Ajouter" onclick="ajouter(lst1A,lst1B,txtElement)">
          </td>
          <td>
            <input type="text" name="txtElement">
          </td>
        </tr>
      </table>
      <table>
        <tr>
          <td align="center">liste 1</td>
          <td align="center"><input type="button" value=">>" onclick="transfert(lst1A,lst2A,true)"</td>
          <td align="center"><input type="button" value="<<" onclick="transfert(lst2A,lst1A,true)"</td>
          <td align="center">liste 2</td>
          <td width="30"></td>
          <td align="center">liste 1</td>
          <td align="center"><input type="button" value=">>" onclick="transfert(lst1B,lst2B,false)"</td>
          <td align="center"><input type="button" value="<<" onclick="transfert(lst2B,lst1B,false)"</td>
          <td align="center">liste 2</td>
        </tr>
         <tr>
          <td></td>
          <td align="center">
            <select name="lst1A" size="5">
            </select>
          </td>
          <td align="center">
            <select name="lst2A" size="5">
            </select>
          </td>
          <td></td>
          <td></td>
          <td></td>
          <td align="center">
            <select name="lst1B" size="5" multiple >
            </select>
          </td>
          <td align="center">
            <select name="lst2B" size="5" multiple>
            </select>
          </td>

        </tr>
        <tr>
          <td></td>
          <td align="center"><input type="button" value="Vider" onclick="vider(lst1A)"</td>
          <td align="center"><input type="button" value="Vider" onclick="vider(lst2A)"</td>
          <td></td>
          <td></td>
          <td></td>
          <td align="center"><input type="button" value="Vider" onclick="vider(lst1B)"</td>
          <td align="center"><input type="button" value="Vider" onclick="vider(lst2B)"</td>
          <td></td>
        </tr>
        <tr>
          <td></td>
          <td colspan="2"><strong>Sélection simple</strong></td>
          <td></td>
          <td></td>
          <td></td>
          <td colspan="2"><strong>Sélection multiple</strong></td>
          <td></td>
        </tr>

      </table>
      <hr>
    </form>
  </body>
</html>

برنامج Java يعرض الوقت

QZXW2HTMLCMT000002ZQX كود QZXW2HTMLCSkFWQQZQX لحساب الوقت

QZXW2HTMLCMT000003ZQX الساعات والدقائق والثواني هي متغيرات عامة

QZXW2HTMLCMT000004ZQX والتي يمكن استخدامها في الكود QZXW2HTMLCSFRNTAZQX

QZXW2HTMLCMT000005ZQX الرمز QZXW2HTMLCSFRNTAZQX

QZXW2HTMLCMT000006ZQX machineQZXW2HTMLBWzpwb3J0XQZQX/المسار/المعلومات

QZXW2HTMLCMT000007ZQX مسح

QZXW2HTMLCMT000008ZQX مسح

QZXW2HTMLCMT000009ZQX localhost:81/html/QZXW2HTMLCYmFsaXNlcy5odG0ZQX

QZXW2HTMLCMT000010ZQX localhost:81/html/QZXW2HTMLCYmFsaXNlcy5odG0ZQX

QZXW2HTMLCMT000011ZQX قيمة متغير التكوين QZXW2HTMLCdHJhY2tfZXJyb3JzZQX

QZXW2HTMLCMT000012ZQX تغيير هذه القيمة

QZXW2HTMLCMT000013ZQX التحقق

QZXW2HTMLCMT000014ZQX الأمر allow،deny

QZXW2HTMLCMT000015ZQX الرمز QZXW2HTMLCUEhQZQX

QZXW2HTMLCMT000016ZQX استرداد الوقت الحالي

QZXW2HTMLCMT000017ZQX الرمز QZXW2HTMLCSFRNTAZQX

QZXW2HTMLCMT000018ZQX الرمز QZXW2HTMLCUEhQZQX

QZXW2HTMLCMT000019ZQX يتم استرداد الوقت الحالي

QZXW2HTMLCMT000020ZQX يتم عرض الرد

QZXW2HTMLCMT000021ZQX الرمز QZXW2HTMLCSFRNTAZQX

QZXW2HTMLCMT000022ZQX الرمز QZXW2HTMLCUEhQZQX

QZXW2HTMLCMT000023ZQX يتم استرداد الوقت الحالي

QZXW2HTMLCMT000024ZQX الرمز QZXW2HTMLCSFRNTAZQX

QZXW2HTMLCMT000025ZQX هل لدينا المعلمات المتوقعة؟

QZXW2HTMLCMT000026ZQX يتم استرداد المعلمات QZXW2HTMLCdHh0Tm9tZQX و QZXW2HTMLCdHh0QWdlZQX التي «أرسلها» العميل

QZXW2HTMLCMT000027ZQX if

QZXW2HTMLCMT000028ZQX عرض الصفحة

QZXW2HTMLCMT000029ZQX هل تم إرسال أي قيم؟

QZXW2HTMLCMT000030ZQX هل لدينا المعلمات المتوقعة؟

يتم استرداد المعلمات QZXW2HTMLCMT000031ZQX و QZXW2HTMLCdHh0Tm9tZQX و "QZXW2HTMLCR0VUVMOpcwZQX" من قبل العميل

QZXW2HTMLCMT000032ZQX إذا

QZXW2HTMLCMT000033ZQX يتم عرض الصفحة

QZXW2HTMLCMT000034ZQX هل تم إرسال أي قيم إلى الخادم؟

QZXW2HTMLCMT000035ZQX عرض المتغيرات المرتبطة بخادم الويب

QZXW2HTMLCMT000036ZQX إرسال نص عادي

QZXW2HTMLCMT000037ZQX التنقل عبر المصفوفة الترابطية QZXW2HTMLCJF9TRVJWRVIZQX

QZXW2HTMLCMT000038ZQX while

QZXW2HTMLCMT000039ZQX يعرض المتغيرات المرتبطة بخادم الويب

QZXW2HTMLCMT000040ZQX إرسال نص عادي

QZXW2HTMLCMT000041ZQX تصفح المصفوفة المرتبطة QZXW2HTMLCJF9TRVJWRVIZQX

QZXW2HTMLCMT000042ZQX رأس الصفحة QZXW2HTMLCSFRUUAZQX؟

QZXW2HTMLCMT000043ZQX while

QZXW2HTMLCMT000044ZQX عرض المتغيرات المرتبطة بخادم الويب

QZXW2HTMLCMT000045ZQX إرسال نص عادي

QZXW2HTMLCMT000046ZQX تصفح المصفوفة الترابطية QZXW2HTMLCJF9FTlYZQX

QZXW2HTMLCMT000047ZQX while

QZXW2HTMLCMT000048ZQX جدول القيم

QZXW2HTMLCMT000049ZQX هل لدينا المعلمات المتوقعة

QZXW2HTMLCMT000050ZQX نسترد اختيار المستخدم

QZXW2HTMLCMT000051ZQX الطلب الأولي

QZXW2HTMLCMT000052ZQX الرد على QZXW2HTMLCUE9TVAZQX

QZXW2HTMLCMT000053ZQX لـ

QZXW2HTMLCMT000054ZQX التكوين

QZXW2HTMLCMT000055ZQX جدول القيم

QZXW2HTMLCMT000056ZQX يتم استرداد الاختيار المحتمل للمستخدم

QZXW2HTMLCMT000057ZQX عرض الإجابة

QZXW2HTMLCMT000058ZQX إذا كان الخيار الحالي مطابقًا لاختيار المستخدم، يتم تحديده

QZXW2HTMLCMT000059ZQX for

QZXW2HTMLCMT000060ZQX تابع الصفحة

QZXW2HTMLCMT000061ZQX التكوين

QZXW2HTMLCMT000062ZQX جدول القيم

QZXW2HTMLCMT000063ZQX يتم استرداد الاختيار المحتمل للمستخدم

QZXW2HTMLCMT000064ZQX يتم حساب قائمة القيم المراد عرضها

QZXW2HTMLCMT000065ZQX إذا كان الخيار الحالي مطابقًا لاختيار المستخدم، يتم تحديده

QZXW2HTMLCMT000066ZQX for

QZXW2HTMLCMT000067ZQX يتم حساب الجزء الثاني من الصفحة

QZXW2HTMLCMT000068ZQX إذا

QZXW2HTMLCMT000069ZQX يتم عرض الإجابة

QZXW2HTMLCMT000070ZQX عرض قائمة القيم

QZXW2HTMLCMT000071ZQX عرض الجزء 2

QZXW2HTMLCMT000072ZQX التكوين

QZXW2HTMLCMT000073ZQX جدول القيم

QZXW2HTMLCMT000074ZQX هل حدث خطأ؟

QZXW2HTMLCMT000075ZQX عرض صفحة الخطأ

QZXW2HTMLCMT000076ZQX النهاية

QZXW2HTMLCMT000077ZQX if

QZXW2HTMLCMT000078ZQX يتم استرداد الاختيار المحتمل للمستخدم

QZXW2HTMLCMT000079ZQX يتم حساب قائمة القيم المراد عرضها

QZXW2HTMLCMT000080ZQX إذا كانت الخيار الحالي يساوي الاختيار، يتم تحديده

QZXW2HTMLCMT000081ZQX for

QZXW2HTMLCMT000082ZQX يتم حساب الجزء الثاني من الصفحة

QZXW2HTMLCMT000083ZQX إذا

QZXW2HTMLCMT000084ZQX يتم عرض النتيجة

QZXW2HTMLCMT000085ZQX نهاية

QZXW2HTMLCMT000086ZQX يسترد القيم من قاعدة البيانات QZXW2HTMLCTXlTUUwZQX

QZXW2HTMLCMT000087ZQX فتح اتصال دائم بالخادم QZXW2HTMLCTXlTUUwZQX

QZXW2HTMLCMT000088ZQX أو اتصال عادي إذا لم يكن ذلك ممكنًا

QZXW2HTMLCMT000089ZQX الحصول على القيم

QZXW2HTMLCMT000090ZQX يتم وضع القيم في مصفوفة

QZXW2HTMLCMT000091ZQX while

QZXW2HTMLCMT000092ZQX إغلاق الاتصال (إذا كان الاتصال دائمًا، فلن يتم إغلاقه فعليًّا)

QZXW2HTMLCMT000093ZQX إرجاع النتيجة

QZXW2HTMLCMT000094ZQX QZXW2HTMLCZ2V0VmFsZXVycwZQX

QZXW2HTMLCMT000095ZQX معالجة السطر الحالي باستخدام QZXW2HTMLCb2RiY19yZXN1bHQZQX

QZXW2HTMLCMT000096ZQX while

QZXW2HTMLCMT000097ZQX يسترد القيم من قاعدة بيانات QZXW2HTMLCTXlTUUwZQX

QZXW2HTMLCMT000098ZQX فتح اتصال دائم بالخادم QZXW2HTMLCTXlTUUwZQX

QZXW2HTMLCMT000099ZQX أو اتصال عادي إذا لم يكن ذلك ممكنًا

QZXW2HTMLCMT000100ZQX الحصول على القيم

QZXW2HTMLCMT000101ZQX يتم وضع القيم في مصفوفة

QZXW2HTMLCMT000102ZQX while

QZXW2HTMLCMT000103ZQX إغلاق الاتصال (إذا كان الاتصال دائمًا، فلن يتم إغلاقه فعليًّا)

QZXW2HTMLCMT000104ZQX إرجاع النتيجة

QZXW2HTMLCMT000105ZQX QZXW2HTMLCZ2V0VmFsZXVycwZQX

QZXW2HTMLCMT000106ZQX مسح

QZXW2HTMLCMT000107ZQX التكوين

QZXW2HTMLCMT000108ZQX طريقة الاستدعاء

QZXW2HTMLCMT000109ZQX استرداد المعلمات

QZXW2HTMLCMT000110ZQX يعتمد ذلك على طريقة إرسالها

QZXW2HTMLCMT000111ZQX هل الطلب صالح؟

QZXW2HTMLCMT000112ZQX عرض الصفحة

QZXW2HTMLCMT000113ZQX QZXW2HTMLCY3ljbGVkZXZpZS5waHAZQX

QZXW2HTMLCMT000114ZQX الإعدادات

QZXW2HTMLCMT000115ZQX بدء جلسة عمل

QZXW2HTMLCMT000116ZQX هل يجب إلغاء صلاحيتها؟

QZXW2HTMLCMT000117ZQX نهاية الجلسة

QZXW2HTMLCMT000118ZQX if

QZXW2HTMLCMT000119ZQX إدارة العداد

QZXW2HTMLCMT000120ZQX العداد غير موجود - يتم إنشاؤه

QZXW2HTMLCMT000121ZQX العداد موجود - يتم زيادته

QZXW2HTMLCMT000122ZQX استرداد QZXW2HTMLCSUQZQX من الجلسة الحالية

QZXW2HTMLCMT000123ZQX يتم استرداد العداد

QZXW2HTMLCMT000124ZQX ننتقل إلى صفحة العرض

QZXW2HTMLCMT000125ZQX localhost/poly/sessions/1/QZXW2HTMLCY3ljbGVkZXZpZS5waHAZQX?QZXW2HTMLCUEhQU0VTU0lEZQX=587ce26f943a288d8f41212e30fed13c

QZXW2HTMLCMT000126ZQX يتم تحديد مسار ملف تعريف الارتباط

QZXW2HTMLCMT000127ZQX بدء جلسة عمل

QZXW2HTMLCMT000128ZQX localhost/poly/sessions/2/QZXW2HTMLCY3ljbGVkZXZpZS5waHAZQX QZXW2HTMLCR0VUZQX

QZXW2HTMLCMT000129ZQX التكوين

QZXW2HTMLCMT000130ZQX مكتبة QZXW2HTMLCQ1VSTAZQX

QZXW2HTMLCMT000131ZQX الصيغة: $0 QZXW2HTMLCVVJMZQX QZXW2HTMLCR0VUZQX

QZXW2HTMLCMT000132ZQX يلزم وجود ثلاث معلمات

QZXW2HTMLCMT000133ZQX رسالة خطأ

QZXW2HTMLCMT000134ZQX إيقاف

QZXW2HTMLCMT000135ZQX if

QZXW2HTMLCMT000136ZQX يجب أن تكون الحجة الثالثة هي QZXW2HTMLCR0VUZQX أو QZXW2HTMLCSEVBRAZQX

QZXW2HTMLCMT000137ZQX رسالة خطأ

QZXW2HTMLCMT000138ZQX إيقاف

QZXW2HTMLCMT000139ZQX إذا

QZXW2HTMLCMT000140ZQX المعلمة الأولى هي QZXW2HTMLCVVJMZQX

QZXW2HTMLCMT000141ZQX التحضير للاتصال

QZXW2HTMLCMT000142ZQX ضبط إعدادات الاتصال

QZXW2HTMLCMT000143ZQX تنفيذ الاتصال

QZXW2HTMLCMT000144ZQX إغلاق الاتصال

QZXW2HTMLCMT000145ZQX النهاية

QZXW2HTMLCMT000146ZQX الصيغة: $0 QZXW2HTMLCVVJMZQX QZXW2HTMLCR0VUZQX/QZXW2HTMLCSEVBRAZQX

QZXW2HTMLCMT000147ZQX يلزم وجود ثلاث معلمات

QZXW2HTMLCMT000148ZQX رسالة خطأ

QZXW2HTMLCMT000149ZQX إيقاف

QZXW2HTMLCMT000150ZQX if

QZXW2HTMLCMT000151ZQX الاتصال وعرض النتيجة

QZXW2HTMLCMT000152ZQX خطأ

QZXW2HTMLCMT000153ZQX عرض استجابة الخادم

QZXW2HTMLCMT000154ZQX if

QZXW2HTMLCMT000155ZQX نهاية

QZXW2HTMLCMT000156ZQX يتصل بـ QZXW2HTMLCJFVSTAZQX

QZXW2HTMLCMT000157ZQX يقوم بإنشاء QZXW2HTMLCR0VUZQX أو QZXW2HTMLCSEVBRAZQX وفقًا لقيمة الرأس

QZXW2HTMLCMT000158ZQX تشكل استجابة الخادم نتيجة الدالة

QZXW2HTMLCMT000159ZQX تحليل لـ QZXW2HTMLCVVJMZQX

QZXW2HTMLCMT000160ZQX البروتوكول

QZXW2HTMLCMT000161ZQX إذا

QZXW2HTMLCMT000162ZQX الجهاز

QZXW2HTMLCMT000163ZQX if

QZXW2HTMLCMT000164ZQX المنفذ

QZXW2HTMLCMT000165ZQX المسار

QZXW2HTMLCMT000166ZQX الطلب

QZXW2HTMLCMT000167ZQX if

QZXW2HTMLCMT000168ZQX تحليل QZXW2HTMLCJGhlYWRlcgZQX

QZXW2HTMLCMT000169ZQX رسالة الخطأ

QZXW2HTMLCMT000170ZQX إيقاف

QZXW2HTMLCMT000171ZQX if

QZXW2HTMLCMT000172ZQX فتح اتصال على المنفذ QZXW2HTMLCJHBvcnQZQX الخاص بـ QZXW2HTMLCJGhvdGUZQX

QZXW2HTMLCMT000173ZQX العودة في حالة حدوث خطأ

QZXW2HTMLCMT000174ZQX if

QZXW2HTMLCMT000175ZQX يمثل QZXW2HTMLCJGNvbm5leGlvbgZQX تدفقًا اتصاليًا ثنائي الاتجاه

QZXW2HTMLCMT000176ZQX بين العميل (هذا البرنامج) وخادم الويب الذي تم الاتصال به

QZXW2HTMLCMT000177ZQX تُستخدم هذه القناة لتبادل الأوامر والمعلومات

QZXW2HTMLCMT000178ZQX بروتوكول الاتصال هو QZXW2HTMLCSFRUUAZQX

QZXW2HTMLCMT000179ZQX يرسل العميل الأمر get لطلب QZXW2HTMLCVVJMZQX /

QZXW2HTMLCMT000180ZQX صيغة get QZXW2HTMLCVVJMZQX QZXW2HTMLCSFRUUAZQX/1.0

QZXW2HTMLCMT000181ZQX يجب أن تنتهي رؤوس (headers) بروتوكول QZXW2HTMLCSFRUUAZQX بسطر فارغ

QZXW2HTMLCMT000182ZQX سيقوم الخادم الآن بالرد على القناة QZXW2HTMLCJGNvbm5leGlvbgZQX. سيقوم بإرسال جميع

QZXW2HTMLCMT000183ZQX هذه البيانات ثم يغلق القناة. وبالتالي، يقرأ العميل كل ما يصل من QZXW2HTMLCJGNvbm5leGlvbgZQX

QZXW2HTMLCMT000184ZQX حتى يتم إغلاق القناة

QZXW2HTMLCMT000185ZQX ثم يقوم العميل بدوره بإغلاق الاتصال

QZXW2HTMLCMT000186ZQX العودة

QZXW2HTMLCMT000187ZQX QZXW2HTMLCZ2V0VVJMZQX

QZXW2HTMLCMT000188ZQX localhost/poly/sessions/2/QZXW2HTMLCY3ljbGVkZXZpZS5waHAZQX get

QZXW2HTMLCMT000189ZQX localhost/poly/sessions/2/QZXW2HTMLCY3ljbGVkZXZpZS5waHAZQX 3

QZXW2HTMLCMT000190ZQX localhost/poly/sessions/2/QZXW2HTMLCY3ljbGVkZXZpZS5waHAZQX 1 2425e00d1d65c2bdcbafc1ce6244f7ea

QZXW2HTMLCMT000191ZQX الصيغة: $0 QZXW2HTMLCVVJMZQX N QZXW2HTMLBW1BIUFNFU1NJRF0ZQX

QZXW2HTMLCMT000192ZQX يلزم وجود ثلاث معلمات

QZXW2HTMLCMT000193ZQX رسالة خطأ

QZXW2HTMLCMT000194ZQX إيقاف

QZXW2HTMLCMT000195ZQX if

QZXW2HTMLCMT000196ZQX استرداد المعلمات

QZXW2HTMLCMT000197ZQX التوصيل وعرض النتيجة

QZXW2HTMLCMT000198ZQX خطأ

QZXW2HTMLCMT000199ZQX النهاية

QZXW2HTMLCMT000200ZQX يتصل بـ QZXW2HTMLCVVJMZQX

QZXW2HTMLCMT000201ZQX يقوم بإنشاء QZXW2HTMLCR0VUZQX أو QZXW2HTMLCSEVBRAZQX وفقًا لقيمة الرأس

QZXW2HTMLCMT000202ZQX تشكل استجابة الخادم نتيجة الدالة

QZXW2HTMLCMT000203ZQX تحليل لـ QZXW2HTMLCVVJMZQX

QZXW2HTMLCMT000204ZQX البروتوكول

QZXW2HTMLCMT000205ZQX إذا

QZXW2HTMLCMT000206ZQX الجهاز

QZXW2HTMLCMT000207ZQX if

QZXW2HTMLCMT000208ZQX المنفذ

QZXW2HTMLCMT000209ZQX المسار

QZXW2HTMLCMT000210ZQX الاستعلام

QZXW2HTMLCMT000211ZQX إذا

QZXW2HTMLCMT000212ZQX التحقق من QZXW2HTMLCJE4ZQX

QZXW2HTMLCMT000213ZQX خطأ

QZXW2HTMLCMT000214ZQX النهاية

QZXW2HTMLCMT000215ZQX if

QZXW2HTMLCMT000216ZQX يتم إجراء مكالمات QZXW2HTMLCJE4ZQX إلى QZXW2HTMLCJFVSTAZQX

QZXW2HTMLCMT000217ZQX فتح اتصال على المنفذ QZXW2HTMLCJHBvcnQZQX الخاص بـ QZXW2HTMLCJGhvdGUZQX

QZXW2HTMLCMT000218ZQX العودة في حالة حدوث خطأ

QZXW2HTMLCMT000219ZQX if

QZXW2HTMLCMT000220ZQX يمثل QZXW2HTMLCJGNvbm5leGlvbgZQX تدفقًا اتصاليًا ثنائي الاتجاه

QZXW2HTMLCMT000221ZQX بين العميل (هذا البرنامج) وخادم الويب الذي تم الاتصال به

QZXW2HTMLCMT000222ZQX تُستخدم هذه القناة لتبادل الأوامر والمعلومات

QZXW2HTMLCMT000223ZQX بروتوكول الاتصال هو QZXW2HTMLCSFRUUAZQX

QZXW2HTMLCMT000224ZQX يرسل العميل الرؤوس QZXW2HTMLCSFRUUAZQX

QZXW2HTMLCMT000225ZQX get QZXW2HTMLCVVJMZQX QZXW2HTMLCSFRUUAZQX/1.1

QZXW2HTMLCMT000226ZQX المضيف: hote:port

QZXW2HTMLCMT000227ZQX الاتصال: إغلاق

QZXW2HTMLCMT000228ZQX ملف تعريف الارتباط: QZXW2HTMLCJFBIUFNFU1NJRAZQX

QZXW2HTMLCMT000229ZQX سطر فارغ

QZXW2HTMLCMT000230ZQX سيقوم الخادم الآن بالرد على القناة QZXW2HTMLCJGNvbm5leGlvbgZQX. سيقوم بإرسال جميع

QZXW2HTMLCMT000231ZQX بياناته ثم يغلق القناة.

QZXW2HTMLCMT000232ZQX يبدأ العميل بقراءة الرؤوس QZXW2HTMLCSFRUUAZQX التي تنتهي بسطر فارغ

QZXW2HTMLCMT000233ZQX صدى السطر

QZXW2HTMLCMT000234ZQX البحث عن الرمز المميز إذا لم يتم العثور عليه بعد

QZXW2HTMLCMT000235ZQX البحث عن سطر set-cookie

QZXW2HTMLCMT000236ZQX تم العثور على الرمز - يتم تخزينه

QZXW2HTMLCMT000237ZQX if

QZXW2HTMLCMT000238ZQX if

QZXW2HTMLCMT000239ZQX البحث عن وضع نقل المستند

QZXW2HTMLCMT000240ZQX البحث عن السطر Transfer-Encoding: chunked

QZXW2HTMLCMT000241ZQX النقل على شكل أجزاء

QZXW2HTMLCMT000242ZQX if

QZXW2HTMLCMT000243ZQX if

QZXW2HTMLCMT000244ZQX السطر التالي

QZXW2HTMLCMT000245ZQX إظهار السطر

QZXW2HTMLCMT000246ZQX قراءة المستند تعتمد على طريقة إرساله

QZXW2HTMLCMT000247ZQX البحث عن العداد في المستند

QZXW2HTMLCMT000248ZQX تم العثور على العداد - يتم عرضه

QZXW2HTMLCMT000249ZQX if

QZXW2HTMLCMT000250ZQX يقوم العميل بإنهاء الاتصال

QZXW2HTMLCMT000251ZQX for i

QZXW2HTMLCMT000252ZQX QZXW2HTMLCZ2V0VVJMZQX

QZXW2HTMLCMT000253ZQX قراءة المستند على QZXW2HTMLCJGNvbm5leGlvbgZQX

QZXW2HTMLCMT000254ZQX النهاية

QZXW2HTMLCMT000255ZQX QZXW2HTMLCZ2V0RG9jZQX

QZXW2HTMLCMT000256ZQX قراءة المستند على QZXW2HTMLCJGNvbm5leGlvbgZQX

QZXW2HTMLCMT000257ZQX يتم إرسال هذا المستند على أجزاء بالصيغة

QZXW2HTMLCMT000258ZQX عدد أحرف الجزء بالرقم السداسي العشري

QZXW2HTMLCMT000259ZQX استكمال الجزء

QZXW2HTMLCMT000260ZQX سطر فارغ

QZXW2HTMLCMT000261ZQX يتم قراءة حجم الجزء من السطر الأول

QZXW2HTMLCMT000262ZQX يتم قراءة المستند التالي

QZXW2HTMLCMT000263ZQX قراءة جزء من QZXW2HTMLCJHRhaWxsZQZQX أحرف

QZXW2HTMLCMT000264ZQX سطر فارغ

QZXW2HTMLCMT000265ZQX الجزء التالي

QZXW2HTMLCMT000266ZQX يتم قراءة حجم الجزء

QZXW2HTMLCMT000267ZQX while

QZXW2HTMLCMT000268ZQX انتهى

QZXW2HTMLCMT000269ZQX QZXW2HTMLCZ2V0Q2h1bmtlZERvYwZQX

QZXW2HTMLCMT000270ZQX إرسال QZXW2HTMLCJG1zZwZQX إلى QZXW2HTMLCJGZsdXgZQX

QZXW2HTMLCMT000271ZQX عرض الشاشة

QZXW2HTMLCMT000272ZQX يرسل

QZXW2HTMLCMT000273ZQX العميل يرسل الرؤوس QZXW2HTMLCSFRUUAZQX

QZXW2HTMLCMT000274ZQX get QZXW2HTMLCVVJMZQX QZXW2HTMLCSFRUUAZQX/1.1

QZXW2HTMLCMT000275ZQX المضيف: المضيف: المنفذ

QZXW2HTMLCMT000276ZQX الاتصال: إغلاق

QZXW2HTMLCMT000277ZQX ملف تعريف الارتباط: QZXW2HTMLCJFBIUFNFU1NJRAZQX

QZXW2HTMLCMT000278ZQX سطر فارغ

QZXW2HTMLCMT000279ZQX يبدأ العميل بقراءة الرؤوس QZXW2HTMLCSFRUUAZQX التي تنتهي بسطر فارغ

QZXW2HTMLCMT000280ZQX صدى السطر

QZXW2HTMLCMT000281ZQX البحث عن الرمز المميز إذا لم يتم العثور عليه بعد

QZXW2HTMLCMT000282ZQX البحث عن سطر set-cookie

QZXW2HTMLCMT000283ZQX تم العثور على الرمز - يتم تخزينه

QZXW2HTMLCMT000284ZQX if

QZXW2HTMLCMT000285ZQX إذا

QZXW2HTMLCMT000286ZQX البحث عن وضع نقل المستند

QZXW2HTMLCMT000287ZQX البحث عن السطر Transfer-Encoding: chunked

QZXW2HTMLCMT000288ZQX النقل على أجزاء

QZXW2HTMLCMT000289ZQX if

QZXW2HTMLCMT000290ZQX if

QZXW2HTMLCMT000291ZQX السطر التالي

QZXW2HTMLCMT000292ZQX يعتمد قراءة المستند على الطريقة التي تم إرساله بها

QZXW2HTMLCMT000293ZQX البحث عن العداد في المستند

QZXW2HTMLCMT000294ZQX تم العثور على العداد - يتم عرضه

QZXW2HTMLCMT000295ZQX if

QZXW2HTMLCMT000296ZQX قراءة المستند على QZXW2HTMLCJGNvbm5leGlvbgZQX

QZXW2HTMLCMT000297ZQX النهاية

QZXW2HTMLCMT000298ZQX QZXW2HTMLCZ2V0RG9jZQX

QZXW2HTMLCMT000299ZQX قراءة المستند على QZXW2HTMLCJGNvbm5leGlvbgZQX

QZXW2HTMLCMT000300ZQX يتم إرسال هذا المستند على أجزاء بالصيغة

QZXW2HTMLCMT000301ZQX عدد أحرف الجزء بالرقم السداسي عشري

QZXW2HTMLCMT000302ZQX استكمال الجزء

QZXW2HTMLCMT000303ZQX يتم قراءة حجم الجزء في السطر الأول

QZXW2HTMLCMT000304ZQX يتم قراءة المستند التالي

QZXW2HTMLCMT000305ZQX قراءة جزء من QZXW2HTMLCJHRhaWxsZQZQX أحرف

QZXW2HTMLCMT000306ZQX سطر فارغ

QZXW2HTMLCMT000307ZQX الجزء التالي

QZXW2HTMLCMT000308ZQX يتم قراءة حجم الجزء

QZXW2HTMLCMT000309ZQX while

QZXW2HTMLCMT000310ZQX انتهى

QZXW2HTMLCMT000311ZQX QZXW2HTMLCZ2V0Q2h1bmtlZERvYwZQX

QZXW2HTMLCMT000312ZQX يقوم العميل بإرسال الرؤوس QZXW2HTMLCSFRUUAZQX

QZXW2HTMLCMT000313ZQX get QZXW2HTMLCVVJMZQX QZXW2HTMLCSFRUUAZQX/1.1

QZXW2HTMLCMT000314ZQX المضيف: المضيف: المنفذ

QZXW2HTMLCMT000315ZQX الاتصال: إغلاق

QZXW2HTMLCMT000316ZQX سطر فارغ

QZXW2HTMLCMT000317ZQX localhost/poly/sessions/2/QZXW2HTMLCY3ljbGVkZXZpZS5waHAZQX 2

QZXW2HTMLCMT000318ZQX QZXW2HTMLCZXRhcGUxLnBocAZQX

QZXW2HTMLCMT000319ZQX التكوين

QZXW2HTMLCMT000320ZQX بدء الجلسة

QZXW2HTMLCMT000321ZQX مسح متغير الجلسة

QZXW2HTMLCMT000322ZQX تحضير الصفحة 1

QZXW2HTMLCMT000323ZQX عرض الصفحة 1

QZXW2HTMLCMT000324ZQX نهاية

QZXW2HTMLCMT000325ZQX QZXW2HTMLCcGFnZTEucGhwZQX

QZXW2HTMLCMT000326ZQX أخطاء؟

QZXW2HTMLCMT000327ZQX من أجل

QZXW2HTMLCMT000328ZQX إذا

QZXW2HTMLCMT000329ZQX QZXW2HTMLCZXRhcGUyLnBocAZQX

QZXW2HTMLCMT000330ZQX التكوين

QZXW2HTMLCMT000331ZQX بدء الجلسة

QZXW2HTMLCMT000332ZQX عادةً، يجب أن يكون هناك معلمة اسم

QZXW2HTMLCMT000333ZQX مسجلة في الطلب

QZXW2HTMLCMT000334ZQX في حالة عدم وجود معلمات، يتم إرسال الصفحة 1 دون أخطاء

QZXW2HTMLCMT000335ZQX if

QZXW2HTMLCMT000336ZQX إذا كان المعلمة «الاسم» موجودة بالفعل - نتحقق من صحتها

QZXW2HTMLCMT000337ZQX هل حدثت أخطاء؟

QZXW2HTMLCMT000338ZQX الصفحة 1 مع أخطاء

QZXW2HTMLCMT000339ZQX إذا

QZXW2HTMLCMT000340ZQX لا توجد أخطاء - يتم تخزين الاسم في الجلسة

QZXW2HTMLCMT000341ZQX عرض الصفحة 2

QZXW2HTMLCMT000342ZQX النهاية

QZXW2HTMLCMT000343ZQX ---------QZXW2HTMLCY2FsY3VsZXJQYWdlZQX

QZXW2HTMLCMT000344ZQX التحقق من صحة الطلب QZXW2HTMLCJHJlcXXDqnRlZQX

QZXW2HTMLCMT000345ZQX يعرض جدول الأخطاء في QZXW2HTMLCJHBhZ2UZQX->erreurs

QZXW2HTMLCMT000346ZQX في البداية، لا توجد أخطاء

QZXW2HTMLCMT000347ZQX يجب ألا يكون الاسم فارغًا

QZXW2HTMLCMT000348ZQX العودة إلى الصفحة

QZXW2HTMLCMT000349ZQX QZXW2HTMLCY2FsY3VsZXJQYWdlZQX

QZXW2HTMLCMT000350ZQX QZXW2HTMLCcGFnZTIucGhwZQX

QZXW2HTMLCMT000351ZQX أخطاء؟

QZXW2HTMLCMT000352ZQX لـ

QZXW2HTMLCMT000353ZQX QZXW2HTMLCZXRhcGUzLnBocAZQX

QZXW2HTMLCMT000354ZQX التكوين

QZXW2HTMLCMT000355ZQX بدء الجلسة

QZXW2HTMLCMT000356ZQX يتم استرداد المعلمتين «الاسم» و«العمر»

QZXW2HTMLCMT000357ZQX عادةً، يجب أن يكون لدينا اسم وعمر

QZXW2HTMLCMT000358ZQX في حالة الاستدعاء غير الصحيح، يتم إرسال الصفحة 1

QZXW2HTMLCMT000359ZQX كإجراء احترازي

QZXW2HTMLCMT000360ZQX if

QZXW2HTMLCMT000361ZQX كان المعلمة «العمر» موجودة بالفعل - نتحقق من صحتها

QZXW2HTMLCMT000362ZQX هل حدثت أخطاء؟

QZXW2HTMLCMT000363ZQX الصفحة 2 تحتوي على أخطاء

QZXW2HTMLCMT000364ZQX if

QZXW2HTMLCMT000365ZQX لا توجد أخطاء - حفظ العمر في الجلسة

QZXW2HTMLCMT000366ZQX عرض الصفحة 3

QZXW2HTMLCMT000367ZQX النهاية

QZXW2HTMLCMT000368ZQX ---------QZXW2HTMLCY2FsY3VsZXJQYWdlZQX

QZXW2HTMLCMT000369ZQX التحقق من صحة الطلب QZXW2HTMLCJHJlcXXDqnRlZQX

QZXW2HTMLCMT000370ZQX يعرض جدول الأخطاء في QZXW2HTMLCJHBhZ2UZQX->erreurs

QZXW2HTMLCMT000371ZQX في البداية، لا توجد أخطاء

QZXW2HTMLCMT000372ZQX يجب أن يكون عمر في تنسيق صالح

QZXW2HTMLCMT000373ZQX العودة إلى الصفحة

QZXW2HTMLCMT000374ZQX QZXW2HTMLCY2FsY3VsZXJQYWdlZQX

QZXW2HTMLCMT000375ZQX QZXW2HTMLCcGFnZTMucGhwZQX

QZXW2HTMLCMT000376ZQX السمات

QZXW2HTMLCMT000377ZQX جدول الحدود

QZXW2HTMLCMT000378ZQX جدول QZXW2HTMLCY29lZmZSZQX

QZXW2HTMLCMT000379ZQX جدول QZXW2HTMLCY29lZmZOZQX

QZXW2HTMLCMT000380ZQX جدول الأخطاء

QZXW2HTMLCMT000381ZQX الشركة المصنعة

QZXW2HTMLCMT000382ZQX الطريقة

QZXW2HTMLCMT000383ZQX dsn: اسم QZXW2HTMLCRFNOZQX لمصدر البيانات QZXW2HTMLCT0RCQwZQX الذي يحتوي على قيم جداول الحدود، QZXW2HTMLCY29lZmZSZQX، QZXW2HTMLCY29lZmZOZQX

QZXW2HTMLCMT000384ZQX user: اسم مستخدم لديه حق القراءة على مصدر البيانات QZXW2HTMLCT0RCQwZQX

QZXW2HTMLCMT000385ZQX pwd: كلمة مروره

QZXW2HTMLCMT000386ZQX table: اسم الجدول الذي يحتوي على القيم (الحدود، QZXW2HTMLCY29lZmZSZQX، QZXW2HTMLCY29lZmZOZQX)

QZXW2HTMLCMT000387ZQX الحدود: اسم العمود الذي يحتوي على القيم الحدية

QZXW2HTMLCMT000388ZQX QZXW2HTMLCY29lZmZSZQX: اسم العمود الذي يحتوي على القيم QZXW2HTMLCY29lZmZSZQX

QZXW2HTMLCMT000389ZQX QZXW2HTMLCY29lZmZOZQX: اسم العمود الذي يحتوي على القيم QZXW2HTMLCY29lZmZOZQX

QZXW2HTMLCMT000390ZQX $personneQZXW2HTMLBWyJtYXJpw6kiXQZQX: نعم، لا

QZXW2HTMLCMT000391ZQX $personneQZXW2HTMLBWyJlbmZhbnRzIl0ZQX: عدد الأطفال

QZXW2HTMLCMT000392ZQX $personneQZXW2HTMLBWyJzYWxhaXJlIl0ZQX : الراتب السنوي

QZXW2HTMLCMT000393ZQX تعريف فئة QZXW2HTMLCb2JqSW1wb3RzZQX

QZXW2HTMLCMT000394ZQX السمات: جداول البيانات الثلاثة

QZXW2HTMLCMT000395ZQX جدول الحدود

QZXW2HTMLCMT000396ZQX جدول QZXW2HTMLCY29lZmZSZQX

QZXW2HTMLCMT000397ZQX جدول QZXW2HTMLCY29lZmZOZQX

QZXW2HTMLCMT000398ZQX جدول الأخطاء

QZXW2HTMLCMT000399ZQX المُنشئ

QZXW2HTMLCMT000400ZQX QZXW2HTMLCJGltcG90cwZQX: قاموس يحتوي على الحقول التالية

QZXW2HTMLCMT000401ZQX dsn: اسم QZXW2HTMLCRFNOZQX لمصدر البيانات QZXW2HTMLCT0RCQwZQX الذي يحتوي على قيم جداول الحدود، QZXW2HTMLCY29lZmZSZQX، QZXW2HTMLCY29lZmZOZQX

QZXW2HTMLCMT000402ZQX user: اسم مستخدم لديه حق القراءة على مصدر البيانات QZXW2HTMLCT0RCQwZQX

QZXW2HTMLCMT000403ZQX pwd: كلمة مروره

QZXW2HTMLCMT000404ZQX table: اسم الجدول الذي يحتوي على القيم (الحدود، QZXW2HTMLCY29lZmZSZQX، QZXW2HTMLCY29lZmZOZQX)

QZXW2HTMLCMT000405ZQX الحدود: اسم العمود الذي يحتوي على القيم الحدية

QZXW2HTMLCMT000406ZQX QZXW2HTMLCY29lZmZSZQX: اسم العمود الذي يحتوي على القيم QZXW2HTMLCY29lZmZSZQX

QZXW2HTMLCMT000407ZQX QZXW2HTMLCY29lZmZOZQX: اسم العمود الذي يحتوي على القيم QZXW2HTMLCY29lZmZOZQX

QZXW2HTMLCMT000408ZQX في البداية لم تكن هناك أخطاء

QZXW2HTMLCMT000409ZQX التحقق من الاستدعاء

QZXW2HTMLCMT000410ZQX خطأ

QZXW2HTMLCMT000411ZQX النهاية

QZXW2HTMLCMT000412ZQX if

QZXW2HTMLCMT000413ZQX فتح قاعدة البيانات QZXW2HTMLCRFNOZQX

QZXW2HTMLCMT000414ZQX خطأ؟

QZXW2HTMLCMT000415ZQX خطأ

QZXW2HTMLCMT000416ZQX النهاية

QZXW2HTMLCMT000417ZQX if

QZXW2HTMLCMT000418ZQX إرسال استعلام إلى قاعدة البيانات

QZXW2HTMLCMT000419ZQX خطأ

QZXW2HTMLCMT000420ZQX نهاية

QZXW2HTMLCMT000421ZQX إذا

QZXW2HTMLCMT000422ZQX معالجة نتائج الاستعلام

QZXW2HTMLCMT000423ZQX سطر إضافي

QZXW2HTMLCMT000424ZQX while

QZXW2HTMLCMT000425ZQX إغلاق قاعدة البيانات

QZXW2HTMLCMT000426ZQX المنشئ

QZXW2HTMLCMT000427ZQX $personneQZXW2HTMLBWyJtYXJpw6kiXQZQX : نعم، لا

QZXW2HTMLCMT000428ZQX $personneQZXW2HTMLBWyJlbmZhbnRzIl0ZQX : عدد الأطفال

QZXW2HTMLCMT000429ZQX $personneQZXW2HTMLBWyJzYWxhaXJlIl0ZQX : الراتب السنوي

QZXW2HTMLCMT000430ZQX هل الحالة سليمة؟

QZXW2HTMLCMT000431ZQX التحقق من الاستدعاء

QZXW2HTMLCMT000432ZQX خطأ

QZXW2HTMLCMT000433ZQX نهاية

QZXW2HTMLCMT000434ZQX if

QZXW2HTMLCMT000435ZQX هل المعلمات صحيحة؟

QZXW2HTMLCMT000436ZQX خطأ

QZXW2HTMLCMT000437ZQX if

QZXW2HTMLCMT000438ZQX خطأ

QZXW2HTMLCMT000439ZQX if

QZXW2HTMLCMT000440ZQX خطأ

QZXW2HTMLCMT000441ZQX إذا

QZXW2HTMLCMT000442ZQX أخطاء؟

QZXW2HTMLCMT000443ZQX عدد الحصص

QZXW2HTMLCMT000444ZQX نصف حصة إضافية إذا كان هناك 3 أطفال على الأقل

QZXW2HTMLCMT000445ZQX الدخل الخاضع للضريبة

QZXW2HTMLCMT000446ZQX الحصة العائلية

يُضاف QZXW2HTMLCMT000447ZQX في نهاية جدول الحدود لإنهاء الحلقة التالية

QZXW2HTMLCMT000448ZQX حساب الضريبة

QZXW2HTMLCMT000449ZQX نظرًا لوضع QZXW2HTMLCJHF1b3RpZW50ZQX في نهاية الجدول QZXW2HTMLCJGxpbWl0ZXMZQX، فإن الحلقة السابقة

QZXW2HTMLCMT000450ZQX لا يمكن أن تتجاوز حدود الجدول QZXW2HTMLCJGxpbWl0ZXMZQX

QZXW2HTMLCMT000451ZQX الآن يمكننا حساب الضريبة

QZXW2HTMLCMT000452ZQX QZXW2HTMLCY2FsY3VsSW1wb3RzZQX

QZXW2HTMLCMT000453ZQX فئة الضرائب

QZXW2HTMLCMT000454ZQX المكتبات

QZXW2HTMLCMT000455ZQX إنشاء كائن «الضرائب»

QZXW2HTMLCMT000456ZQX أخطاء؟

QZXW2HTMLCMT000457ZQX رسالة

QZXW2HTMLCMT000458ZQX for

QZXW2HTMLCMT000459ZQX النهاية

QZXW2HTMLCMT000460ZQX if

QZXW2HTMLCMT000461ZQX تجارب

QZXW2HTMLCMT000462ZQX نهاية

QZXW2HTMLCMT000463ZQX صدى

QZXW2HTMLCMT000464ZQX حساب الضريبة

QZXW2HTMLCMT000465ZQX أخطاء؟

QZXW2HTMLCMT000466ZQX رسالة

QZXW2HTMLCMT000467ZQX for

QZXW2HTMLCMT000468ZQX QZXW2HTMLCY2FsY3VsZXJJbXAZQX

QZXW2HTMLCMT000469ZQX نموذج الضرائب

QZXW2HTMLCMT000470ZQX إعادة تعيين النموذج

QZXW2HTMLCMT000471ZQX مع

QZXW2HTMLCMT000472ZQX مسح

QZXW2HTMLCMT000473ZQX هل توجد أخطاء؟

QZXW2HTMLCMT000474ZQX عرض الأخطاء

QZXW2HTMLCMT000475ZQX if

QZXW2HTMLCMT000476ZQX معالجة نموذج الضرائب

QZXW2HTMLCMT000477ZQX المكتبات

QZXW2HTMLCMT000478ZQX تكوين التطبيق

QZXW2HTMLCMT000479ZQX استرداد المعلمات

QZXW2HTMLCMT000480ZQX هل لدينا جميع المعلمات؟

QZXW2HTMLCMT000481ZQX تحضير نموذج فارغ

QZXW2HTMLCMT000482ZQX عرض النموذج

QZXW2HTMLCMT000483ZQX النهاية

QZXW2HTMLCMT000484ZQX if

QZXW2HTMLCMT000485ZQX التحقق من المعلمات

QZXW2HTMLCMT000486ZQX هل توجد أخطاء؟

QZXW2HTMLCMT000487ZQX عرض النموذج

QZXW2HTMLCMT000488ZQX نهاية

QZXW2HTMLCMT000489ZQX if

QZXW2HTMLCMT000490ZQX حساب الإجابة

QZXW2HTMLCMT000491ZQX أخطاء؟

QZXW2HTMLCMT000492ZQX عرض نموذج الأخطاء

QZXW2HTMLCMT000493ZQX نهاية

QZXW2HTMLCMT000494ZQX if

QZXW2HTMLCMT000495ZQX عرض النموذج

QZXW2HTMLCMT000496ZQX النهاية

QZXW2HTMLCMT000497ZQX التحقق من صحة معلمات الاستعلام

QZXW2HTMLCMT000498ZQX لا توجد أخطاء في البداية

QZXW2HTMLCMT000499ZQX هل الحالة صالحة؟

QZXW2HTMLCMT000500ZQX خطأ

QZXW2HTMLCMT000501ZQX هل عدد العناصر صحيح؟

QZXW2HTMLCMT000502ZQX حدث خطأ

QZXW2HTMLCMT000503ZQX الراتب صالح؟

QZXW2HTMLCMT000504ZQX خطأ

QZXW2HTMLCMT000505ZQX حالة أزرار الاختيار

QZXW2HTMLCMT000506ZQX يتم إرسال الطلب

QZXW2HTMLCMT000507ZQX التحقق

QZXW2HTMLCMT000508ZQX حساب مبلغ الضريبة

QZXW2HTMLCMT000509ZQX QZXW2HTMLCJGJkSW1wb3RzZQX: قاموس يحتوي على المعلومات اللازمة لقراءة مصدر البيانات QZXW2HTMLCT0RCQwZQX

QZXW2HTMLCMT000510ZQX QZXW2HTMLCJHJlcXXDqnRlZQX: الاستعلام الذي يحتوي على معلومات عن المكلف

QZXW2HTMLCMT000511ZQX يتم إنشاء كائن QZXW2HTMLCSW1wb3RzRFNOZQX

QZXW2HTMLCMT000512ZQX هل توجد أخطاء؟

QZXW2HTMLCMT000513ZQX يتم إدراج الأخطاء في الاستعلام

QZXW2HTMLCMT000514ZQX انتهى

QZXW2HTMLCMT000515ZQX if

QZXW2HTMLCMT000516ZQX حساب الضريبة

QZXW2HTMLCMT000517ZQX نُرجع النتيجة

QZXW2HTMLCMT000518ZQX QZXW2HTMLCY2FsY3VsZXJJbXBvdHMZQX

QZXW2HTMLCMT000519ZQX صفحة الخطأ

QZXW2HTMLCMT000520ZQX عرض الأخطاء

QZXW2HTMLCMT000521ZQX نموذج الضرائب

QZXW2HTMLCMT000522ZQX مسح

QZXW2HTMLCMT000523ZQX التحقق من المعلمات قبل إرسالها إلى الخادم

QZXW2HTMLCMT000524ZQX عدد الأطفال

QZXW2HTMLCMT000525ZQX لم يتم التحقق من النموذج

QZXW2HTMLCMT000526ZQX if

QZXW2HTMLCMT000527ZQX الراتب

QZXW2HTMLCMT000528ZQX لم يتم التحقق من النموذج

QZXW2HTMLCMT000529ZQX إذا

QZXW2HTMLCMT000530ZQX حسناً - يتم إرسال النموذج إلى الخادم

QZXW2HTMLCMT000531ZQX مع

QZXW2HTMLCMT000532ZQX حساب

QZXW2HTMLCMT000533ZQX نموذج الضرائب

QZXW2HTMLCMT000534ZQX مسح

QZXW2HTMLCMT000535ZQX حساب

QZXW2HTMLCMT000536ZQX هل توجد أخطاء؟

QZXW2HTMLCMT000537ZQX عرض الأخطاء

QZXW2HTMLCMT000538ZQX if

QZXW2HTMLCMT000539ZQX هل توجد محاكاة؟

QZXW2HTMLCMT000540ZQX عرض عمليات المحاكاة

QZXW2HTMLCMT000541ZQX for

QZXW2HTMLCMT000542ZQX if

QZXW2HTMLCMT000543ZQX معالجة نموذج الضرائب

QZXW2HTMLCMT000544ZQX المكتبات

QZXW2HTMLCMT000545ZQX بدء الجلسة

QZXW2HTMLCMT000546ZQX تكوين التطبيق

QZXW2HTMLCMT000547ZQX استرداد معلمات الجلسة

QZXW2HTMLCMT000548ZQX هل الجلسة صالحة؟

QZXW2HTMLCMT000549ZQX بدء جلسة جديدة

QZXW2HTMLCMT000550ZQX هل توجد أخطاء؟

QZXW2HTMLCMT000551ZQX عرض صفحة الأخطاء

QZXW2HTMLCMT000552ZQX النهاية

QZXW2HTMLCMT000553ZQX if

QZXW2HTMLCMT000554ZQX if

QZXW2HTMLCMT000555ZQX يتم استرداد معلمات عملية التبادل الجارية

QZXW2HTMLCMT000556ZQX هل لدينا جميع المعلمات؟

QZXW2HTMLCMT000557ZQX عرض النموذج فارغًا

QZXW2HTMLCMT000558ZQX النهاية

QZXW2HTMLCMT000559ZQX if

QZXW2HTMLCMT000560ZQX التحقق من المعلمات

QZXW2HTMLCMT000561ZQX هل توجد أخطاء؟

QZXW2HTMLCMT000562ZQX عرض النموذج

QZXW2HTMLCMT000563ZQX نهاية

QZXW2HTMLCMT000564ZQX if

QZXW2HTMLCMT000565ZQX حساب الضريبة المستحقة

QZXW2HTMLCMT000566ZQX محاكاة أخرى

QZXW2HTMLCMT000567ZQX عرض النموذج

QZXW2HTMLCMT000568ZQX نهاية

QZXW2HTMLCMT000569ZQX التحقق من صحة معلمات الاستعلام

QZXW2HTMLCMT000570ZQX لا توجد أخطاء في البداية

QZXW2HTMLCMT000571ZQX هل الحالة صالحة؟

QZXW2HTMLCMT000572ZQX حدث خطأ

QZXW2HTMLCMT000573ZQX عدد الأطفال صالح؟

QZXW2HTMLCMT000574ZQX حدث خطأ

QZXW2HTMLCMT000575ZQX الراتب صالح؟

QZXW2HTMLCMT000576ZQX خطأ

QZXW2HTMLCMT000577ZQX حالة أزرار الاختيار

QZXW2HTMLCMT000578ZQX يتم إرسال الطلب

QZXW2HTMLCMT000579ZQX التحقق

QZXW2HTMLCMT000580ZQX تخزين الجلسة

QZXW2HTMLCMT000581ZQX نهاية البرنامج النصي

QZXW2HTMLCMT000582ZQX QZXW2HTMLCdGVybWluZXJTZXNzaW9uZQX

QZXW2HTMLCMT000583ZQX استرداد معلمات الجلسة

QZXW2HTMLCMT000584ZQX هل الجلسة صالحة؟

QZXW2HTMLCMT000585ZQX بدء جلسة جديدة

QZXW2HTMLCMT000586ZQX هل توجد أخطاء؟

QZXW2HTMLCMT000587ZQX عرض صفحة الأخطاء

QZXW2HTMLCMT000588ZQX النهاية

QZXW2HTMLCMT000589ZQX if

QZXW2HTMLCMT000590ZQX if

QZXW2HTMLCMT000591ZQX يتم استرداد معلمات عملية التبادل الجارية

QZXW2HTMLCMT000592ZQX هل لدينا جميع المعلمات؟

QZXW2HTMLCMT000593ZQX عرض النموذج فارغًا

QZXW2HTMLCMT000594ZQX نهاية

QZXW2HTMLCMT000595ZQX if

QZXW2HTMLCMT000596ZQX التحقق من المعلمات

QZXW2HTMLCMT000597ZQX هل توجد أخطاء؟

QZXW2HTMLCMT000598ZQX عرض النموذج

QZXW2HTMLCMT000599ZQX نهاية

QZXW2HTMLCMT000600ZQX if

QZXW2HTMLCMT000601ZQX حساب الضريبة المستحقة

QZXW2HTMLCMT000602ZQX محاكاة أخرى

QZXW2HTMLCMT000603ZQX عرض النموذج

QZXW2HTMLCMT000604ZQX نهاية

QZXW2HTMLCMT000605ZQX تخزين الجلسة

QZXW2HTMLCMT000606ZQX نهاية البرنامج النصي

QZXW2HTMLCMT000607ZQX QZXW2HTMLCdGVybWluZXJTZXNzaW9uZQX

QZXW2HTMLCMT000608ZQX صفحة الخطأ

QZXW2HTMLCMT000609ZQX عرض الأخطاء

QZXW2HTMLCMT000610ZQX صيغة $0 QZXW2HTMLCdXJsSW1wb3RzZQX متزوج أطفال راتب رمز

QZXW2HTMLCMT000611ZQX عميل خدمة ضريبية تعمل على QZXW2HTMLCdXJsSW1wb3RzZQX

QZXW2HTMLCMT000612ZQX يرسل إلى هذه الخدمة المعلومات الثلاث: متزوج، أطفال، راتب

QZXW2HTMLCMT000613ZQX ربما مع رمز الجلسة إذا تم تمريره

QZXW2HTMLCMT000614ZQX يعرض جدول عمليات المحاكاة الخاصة بالجلسة

QZXW2HTMLCMT000615ZQX localhost/poly/impots/6/QZXW2HTMLCaW1wb3RzLnBocAZQX نعم 2 200000

QZXW2HTMLCMT000616ZQX localhost/poly/impots/6/QZXW2HTMLCaW1wb3RzLnBocAZQX نعم 3 200000 a6297317667bc981c462120987b8dd18

QZXW2HTMLCMT000617ZQX localhost/poly/impots/6/QZXW2HTMLCaW1wb3RzLnBocAZQX نعم 3 200000

QZXW2HTMLCMT000618ZQX الصيغة $0 QZXW2HTMLCdXJsSW1wb3RzZQX متزوج أطفال الراتب الرمز

QZXW2HTMLCMT000619ZQX عميل لخدمة ضريبية تعمل على QZXW2HTMLCdXJsSW1wb3RzZQX

QZXW2HTMLCMT000620ZQX يرسل إلى هذه الخدمة المعلومات الثلاث التالية: الحالة الاجتماعية، عدد الأبناء، الراتب

QZXW2HTMLCMT000621ZQX مع رمز الجلسة إن تم تمريره

QZXW2HTMLCMT000622ZQX يعرض جدول عمليات المحاكاة الخاصة بالجلسة

QZXW2HTMLCMT000623ZQX التحقق من عدد المعلمات

QZXW2HTMLCMT000624ZQX خطأ

QZXW2HTMLCMT000625ZQX نهاية

QZXW2HTMLCMT000626ZQX إذا

QZXW2HTMLCMT000627ZQX يُلاحظ وجود QZXW2HTMLCVVJMZQX

QZXW2HTMLCMT000628ZQX خطأ

QZXW2HTMLCMT000629ZQX نهاية

QZXW2HTMLCMT000630ZQX if

QZXW2HTMLCMT000631ZQX تحليل طلب المستخدم

QZXW2HTMLCMT000632ZQX أخطاء؟

QZXW2HTMLCMT000633ZQX رسالة

QZXW2HTMLCMT000634ZQX انتهى

QZXW2HTMLCMT000635ZQX if

QZXW2HTMLCMT000636ZQX يمكن تنفيذ الطلب - يتم استخدام رمز الجلسة

QZXW2HTMLCMT000637ZQX نقوم بعرض رمز الجلسة

QZXW2HTMLCMT000638ZQX هل هناك أخطاء؟

QZXW2HTMLCMT000639ZQX رسالة الأخطاء

QZXW2HTMLCMT000640ZQX من أجل

QZXW2HTMLCMT000641ZQX لا توجد أخطاء - عرض المحاكاة

QZXW2HTMLCMT000642ZQX لـ

QZXW2HTMLCMT000643ZQX if

QZXW2HTMLCMT000644ZQX نهاية البرنامج

QZXW2HTMLCMT000645ZQX تحليل صحة QZXW2HTMLCVVJMZQX QZXW2HTMLCJFVSTAZQX

QZXW2HTMLCMT000646ZQX البروتوكول

QZXW2HTMLCMT000647ZQX إذا

QZXW2HTMLCMT000648ZQX الجهاز

QZXW2HTMLCMT000649ZQX if

QZXW2HTMLCMT000650ZQX المنفذ

QZXW2HTMLCMT000651ZQX الطلب

QZXW2HTMLCMT000652ZQX if

QZXW2HTMLCMT000653ZQX العودة

QZXW2HTMLCMT000654ZQX QZXW2HTMLCYW5hbHlzZVVSTAZQX

QZXW2HTMLCMT000655ZQX QZXW2HTMLCJGRlbWFuZGUZQX: السلسلة المراد تحليلها

QZXW2HTMLCMT000656ZQX يجب أن تكون بالصيغة متزوج، أطفال، راتب

QZXW2HTMLCMT000657ZQX تنسيق صحيح

QZXW2HTMLCMT000658ZQX تنسيق غير صالح

QZXW2HTMLCMT000659ZQX صحيح

QZXW2HTMLCMT000660ZQX QZXW2HTMLCYW5hbHlzZURlbWFuZGUZQX

QZXW2HTMLCMT000661ZQX QZXW2HTMLCJHVybEltcG90cwZQX: يجب التحقق من QZXW2HTMLCVVJMZQX

QZXW2HTMLCMT000662ZQX QZXW2HTMLCJGRlbWFuZGUZQX: قاموس يحتوي على الحقول «الزوجة» و«الأطفال» و«الراتب»

QZXW2HTMLCMT000663ZQX QZXW2HTMLCJGpldG9uZQX: رمز جلسة محتمل

QZXW2HTMLCMT000664ZQX فتح اتصال على المنفذ $urlImpotsQZXW2HTMLBW3BvcnRdZQX الخاص بـ $urlImpotsQZXW2HTMLBW2hvc3RdZQX

QZXW2HTMLCMT000665ZQX العودة في حالة حدوث خطأ

QZXW2HTMLCMT000666ZQX if

QZXW2HTMLCMT000667ZQX إرسال الرؤوس QZXW2HTMLCSFRUUAZQX إلى الخادم

QZXW2HTMLCMT000668ZQX قراءة استجابة الخادم - أولاً الرؤوس QZXW2HTMLCSFRUUAZQX

QZXW2HTMLCMT000669ZQX السطر الأول

QZXW2HTMLCMT000670ZQX هل تم العثور على QZXW2HTMLCVVJMZQX؟

QZXW2HTMLCMT000671ZQX QZXW2HTMLCVVJMZQX غير متاح - العودة مع خطأ

QZXW2HTMLCMT000672ZQX إذا

QZXW2HTMLCMT000673ZQX يتم قراءة الرؤوس الأخرى QZXW2HTMLCSFRUUAZQX

QZXW2HTMLCMT000674ZQX البحث عن الرمز المميز إذا لم يتم العثور عليه بعد

QZXW2HTMLCMT000675ZQX البحث عن سطر set-cookie

QZXW2HTMLCMT000676ZQX تم العثور على الرمز - يتم تخزينه

QZXW2HTMLCMT000677ZQX if

QZXW2HTMLCMT000678ZQX إذا

QZXW2HTMLCMT000679ZQX السطر التالي

QZXW2HTMLCMT000680ZQX قراءة المستند التالي

QZXW2HTMLCMT000681ZQX while

QZXW2HTMLCMT000682ZQX يتم إغلاق الاتصال

QZXW2HTMLCMT000683ZQX يتم تحليل المستند

QZXW2HTMLCMT000684ZQX يتم عرض النتيجة

QZXW2HTMLCMT000685ZQX QZXW2HTMLCZ2V0SW1wb3RzZQX

QZXW2HTMLCMT000686ZQX QZXW2HTMLCJGNvbm5leGlvbgZQX: الاتصال بخادم الويب

QZXW2HTMLCMT000687ZQX QZXW2HTMLCJHVybAZQX: QZXW2HTMLCVVJMZQX المطلوب استعلامه

QZXW2HTMLCMT000688ZQX QZXW2HTMLCJHBhcmFtw6h0cmVzZQX: قاموس المعلمات المطلوب إرسالها

QZXW2HTMLCMT000689ZQX يتم إعداد QZXW2HTMLCUE9TVAZQX

QZXW2HTMLCMT000690ZQX أثناء

QZXW2HTMLCMT000691ZQX يتم حذف الحرف الأخير

QZXW2HTMLCMT000692ZQX يتم إعداد الطلب QZXW2HTMLCSFRUUAZQX بتنسيق QZXW2HTMLCSFRUUAZQX/1.0

QZXW2HTMLCMT000693ZQX يتم إرسال الطلب QZXW2HTMLCSFRUUAZQX

QZXW2HTMLCMT000694ZQX QZXW2HTMLCUE9TVAZQX

QZXW2HTMLCMT000695ZQX QZXW2HTMLCJGRvY3VtZW50ZQX: المستند QZXW2HTMLCSFRNTAZQX

QZXW2HTMLCMT000696ZQX نبحث إما عن قائمة الأخطاء

QZXW2HTMLCMT000697ZQX أو جدول عمليات المحاكاة

QZXW2HTMLCMT000698ZQX تحضير النتيجة

QZXW2HTMLCMT000699ZQX هل هناك خطأ؟

QZXW2HTMLCMT000700ZQX نموذج سطر الخطأ

QZXW2HTMLCMT000701ZQX البحث في المستند

QZXW2HTMLCMT000702ZQX استرداد الأخطاء

QZXW2HTMLCMT000703ZQX لـ

QZXW2HTMLCMT000704ZQX تم

QZXW2HTMLCMT000705ZQX إذا

QZXW2HTMLCMT000706ZQX نموذج لسطر واحد من جدول المحاكاة

QZXW2HTMLCMT000707ZQX <tr><td>نعم</td><td>2</td><td>200000</td><td>22504</td></tr>

QZXW2HTMLCMT000708ZQX البحث في المستند

QZXW2HTMLCMT000709ZQX استرداد عمليات المحاكاة

QZXW2HTMLCMT000710ZQX for

QZXW2HTMLCMT000711ZQX إرجاع النتيجة

QZXW2HTMLCMT000712ZQX if

QZXW2HTMLCMT000713ZQX ليس من المعتاد الوصول إلى هذه المرحلة

QZXW2HTMLCMT000714ZQX QZXW2HTMLCZ2V0SW5mb3MZQX

QZXW2HTMLCMT000715ZQX QZXW2HTMLCJHVybEltcG90cwZQX: QZXW2HTMLCVVJMZQX يجب استجوابه

QZXW2HTMLCMT000716ZQX QZXW2HTMLCJGRlbWFuZGUZQX: قاموس يحتوي على الحقول «الزوجة» و«الأطفال» و«الراتب»

QZXW2HTMLCMT000717ZQX QZXW2HTMLCJGpldG9uZQX: رمز جلسة محتمل

QZXW2HTMLCMT000718ZQX يتم عرض رمز الجلسة

QZXW2HTMLCMT000719ZQX أخطاء؟

QZXW2HTMLCMT000720ZQX رسالة الأخطاء

QZXW2HTMLCMT000721ZQX من أجل

QZXW2HTMLCMT000722ZQX لا توجد أخطاء - عرض المحاكاة

QZXW2HTMLCMT000723ZQX لـ

QZXW2HTMLCMT000724ZQX if

QZXW2HTMLCMT000725ZQX نهاية البرنامج

QZXW2HTMLCMT000726ZQX يتم إرسال الرؤوس QZXW2HTMLCSFRUUAZQX إلى الخادم

QZXW2HTMLCMT000727ZQX هل تم العثور على QZXW2HTMLCVVJMZQX؟

QZXW2HTMLCMT000728ZQX QZXW2HTMLCVVJMZQX غير متاح - العودة مع خطأ

QZXW2HTMLCMT000729ZQX إذا

QZXW2HTMLCMT000730ZQX يتم تحليل المستند

QZXW2HTMLCMT000731ZQX يتم عرض النتيجة

QZXW2HTMLCMT000732ZQX QZXW2HTMLCJGNvbm5leGlvbgZQX: الاتصال بخادم الويب

QZXW2HTMLCMT000733ZQX QZXW2HTMLCJHVybAZQX: QZXW2HTMLCVVJMZQX المطلوب الاستعلام عنه

QZXW2HTMLCMT000734ZQX QZXW2HTMLCJHBhcmFtw6h0cmVzZQX: قاموس المعلمات المطلوب إرسالها

QZXW2HTMLCMT000735ZQX يتم إعداد QZXW2HTMLCUE9TVAZQX

QZXW2HTMLCMT000736ZQX أثناء

QZXW2HTMLCMT000737ZQX إزالة الحرف الأخير

QZXW2HTMLCMT000738ZQX يتم إعداد الطلب QZXW2HTMLCSFRUUAZQX بتنسيق QZXW2HTMLCSFRUUAZQX/1.0

QZXW2HTMLCMT000739ZQX يتم إرسال الطلب QZXW2HTMLCSFRUUAZQX

QZXW2HTMLCMT000740ZQX QZXW2HTMLCUE9TVAZQX

QZXW2HTMLCMT000741ZQX QZXW2HTMLCJGRvY3VtZW50ZQX: المستند QZXW2HTMLCSFRNTAZQX

QZXW2HTMLCMT000742ZQX نبحث إما عن قائمة الأخطاء

QZXW2HTMLCMT000743ZQX أو جدول عمليات المحاكاة

QZXW2HTMLCMT000744ZQX تحضير النتيجة

QZXW2HTMLCMT000745ZQX هل هناك خطأ؟

QZXW2HTMLCMT000746ZQX نموذج سطر الخطأ

QZXW2HTMLCMT000747ZQX البحث في المستند

QZXW2HTMLCMT000748ZQX استرداد الأخطاء

QZXW2HTMLCMT000749ZQX for

QZXW2HTMLCMT000750ZQX انتهى

QZXW2HTMLCMT000751ZQX if

QZXW2HTMLCMT000752ZQX نموذج لسطر من جدول المحاكاة

QZXW2HTMLCMT000753ZQX <tr><td>نعم</td><td>2</td><td>200000</td><td>22504</td></tr>

QZXW2HTMLCMT000754ZQX إعادة تعيين النموذج

QZXW2HTMLCMT000755ZQX مع

QZXW2HTMLCMT000756ZQX مسح

QZXW2HTMLCMT000757ZQX التحقق من المعلمات قبل إرسالها إلى الخادم

QZXW2HTMLCMT000758ZQX عدد الأطفال

QZXW2HTMLCMT000759ZQX لم يتم التحقق من النموذج

QZXW2HTMLCMT000760ZQX إذا

QZXW2HTMLCMT000761ZQX الراتب

QZXW2HTMLCMT000762ZQX لم يتم التحقق من النموذج

QZXW2HTMLCMT000763ZQX إذا

QZXW2HTMLCMT000764ZQX حسناً - سنرسلها

QZXW2HTMLCMT000765ZQX مع

QZXW2HTMLCMT000766ZQX حساب

QZXW2HTMLCMT000767ZQX معالجة نموذج الضرائب

QZXW2HTMLCMT000768ZQX المكتبات

QZXW2HTMLCMT000769ZQX بدء الجلسة

QZXW2HTMLCMT000770ZQX تكوين التطبيق

QZXW2HTMLCMT000771ZQX استرداد معلمات الجلسة

QZXW2HTMLCMT000772ZQX هل الجلسة صالحة؟

QZXW2HTMLCMT000773ZQX بدء جلسة جديدة

QZXW2HTMLCMT000774ZQX هل توجد أخطاء؟

QZXW2HTMLCMT000775ZQX عرض صفحة الأخطاء

QZXW2HTMLCMT000776ZQX النهاية

QZXW2HTMLCMT000777ZQX if

QZXW2HTMLCMT000778ZQX إذا

QZXW2HTMLCMT000779ZQX يتم استرداد معلمات عملية التبادل الجارية

QZXW2HTMLCMT000780ZQX هل لدينا جميع المعلمات؟

QZXW2HTMLCMT000781ZQX عرض النموذج فارغًا

QZXW2HTMLCMT000782ZQX نهاية

QZXW2HTMLCMT000783ZQX if

QZXW2HTMLCMT000784ZQX التحقق من المعلمات

QZXW2HTMLCMT000785ZQX هل توجد أخطاء؟

QZXW2HTMLCMT000786ZQX عرض النموذج

QZXW2HTMLCMT000787ZQX نهاية

QZXW2HTMLCMT000788ZQX إذا

QZXW2HTMLCMT000789ZQX حساب الضريبة المستحقة

QZXW2HTMLCMT000790ZQX محاكاة أخرى

QZXW2HTMLCMT000791ZQX عرض النموذج

QZXW2HTMLCMT000792ZQX النهاية

QZXW2HTMLCMT000793ZQX معالجة نموذج الضرائب

QZXW2HTMLCMT000794ZQX المكتبات

QZXW2HTMLCMT000795ZQX بدء الجلسة

QZXW2HTMLCMT000796ZQX تكوين التطبيق

QZXW2HTMLCMT000797ZQX استرداد معلمات الجلسة

QZXW2HTMLCMT000798ZQX هل الجلسة صالحة؟

QZXW2HTMLCMT000799ZQX بدء جلسة جديدة

QZXW2HTMLCMT000800ZQX هل توجد أخطاء؟

QZXW2HTMLCMT000801ZQX عرض صفحة الأخطاء بتنسيق QZXW2HTMLCWE1MZQX

QZXW2HTMLCMT000802ZQX النهاية

QZXW2HTMLCMT000803ZQX if

QZXW2HTMLCMT000804ZQX if

QZXW2HTMLCMT000805ZQX يتم استرداد معلمات عملية التبادل الجارية

QZXW2HTMLCMT000806ZQX هل لدينا جميع المعلمات؟

QZXW2HTMLCMT000807ZQX عرض النموذج فارغًا

QZXW2HTMLCMT000808ZQX النهاية

QZXW2HTMLCMT000809ZQX if

QZXW2HTMLCMT000810ZQX التحقق من المعلمات

QZXW2HTMLCMT000811ZQX هل توجد أخطاء؟

QZXW2HTMLCMT000812ZQX عرض الأخطاء بتنسيق QZXW2HTMLCWE1MZQX

QZXW2HTMLCMT000813ZQX نهاية

QZXW2HTMLCMT000814ZQX إذا

QZXW2HTMLCMT000815ZQX حساب الضريبة المستحقة

QZXW2HTMLCMT000816ZQX محاكاة أخرى

QZXW2HTMLCMT000817ZQX عرض عمليات المحاكاة بتنسيق QZXW2HTMLCWE1MZQX

QZXW2HTMLCMT000818ZQX النهاية

QZXW2HTMLCMT000819ZQX إنشاء الرمز QZXW2HTMLCWE1MZQX لصفحة عمليات المحاكاة في تطبيق الضرائب

QZXW2HTMLCMT000820ZQX بعض الثوابت

QZXW2HTMLCMT000821ZQX رؤوس QZXW2HTMLCWE1MZQX

QZXW2HTMLCMT000822ZQX عمليات المحاكاة

QZXW2HTMLCMT000823ZQX محاكاة QZXW2HTMLCJGkZQX

QZXW2HTMLCMT000824ZQX لـ

QZXW2HTMLCMT000825ZQX يولد الرمز QZXW2HTMLCWE1MZQX لصفحة أخطاء تطبيق الضرائب

QZXW2HTMLCMT000826ZQX بعض الثوابت

QZXW2HTMLCMT000827ZQX رؤوس QZXW2HTMLCWE1MZQX

QZXW2HTMLCMT000828ZQX الأخطاء

QZXW2HTMLCMT000829ZQX خطأ QZXW2HTMLCJGkZQX

QZXW2HTMLCMT000830ZQX for

QZXW2HTMLCMT000831ZQX صيغة $0 QZXW2HTMLCZmljaGllclhNTAZQX

QZXW2HTMLCMT000832ZQX يعرض بنية ومحتوى الملف QZXW2HTMLCZmljaGllclhNTAZQX

QZXW2HTMLCMT000833ZQX التحقق من الاستدعاء

QZXW2HTMLCMT000834ZQX رسالة خطأ

QZXW2HTMLCMT000835ZQX نهاية

QZXW2HTMLCMT000836ZQX if

QZXW2HTMLCMT000837ZQX التهيئة

QZXW2HTMLCMT000838ZQX ملف xml

QZXW2HTMLCMT000839ZQX مستوى المسافة البادئة = العمق في الشجرة

QZXW2HTMLCMT000840ZQX البرنامج

QZXW2HTMLCMT000841ZQX يتم إنشاء كائن لتحليل نص xml

QZXW2HTMLCMT000842ZQX يتم تحديد الوظائف التي يجب تنفيذها عند بداية ونهاية العلامة

QZXW2HTMLCMT000843ZQX يتم تحديد الوظيفة التي سيتم تنفيذها عند العثور على البيانات

QZXW2HTMLCMT000844ZQX فتح ملف XML للقراءة

QZXW2HTMLCMT000845ZQX if

QZXW2HTMLCMT000846ZQX معالجة ملف xml على شكل كتل بحجم 4096 بايت

QZXW2HTMLCMT000847ZQX تحليل البيانات التي تمت قراءتها

QZXW2HTMLCMT000848ZQX حدث خطأ

QZXW2HTMLCMT000849ZQX النهاية

QZXW2HTMLCMT000850ZQX if

QZXW2HTMLCMT000851ZQX while

QZXW2HTMLCMT000852ZQX تم استكشاف الملف

QZXW2HTMLCMT000853ZQX يتم تحرير الموارد التي يشغلها محلل xml

QZXW2HTMLCMT000854ZQX نهاية

QZXW2HTMLCMT000855ZQX تم استدعاء الدالة عند العثور على علامة بداية

QZXW2HTMLCMT000856ZQX سلسلة من المسافات (تباعد)

QZXW2HTMLCMT000857ZQX for

QZXW2HTMLCMT000858ZQX السمات

QZXW2HTMLCMT000859ZQX يتم عرض اسم العلامة والسمات الموجودة إن وجدت

QZXW2HTMLCMT000860ZQX مستوى إضافي في الشجرة

QZXW2HTMLCMT000861ZQX QZXW2HTMLCc3RhcnRFbGVtZW50ZQX

QZXW2HTMLCMT000862ZQX الوظيفة التي يتم استدعاؤها عند العثور على علامة نهاية

QZXW2HTMLCMT000863ZQX علامة نهاية

QZXW2HTMLCMT000864ZQX مستوى المسافة البادئة

QZXW2HTMLCMT000865ZQX سلسلة من المسافات (التبعية)

QZXW2HTMLCMT000866ZQX for

QZXW2HTMLCMT000867ZQX اسم العلامة

QZXW2HTMLCMT000868ZQX QZXW2HTMLCZW5kRWxlbWVudAZQX

QZXW2HTMLCMT000869ZQX وظيفة عرض البيانات

QZXW2HTMLCMT000870ZQX مستوى المسافة البادئة

QZXW2HTMLCMT000871ZQX يتم عرض البيانات

QZXW2HTMLCMT000872ZQX سلسلة من المسافات (التبعية)

QZXW2HTMLCMT000873ZQX for

QZXW2HTMLCMT000874ZQX if

QZXW2HTMLCMT000875ZQX QZXW2HTMLCYWZmaWNoZURhdGEZQX

QZXW2HTMLCMT000876ZQX يتم إنشاء كائن لتحليل نص XML

QZXW2HTMLCMT000877ZQX يتم تحديد الوظائف التي سيتم تنفيذها في بداية ونهاية العلامة

QZXW2HTMLCMT000878ZQX يتم تحديد الوظيفة التي سيتم تنفيذها عند العثور على البيانات

QZXW2HTMLCMT000879ZQX معالجة ملف XML على شكل كتل بحجم 4096 بايت

QZXW2HTMLCMT000880ZQX تحليل البيانات التي تمت قراءتها

QZXW2HTMLCMT000881ZQX if

QZXW2HTMLCMT000882ZQX while

QZXW2HTMLCMT000883ZQX حدث خطأ

QZXW2HTMLCMT000884ZQX نهاية

QZXW2HTMLCMT000885ZQX if

QZXW2HTMLCMT000886ZQX يتم تحرير الموارد التي يشغلها محلل xml

QZXW2HTMLCMT000887ZQX QZXW2HTMLCJGRvY3VtZW50ZQX: المستند QZXW2HTMLCSFRNTAZQX

QZXW2HTMLCMT000888ZQX يتم البحث إما عن قائمة الأخطاء

QZXW2HTMLCMT000889ZQX أو جدول المحاكاة

QZXW2HTMLCMT000890ZQX تحضير النتيجة

QZXW2HTMLCMT000891ZQX QZXW2HTMLCZ2V0SW5mb3MZQX

QZXW2HTMLCMT000892ZQX QZXW2HTMLCJGRvY3VtZW50ZQX: المستند QZXW2HTMLCWE1MZQX

QZXW2HTMLCMT000893ZQX نبحث إما عن قائمة الأخطاء

QZXW2HTMLCMT000894ZQX أو جدول عمليات المحاكاة

QZXW2HTMLCMT000895ZQX تحضير النتيجة

QZXW2HTMLCMT000896ZQX علامات قيد التجهيز

QZXW2HTMLCMT000897ZQX يتم إنشاء كائن لتحليل نص xml

QZXW2HTMLCMT000898ZQX يتم تحديد الوظائف التي سيتم تنفيذها في بداية ونهاية العلامة

QZXW2HTMLCMT000899ZQX تحديد الوظيفة التي سيتم تنفيذها عند العثور على البيانات

QZXW2HTMLCMT000900ZQX يتم تحليل QZXW2HTMLCJGRvY3VtZW50ZQX

QZXW2HTMLCMT000901ZQX يتم تحرير الموارد التي يشغلها محلل xml

QZXW2HTMLCMT000902ZQX النهاية

QZXW2HTMLCMT000903ZQX QZXW2HTMLCZ2V0SW5mb3MZQX

QZXW2HTMLCMT000904ZQX وظيفة يتم استدعاؤها عند العثور على علامة بداية

QZXW2HTMLCMT000905ZQX يتم تسجيل اسم العلامة ومحتواها

QZXW2HTMLCMT000906ZQX يتم إضافتها إلى مكدس العلامات

QZXW2HTMLCMT000907ZQX هل هذه محاكاة؟

QZXW2HTMLCMT000908ZQX يتم تسجيل سمات المحاكاة

QZXW2HTMLCMT000909ZQX if

QZXW2HTMLCMT000910ZQX QZXW2HTMLCc3RhcnRFbGVtZW50ZQX

QZXW2HTMLCMT000911ZQX الدالة التي يتم استدعاؤها عند العثور على علامة نهاية

QZXW2HTMLCMT000912ZQX يتم استرداد العلامة الحالية

QZXW2HTMLCMT000913ZQX هل هذه علامة خطأ؟

QZXW2HTMLCMT000914ZQX خطأ آخر

QZXW2HTMLCMT000915ZQX if

QZXW2HTMLCMT000916ZQX QZXW2HTMLCZW5kRWxlbWVudAZQX

QZXW2HTMLCMT000917ZQX وظيفة معالجة محتوى العلامة

QZXW2HTMLCMT000918ZQX بيانات عامة

QZXW2HTMLCMT000919ZQX هل هذه علامة خطأ؟

QZXW2HTMLCMT000920ZQX يتم تجميعها مع محتوى العلامة الحالية

QZXW2HTMLCMT000921ZQX if

QZXW2HTMLCMT000922ZQX QZXW2HTMLCZ2V0RGF0YQZQX

QZXW2HTMLCMT000923ZQX يتم إنشاء كائن لتحليل نص XML

QZXW2HTMLCMT000924ZQX يتم تحديد الوظائف التي يجب تنفيذها في بداية العلامة ونهايتها

QZXW2HTMLCMT000925ZQX يتم تحديد الوظيفة التي سيتم تنفيذها عند العثور على البيانات

QZXW2HTMLCMT000926ZQX يتم تحليل QZXW2HTMLCJGRvY3VtZW50ZQX

QZXW2HTMLCMT000927ZQX يتم تحرير الموارد التي يشغلها محلل xml

QZXW2HTMLCMT000928ZQX النهاية

QZXW2HTMLCMT000929ZQX localhost/poly/impots/8/QZXW2HTMLCeG1sc2ltdWxhdGlvbnMucGhwZQX نعم 2 200000

QZXW2HTMLCMT000930ZQX localhost/poly/impots/8/QZXW2HTMLCeG1sc2ltdWxhdGlvbnMucGhwZQX نعم 3 200000

QZXW2HTMLCMT000931ZQX localhost/poly/impots/8/QZXW2HTMLCeG1sc2ltdWxhdGlvbnMucGhwZQX نعم 2 200000 69a54d79db10b70ed0a2d55d5026ac8b

QZXW2HTMLCMT000932ZQX localhost/poly/impots/8/QZXW2HTMLCeG1sc2ltdWxhdGlvbnMucGhwZQX لا 2 200000 69a54d79db10b70ed0a2d55d5026ac8b

QZXW2HTMLCMT000933ZQX فئة «المواد» التي تعمل على قاعدة بيانات «المواد» المكونة من الجداول التالية

QZXW2HTMLCMT000934ZQX المنتجات: (الرمز، الاسم، السعر، QZXW2HTMLCc3RvY2tBY3R1ZWwZQX، QZXW2HTMLCc3RvY2tNaW5pbXVtZQX)

QZXW2HTMLCMT000935ZQX المستخدمون: (اسم المستخدم، كلمة المرور، المسؤول)

QZXW2HTMLCMT000936ZQX الصلاحيات: (تسجيل الدخول، الجدول، الإضافة، التعديل، الحذف، الاستعلام)

QZXW2HTMLCMT000937ZQX هذا هو المستخدم الخاص بالفصل الذي يجب عليه تقديم اسم المستخدم/كلمة المرور اللذين يتيحان إجراء أي عملية على قاعدة البيانات

QZXW2HTMLCMT000938ZQX وبالتالي فإنه يتمتع بالفعل بجميع الصلاحيات على قاعدة البيانات. وهذا يعني أنه لا داعي لاتخاذ

QZXW2HTMLCMT000939ZQX اتخاذ أي احتياطات أمنية خاصة هنا

QZXW2HTMLCMT000940ZQX المكتبات

QZXW2HTMLCMT000941ZQX السمات

QZXW2HTMLCMT000942ZQX سلسلة الاتصال

QZXW2HTMLCMT000943ZQX اسم قاعدة البيانات

QZXW2HTMLCMT000944ZQX الاتصال بقاعدة البيانات

QZXW2HTMLCMT000945ZQX قائمة الأخطاء

QZXW2HTMLCMT000946ZQX نتيجة استعلام select

QZXW2HTMLCMT000947ZQX قيمة منطقية تشير إلى ما إذا كان المستخدم متصلاً بقاعدة البيانات أم لا

QZXW2HTMLCMT000948ZQX آخر استعلام تم تنفيذه

QZXW2HTMLCMT000949ZQX معرف مستخدم الاتصال

QZXW2HTMLCMT000950ZQX تكون قيمتها «صحيح» إذا كان المستخدم مسؤولاً

QZXW2HTMLCMT000951ZQX قائمة صلاحياته: table ->> array(عرض، إضافة، حذف، تعديل)

QZXW2HTMLCMT000952ZQX منشئ

QZXW2HTMLCMT000953ZQX QZXW2HTMLCJGREU04ZQX: قاموس يحدد الارتباط المطلوب إنشاؤه

QZXW2HTMLCMT000954ZQX $dDSNQZXW2HTMLBWydzZ2JkJ10ZQX: نوع QZXW2HTMLCU0dCRAZQX الذي يجب الاتصال به

QZXW2HTMLCMT000955ZQX $dDSNQZXW2HTMLBWydob3N0J10ZQX: اسم الجهاز المضيف الذي يستضيفه

QZXW2HTMLCMT000956ZQX $dDSNQZXW2HTMLBWydkYXRhYmFzZSddZQX: اسم قاعدة البيانات التي يجب الاتصال بها

QZXW2HTMLCMT000957ZQX $dDSNQZXW2HTMLBWydhZG1pbiddZQX: اسم المستخدم لمالك قاعدة البيانات التي يجب الاتصال بها

QZXW2HTMLCMT000958ZQX $dDSNQZXW2HTMLBWydtZHBhZG1pbiddZQX: كلمة المرور الخاصة به

QZXW2HTMLCMT000959ZQX QZXW2HTMLCJHNVc2VyZQX: اسم المستخدم الذي يرغب في استخدام قاعدة بيانات المقالات

QZXW2HTMLCMT000960ZQX QZXW2HTMLCJHNNZHAZQX: كلمة المرور الخاصة به

QZXW2HTMLCMT000961ZQX ينشئ في QZXW2HTMLCJG9EQgZQX اتصالاً بقاعدة البيانات المحددة بواسطة QZXW2HTMLCJGREU04ZQX تحت هوية $dDSNQZXW2HTMLBWydhZG1pbiddZQX

QZXW2HTMLCMT000962ZQX إذا نجح الاتصال وتم مصادقة المستخدم QZXW2HTMLCJHNVc2VyZQX

QZXW2HTMLCMT000963ZQX يقوم بتحميل الصلاحيات إلى QZXW2HTMLCJGJBZG1pbgZQX و QZXW2HTMLCJGREcm9pdHMZQX صلاحيات المستخدم QZXW2HTMLCJHNVc2VyZQX

QZXW2HTMLCMT000964ZQX يضع سلسلة اتصال قاعدة البيانات في QZXW2HTMLCJHNEU04ZQX

QZXW2HTMLCMT000965ZQX يضع في QZXW2HTMLCJHNEYXRhQmFzZQZQX اسم قاعدة البيانات التي يتم الاتصال بها

QZXW2HTMLCMT000966ZQX يضبط قيمة QZXW2HTMLCJGNvbm5lY3TDqQZQX على «صحيح»

QZXW2HTMLCMT000967ZQX في حالة فشل الاتصال أو إذا لم يتم تحديد هوية المستخدم QZXW2HTMLCJHNVc2VyZQX بشكل صحيح

QZXW2HTMLCMT000968ZQX يضع رسائل الخطأ المناسبة في القائمة QZXW2HTMLCJGFFcnJldXJzZQX

QZXW2HTMLCMT000969ZQX يغلق الاتصال إذا لزم الأمر

QZXW2HTMLCMT000970ZQX يضع QZXW2HTMLCJGNvbm5lY3TDqQZQX في حالة «خطأ»

QZXW2HTMLCMT000971ZQX مُنشئ

QZXW2HTMLCMT000972ZQX (إعادة) الاتصال بالقاعدة

QZXW2HTMLCMT000973ZQX الاتصال

QZXW2HTMLCMT000974ZQX إغلاق الاتصال بالقاعدة QZXW2HTMLCJHNEU04ZQX

QZXW2HTMLCMT000975ZQX قطع الاتصال

QZXW2HTMLCMT000976ZQX QZXW2HTMLCJHNRdWVyeQZQX: طلب للتنفيذ

QZXW2HTMLCMT000977ZQX QZXW2HTMLCJGJBZG1pbgZQX: صحيح إذا كان طلب التنفيذ كمسؤول

QZXW2HTMLCMT000978ZQX تنفيذ

QZXW2HTMLCMT000979ZQX يضيف عنصرًا QZXW2HTMLCJGRBcnRpY2xlZQX (الرمز، الاسم، السعر، QZXW2HTMLCc3RvY2tBY3R1ZWwZQX، QZXW2HTMLCc3RvY2tNaW5pbXVtZQX) إلى جدول العناصر

QZXW2HTMLCMT000980ZQX إضافة

QZXW2HTMLCMT000981ZQX يعدل مادة QZXW2HTMLCJGRBcnRpY2xlZQX (الرمز، الاسم، السعر، QZXW2HTMLCc3RvY2tBY3R1ZWwZQX، QZXW2HTMLCc3RvY2tNaW5pbXVtZQX) في جدول المنتجات

QZXW2HTMLCMT000982ZQX تحديث

QZXW2HTMLCMT000983ZQX يحذف عنصرًا من جدول العناصر

QZXW2HTMLCMT000984ZQX الذي يحمل الرمز QZXW2HTMLCJHNDb2RlZQX

QZXW2HTMLCMT000985ZQX حذف

QZXW2HTMLCMT000986ZQX يتحقق من صحة عنصر QZXW2HTMLCJGRBcnRpY2xlZQX (الرمز، الاسم، السعر، QZXW2HTMLCc3RvY2tBY3R1ZWwZQX، QZXW2HTMLCc3RvY2tNaW5pbXVtZQX)

QZXW2HTMLCMT000987ZQX التحقق

QZXW2HTMLCMT000988ZQX تنفيذ استعلام SELECT على جدول المنتجات

QZXW2HTMLCMT000989ZQX تتكون هذه الجدولة من ثلاثة مكونات

QZXW2HTMLCMT000990ZQX قائمة الأعمدة في $dQueryQZXW2HTMLBWydjb2xvbm5lcyddZQX

QZXW2HTMLCMT000991ZQX التصفية في $dQueryQZXW2HTMLBWyd3aGVyZSddZQX

QZXW2HTMLCMT000992ZQX ترتيب العرض في $dQueryQZXW2HTMLBWydvcmRlcmJ5J10ZQX

QZXW2HTMLCMT000993ZQX QZXW2HTMLCc2VsZWN0QXJ0aWNsZXMZQX

QZXW2HTMLCMT000994ZQX تُرجع QZXW2HTMLCVFJVRQZQX إذا كان عنصر الرمز QZXW2HTMLCJHNDb2RlZQX موجودًا في جدول العناصر

QZXW2HTMLCMT000995ZQX QZXW2HTMLCZXhpc3RlQXJ0aWNsZQZQX

QZXW2HTMLCMT000996ZQX التحقق من وجود المستخدم QZXW2HTMLCJHNVc2VyZQX الذي لديه كلمة المرور QZXW2HTMLCJHNNZHAZQX

QZXW2HTMLCMT000997ZQX تُرجع (int QZXW2HTMLCJGlFcnJldXIZQX، string QZXW2HTMLCJHNBZG1pbgZQX، hashtable QZXW2HTMLCJGREcm9pdHMZQX)

QZXW2HTMLCMT000998ZQX QZXW2HTMLCJGlFcnJldXIZQX = -1 في حالة حدوث أي خطأ في تشغيل قاعدة البيانات - وعندها يتم ملء القائمة QZXW2HTMLCJGFFcnJldXJzZQX

QZXW2HTMLCMT000999ZQX QZXW2HTMLCJGlFcnJldXIZQX = 1 إذا لم يتم العثور على المستخدم (غير موجود أو كلمة المرور غير صحيحة)

QZXW2HTMLCMT001000ZQX QZXW2HTMLCJGlFcnJldXIZQX = 2 إذا كان المستخدم موجودًا ولكنه لا يمتلك أي صلاحيات في جدول الصلاحيات

QZXW2HTMLCMT001001ZQX QZXW2HTMLCJGlFcnJldXIZQX = 3 إذا كان المستخدم موجودًا وكان مسؤولًا

QZXW2HTMLCMT001002ZQX QZXW2HTMLCJGlFcnJldXIZQX = 0 إذا كان المستخدم موجودًا وليس مسؤولًا

QZXW2HTMLCMT001003ZQX QZXW2HTMLCJHNBZG1pbgZQX="y" إذا كان المستخدم موجودًا ومسؤولًا (QZXW2HTMLCJGlFcnJldXIZQX==3)، وإلا فإنه يساوي السلسلة الفارغة

QZXW2HTMLCMT001004ZQX QZXW2HTMLCJGREcm9pdHMZQX هو قاموس حقوق المستخدم إذا لم يكن مسؤولاً (QZXW2HTMLCJGlFcnJldXIZQX==0)

QZXW2HTMLCMT001005ZQX وإلا فهي مصفوفة فارغة

QZXW2HTMLCMT001006ZQX مفاتيح القاموس هي الجداول التي يمتلك المستخدم حقوقًا عليها

QZXW2HTMLCMT001007ZQX القيمة المرتبطة بهذا الجدول هي بدورها قاموس تكون مفاتيحه هي الحقوق

QZXW2HTMLCMT001008ZQX (عرض، إضافة، تعديل، حذف) والقيم هي السلاسل 'y' (نعم) أو 'n' (لا) حسب الحالة

QZXW2HTMLCMT001009ZQX QZXW2HTMLCZXhpc3RlVXNlcgZQX

QZXW2HTMLCMT001010ZQX يعرض جدول الرموز

QZXW2HTMLCMT001011ZQX QZXW2HTMLCZ2V0Q29kZXMZQX

QZXW2HTMLCMT001012ZQX يصنف

QZXW2HTMLCMT001013ZQX هنا تم التعرف على QZXW2HTMLCJHNVc2VyZQX كمستخدم غير إداري للقاعدة

QZXW2HTMLCMT001014ZQX الآن أصبح QZXW2HTMLCJHNVc2VyZQX مسؤولاً

QZXW2HTMLCMT001015ZQX جاري تحميل ملف التكوين

QZXW2HTMLCMT001016ZQX تكوين php

QZXW2HTMLCMT001017ZQX لا توجد ملفات تعريف الارتباط

QZXW2HTMLCMT001018ZQX تكوين قاعدة البيانات الخاصة بالمقالات

QZXW2HTMLCMT001019ZQX عناوين URL للصفحات

QZXW2HTMLCMT001020ZQX روابط الصفحة الرئيسية

QZXW2HTMLCMT001021ZQX يتم حفظ QZXW2HTMLCJG1haW4ZQX في الإعدادات

QZXW2HTMLCMT001022ZQX QZXW2HTMLCRkZEQUI5ZQX;

QZXW2HTMLCMT001023ZQX QZXW2HTMLCRUVFOEFBZQX;

QZXW2HTMLCMT001024ZQX QZXW2HTMLCRUU4MkVFZQX;

QZXW2HTMLCMT001025ZQX QZXW2HTMLCRkE4MDcyZQX;

QZXW2HTMLCMT001026ZQX QZXW2HTMLCRkY3RjUwZQX;

QZXW2HTMLCMT001027ZQX QZXW2HTMLCRkZBMDdBZQX;

QZXW2HTMLCMT001028ZQX QZXW2HTMLCQTA1MjJEZQX;

QZXW2HTMLCMT001029ZQX QZXW2HTMLCRkZFNEM0ZQX;

QZXW2HTMLCMT001030ZQX QZXW2HTMLCRkZBNTAwZQX;

QZXW2HTMLCMT001031ZQX QZXW2HTMLCMjI4QjIyZQX;

QZXW2HTMLCMT001032ZQX QZXW2HTMLCMDA4QjhCZQX؛

QZXW2HTMLCMT001033ZQX QZXW2HTMLCRkY3RjUwZQX؛

QZXW2HTMLCMT001034ZQX QZXW2HTMLCRDFFMUY4ZQX;

QZXW2HTMLCMT001035ZQX QZXW2HTMLCNjQ5NUVEZQX;

QZXW2HTMLCMT001036ZQX إدارة جدول المواد

QZXW2HTMLCMT001037ZQX الإجراء المطلوب اتخاذه

QZXW2HTMLCMT001038ZQX المرحلة المحتملة

QZXW2HTMLCMT001039ZQX الجلسة

QZXW2HTMLCMT001040ZQX هل هناك جلسة قيد التشغيل؟

QZXW2HTMLCMT001041ZQX مصادقة المستخدم

QZXW2HTMLCMT001042ZQX طلب غير صحيح

QZXW2HTMLCMT001043ZQX if - لا توجد جلسة

QZXW2HTMLCMT001044ZQX يتم استرداد الجلسة

QZXW2HTMLCMT001045ZQX معالجة الطلب

QZXW2HTMLCMT001046ZQX ----- المصادقة

QZXW2HTMLCMT001047ZQX ----- إضافة مقال

QZXW2HTMLCMT001048ZQX ----- تحديث المنتج

QZXW2HTMLCMT001049ZQX ----- حذف مقال

QZXW2HTMLCMT001050ZQX ----- الاطلاع على المنتجات

QZXW2HTMLCMT001051ZQX ----- إرسال طلب QZXW2HTMLCU1FMZQX

QZXW2HTMLCMT001052ZQX إجراء خاطئ - يتم عرض صفحة المصادقة

QZXW2HTMLCMT001053ZQX لـ

QZXW2HTMLCMT001054ZQX الجهاز:المنفذ//QZXW2HTMLCYXBwYXJ0aWNsZXMucGhwZQX?action=QZXW2HTMLCYWRkQXJ0aWNsZQZQX&phase=0&QZXW2HTMLCUEhQU0VTU0lEZQX=QZXW2HTMLBW1BIUFNFU1NJRF0ZQX

QZXW2HTMLCMT001055ZQX localhost:81/st/php/articles/gestion/articles8/QZXW2HTMLCYXBwYXJ0aWNsZXMucGhwZQX?action=QZXW2HTMLCYWRkQXJ0aWNsZQZQX&phase=0&QZXW2HTMLCUEhQU0VTU0lEZQX=006a63e6027f16c70b63cdae93405eeb

QZXW2HTMLCMT001056ZQX localhost:81/st/php/articles/gestion/articles8/QZXW2HTMLCYXBwYXJ0aWNsZXMucGhwZQX?action=QZXW2HTMLCZGVsZXRlQXJ0aWNsZQZQX&phase=1&QZXW2HTMLCUEhQU0VTU0lEZQX=006a63e6027f16c70b63cdae93405eeb

QZXW2HTMLCMT001057ZQX المصادقة

QZXW2HTMLCMT001058ZQX إضافة مقال

QZXW2HTMLCMT001059ZQX تعديل مقال

QZXW2HTMLCMT001060ZQX حذف منتج

QZXW2HTMLCMT001061ZQX اختيار العناصر

QZXW2HTMLCMT001062ZQX طلب المسؤول

QZXW2HTMLCMT001063ZQX المصادقة

QZXW2HTMLCMT001064ZQX التحقق مما إذا كان الإجراء الجاري (QZXW2HTMLCJHNBY3Rpb24ZQX، QZXW2HTMLCJHNQaGFzZQZQX) يمكن أن يتبع الإجراء السابق

QZXW2HTMLCMT001065ZQX المخزنة في $dSessionQZXW2HTMLBWydwcsOpY8OpZGVudCddZQX

QZXW2HTMLCMT001066ZQX قاموس التسلسلات المسموح بها موجود في $dConfigQZXW2HTMLBWydwcsOpY8OpZGVudHMnXQZQX

QZXW2HTMLCMT001067ZQX تُرجع QZXW2HTMLCVFJVRQZQX إذا كان التسلسل ممكنًا، وإلا تُرجع QZXW2HTMLCRkFMU0UZQX

QZXW2HTMLCMT001068ZQX إدارة جدول المواد

QZXW2HTMLCMT001069ZQX جلسة

QZXW2HTMLCMT001070ZQX الإجراء المطلوب اتخاذه

QZXW2HTMLCMT001071ZQX المرحلة المحتملة للإجراء

QZXW2HTMLCMT001072ZQX هل هناك جلسة جارية؟

QZXW2HTMLCMT001073ZQX مصادقة المستخدم

QZXW2HTMLCMT001074ZQX إجراء غير عادي

QZXW2HTMLCMT001075ZQX if - لا توجد جلسة

QZXW2HTMLCMT001076ZQX استرداد الجلسة

QZXW2HTMLCMT001077ZQX هل تسلسل الإجراءات طبيعي؟

QZXW2HTMLCMT001078ZQX تسلسل غير طبيعي

QZXW2HTMLCMT001079ZQX if

QZXW2HTMLCMT001080ZQX معالجة الإجراءات

QZXW2HTMLCMT001081ZQX if

QZXW2HTMLCMT001082ZQX نتحقق من وجود تسجيل دخول

QZXW2HTMLCMT001083ZQX لا يوجد تسجيل دخول

QZXW2HTMLCMT001084ZQX if

QZXW2HTMLCMT001085ZQX البيانات موجودة - يتم إرسالها إلى الخادم

QZXW2HTMLCMT001086ZQX مع

QZXW2HTMLCMT001087ZQX فحص

QZXW2HTMLCMT001088ZQX نص برمجي PHP يعرض الوقت

QZXW2HTMLCMT001089ZQX نص برمجي QZXW2HTMLCUEVSTAZQX يعرض الوقت

QZXW2HTMLCMT001090ZQX وحدات

QZXW2HTMLCMT001091ZQX برنامج

QZXW2HTMLCMT001092ZQX فئة

QZXW2HTMLCMT001093ZQX إنشاء كائن «شخص»

QZXW2HTMLCMT001094ZQX عرض خصائص الشخص p1

QZXW2HTMLCMT001095ZQX مصفوفة في متغير

QZXW2HTMLCMT001096ZQX مصفوفة فارغة

QZXW2HTMLCMT001097ZQX مصفوفة تنمو ديناميكيًا

QZXW2HTMLCMT001098ZQX عرض المصفوفة

QZXW2HTMLCMT001099ZQX مرة أخرى

QZXW2HTMLCMT001100ZQX جداول متعددة الأبعاد

QZXW2HTMLCMT001101ZQX for j

QZXW2HTMLCMT001102ZQX for i

QZXW2HTMLCMT001103ZQX النهاية

QZXW2HTMLCMT001104ZQX عرض الجدول

QZXW2HTMLCMT001105ZQX لـ

QZXW2HTMLCMT001106ZQX وظيفة

QZXW2HTMLCMT001107ZQX عرض الجدول

QZXW2HTMLCMT001108ZQX لـ j

QZXW2HTMLCMT001109ZQX لـ i

QZXW2HTMLCMT001110ZQX الدالة

QZXW2HTMLCMT001111ZQX في لغة Perl الكلاسيكية

QZXW2HTMLCMT001112ZQX مفاتيح؛QZXW2HTMLCJGkZQX++){

QZXW2HTMLCMT001113ZQX من لغة PerlScript باستخدام كائنات Windows Script

برنامج Java QZXW2HTMLCMT001114ZQX لعرض الوقت

QZXW2HTMLCMT001115ZQX استرداد التاريخ والوقت

QZXW2HTMLCMT001116ZQX العرض

QZXW2HTMLCMT001117ZQX main

QZXW2HTMLCMT001118ZQX فئة

QZXW2HTMLCMT001119ZQX الوقت: عدد المللي ثانية منذ 01/01/1970

QZXW2HTMLCMT001120ZQX "تنسيق عرض التاريخ والوقت

QZXW2HTMLCMT001121ZQX d: اليوم برقمين

QZXW2HTMLCMT001122ZQX m: الشهر برقمين

QZXW2HTMLCMT001123ZQX y: السنة برقمين

QZXW2HTMLCMT001124ZQX H: الساعة 0,23

QZXW2HTMLCMT001125ZQX i: الدقائق

QZXW2HTMLCMT001126ZQX s: الثواني

QZXW2HTMLCMT001127ZQX !c:\perl\bin\QZXW2HTMLCcGVybC5leGUZQX

QZXW2HTMLCMT001128ZQX نص برمجي QZXW2HTMLCUEVSTAZQX يعرض الوقت

QZXW2HTMLCMT001129ZQX وحدات

QZXW2HTMLCMT001130ZQX برنامج

QZXW2HTMLCMT001131ZQX الحزم المستوردة

QZXW2HTMLCMT001132ZQX يتلقى كمعلمة خصائص خدمة ما بالشكل التالي

QZXW2HTMLCMT001133ZQX الخادم والمنفذ

QZXW2HTMLCMT001134ZQX يتصل بالخدمة

QZXW2HTMLCMT001135ZQX ينشئ مؤشر ترابط لقراءة الأوامر المكتوبة على لوحة المفاتيح

QZXW2HTMLCMT001136ZQX سيتم إرسال هذه الأوامر إلى الخادم

QZXW2HTMLCMT001137ZQX يُنشئ مؤشر ترابط لقراءة الردود الواردة من الخادم

QZXW2HTMLCMT001138ZQX سيتم عرض هذه الردود على الشاشة

QZXW2HTMLCMT001139ZQX وينتهي كل ذلك بإدخال الأمر «fin» عبر لوحة المفاتيح

QZXW2HTMLCMT001140ZQX متغير مثيل

QZXW2HTMLCMT001141ZQX الصيغة

QZXW2HTMLCMT001142ZQX عدد الوسيطات

QZXW2HTMLCMT001143ZQX يُذكر اسم الخادم

QZXW2HTMLCMT001144ZQX يجب أن يكون المنفذ عددًا صحيحًا أكبر من 0

QZXW2HTMLCMT001145ZQX قد تحدث مشاكل

QZXW2HTMLCMT001146ZQX يتم الاتصال بالخدمة

QZXW2HTMLCMT001147ZQX خطأ

QZXW2HTMLCMT001148ZQX نهاية

QZXW2HTMLCMT001149ZQX استثناء

QZXW2HTMLCMT001150ZQX يتم إنشاء مؤشرات الترابط للقراءة/الكتابة

QZXW2HTMLCMT001151ZQX نهاية مؤشر الترابط الرئيسي

QZXW2HTMLCMT001152ZQX الرئيسي

QZXW2HTMLCMT001153ZQX عرض الأخطاء

QZXW2HTMLCMT001154ZQX عرض الخطأ

QZXW2HTMLCMT001155ZQX التوقف مع وجود خطأ

QZXW2HTMLCMT001156ZQX خطأ

QZXW2HTMLCMT001157ZQX فئة

QZXW2HTMLCMT001158ZQX فئة مكلفة بقراءة الأوامر المكتوبة على لوحة المفاتيح

QZXW2HTMLCMT001159ZQX وإرسالها إلى خادم عبر عميل TCP تم تمريره كمعلمة

QZXW2HTMLCMT001160ZQX عميل TCP

QZXW2HTMLCMT001161ZQX منشئ

QZXW2HTMLCMT001162ZQX يُشار إلى عميل TCP

QZXW2HTMLCMT001163ZQX المنشئ

QZXW2HTMLCMT001164ZQX طريقة Run الخاصة بالخيط

QZXW2HTMLCMT001165ZQX البيانات المحلية

QZXW2HTMLCMT001166ZQX دفق الكتابة عبر الشبكة

QZXW2HTMLCMT001167ZQX تدفق لوحة المفاتيح

QZXW2HTMLCMT001168ZQX الأمر الذي تمت قراءته من لوحة المفاتيح

QZXW2HTMLCMT001169ZQX إدارة الأخطاء

QZXW2HTMLCMT001170ZQX إنشاء تدفق الكتابة عبر الشبكة

QZXW2HTMLCMT001171ZQX إنشاء تدفق الإدخال من لوحة المفاتيح

QZXW2HTMLCMT001172ZQX حلقة إدخال الأوامر وإرسالها

QZXW2HTMLCMT001173ZQX قراءة الأمر المكتوب على لوحة المفاتيح

QZXW2HTMLCMT001174ZQX انتهى؟

QZXW2HTMLCMT001175ZQX إرسال الأمر إلى الخادم

QZXW2HTMLCMT001176ZQX الأمر التالي

QZXW2HTMLCMT001177ZQX while

QZXW2HTMLCMT001178ZQX خطأ

QZXW2HTMLCMT001179ZQX catch

QZXW2HTMLCMT001180ZQX النهاية - إغلاق التدفقات

QZXW2HTMLCMT001181ZQX الإبلاغ عن انتهاء مؤشر الترابط

QZXW2HTMLCMT001182ZQX تشغيل

QZXW2HTMLCMT001183ZQX فئة

QZXW2HTMLCMT001184ZQX الفئة المسؤولة عن قراءة أسطر النص الموجهة إلى

QZXW2HTMLCMT001185ZQX عميل TCP الذي تم تمريره كمعلمة

QZXW2HTMLCMT001186ZQX عميل TCP

QZXW2HTMLCMT001187ZQX منشئ

QZXW2HTMLCMT001188ZQX يتم تسجيل عميل TCP

QZXW2HTMLCMT001189ZQX المنشئ

QZXW2HTMLCMT001190ZQX طريقة Run للخيط

QZXW2HTMLCMT001191ZQX البيانات المحلية

QZXW2HTMLCMT001192ZQX تدفق قراءة الشبكة

QZXW2HTMLCMT001193ZQX استجابة الخادم

QZXW2HTMLCMT001194ZQX إدارة الأخطاء

QZXW2HTMLCMT001195ZQX إنشاء تدفق قراءة الشبكة

QZXW2HTMLCMT001196ZQX حلقة قراءة أسطر النص من التدفق QZXW2HTMLCSU4ZQX

QZXW2HTMLCMT001197ZQX قراءة تدفق الشبكة

QZXW2HTMLCMT001198ZQX هل التدفق مغلق؟

QZXW2HTMLCMT001199ZQX العرض

QZXW2HTMLCMT001200ZQX while

QZXW2HTMLCMT001201ZQX خطأ

QZXW2HTMLCMT001202ZQX catch

QZXW2HTMLCMT001203ZQX النهاية - يتم إغلاق التدفقات

QZXW2HTMLCMT001204ZQX الإبلاغ عن انتهاء مؤشر الترابط

QZXW2HTMLCMT001205ZQX التشغيل

QZXW2HTMLCMT001206ZQX فئة

QZXW2HTMLCMT001207ZQX \الشبكة\العميل TCP عام> java QZXW2HTMLCY2xpZW50VENQZ2VuZXJpcXVlZQX localhost 100

QZXW2HTMLCMT001208ZQX الحزم

QZXW2HTMLCMT001209ZQX البرنامج الرئيسي

QZXW2HTMLCMT001210ZQX يستقبل الطلبات الواردة من العملاء عبر منفذ الاستماع

QZXW2HTMLCMT001211ZQX ينشئ مؤشر ترابط لقراءة طلبات العميل

QZXW2HTMLCMT001212ZQX سيتم عرض هذه الطلبات على الشاشة

QZXW2HTMLCMT001213ZQX إنشاء مؤشر ترابط لقراءة الأوامر المكتوبة على لوحة المفاتيح

QZXW2HTMLCMT001214ZQX سيتم إرسال هذه الأوامر كرد إلى العميل

QZXW2HTMLCMT001215ZQX وينتهي كل ذلك بإدخال الأمر «fin» عبر لوحة المفاتيح

QZXW2HTMLCMT001216ZQX متغير مثيل

QZXW2HTMLCMT001217ZQX هل هناك وسيطة

QZXW2HTMLCMT001218ZQX يجب أن يكون المنفذ عددًا صحيحًا >0

QZXW2HTMLCMT001219ZQX يتم إنشاء خدمة الاستماع

QZXW2HTMLCMT001220ZQX عدد العملاء الذين تمت معالجتهم

QZXW2HTMLCMT001221ZQX يتم إنشاء الخدمة

QZXW2HTMLCMT001222ZQX المتابعة

QZXW2HTMLCMT001223ZQX حلقة خدمة العملاء

QZXW2HTMLCMT001224ZQX حلقة لا نهائية - سيتم إيقافها بواسطة Ctrl-C

QZXW2HTMLCMT001225ZQX في انتظار عميل

QZXW2HTMLCMT001226ZQX يتم تنفيذ الخدمة بواسطة خيوط منفصلة

QZXW2HTMLCMT001227ZQX يتم إنشاء خيوط القراءة/الكتابة

QZXW2HTMLCMT001228ZQX العودة إلى الاستماع إلى الطلبات

QZXW2HTMLCMT001229ZQX نهاية while

QZXW2HTMLCMT001230ZQX يتم الإبلاغ عن الخطأ

QZXW2HTMLCMT001231ZQX catch

QZXW2HTMLCMT001232ZQX نهاية main

QZXW2HTMLCMT001233ZQX عرض الأخطاء

QZXW2HTMLCMT001234ZQX عرض الخطأ

QZXW2HTMLCMT001235ZQX إيقاف مع خطأ

QZXW2HTMLCMT001236ZQX خطأ

QZXW2HTMLCMT001237ZQX فئة

QZXW2HTMLCMT001238ZQX فئة مكلفة بقراءة الإجابات المكتوبة على لوحة المفاتيح

QZXW2HTMLCMT001239ZQX وإرسالها إلى عميل عبر عميل TCP تم تمريره إلى المنشئ

QZXW2HTMLCMT001240ZQX عميل TCP

QZXW2HTMLCMT001241ZQX رقم العميل

QZXW2HTMLCMT001242ZQX المنشئ

QZXW2HTMLCMT001243ZQX يتم تسجيل عميل TCP

QZXW2HTMLCMT001244ZQX ورقمه

QZXW2HTMLCMT001245ZQX الشركة المصنعة

QZXW2HTMLCMT001246ZQX طريقة تشغيل الخيط

QZXW2HTMLCMT001247ZQX البيانات المحلية

QZXW2HTMLCMT001248ZQX تدفق الكتابة عبر الشبكة

QZXW2HTMLCMT001249ZQX الاستجابة المقروءة من لوحة المفاتيح

QZXW2HTMLCMT001250ZQX تدفق لوحة المفاتيح

QZXW2HTMLCMT001251ZQX التتبع

QZXW2HTMLCMT001252ZQX إدارة الأخطاء

QZXW2HTMLCMT001253ZQX إنشاء تدفق الكتابة عبر الشبكة

QZXW2HTMLCMT001254ZQX إنشاء تدفق لوحة المفاتيح

QZXW2HTMLCMT001255ZQX حلقة إدخال الأوامر وإرسالها

QZXW2HTMLCMT001256ZQX تحديد هوية العميل

QZXW2HTMLCMT001257ZQX قراءة الرد المكتوب على لوحة المفاتيح

QZXW2HTMLCMT001258ZQX انتهى؟

QZXW2HTMLCMT001259ZQX إرسال الرد إلى الخادم

QZXW2HTMLCMT001260ZQX الرد التالي

QZXW2HTMLCMT001261ZQX while

QZXW2HTMLCMT001262ZQX خطأ

QZXW2HTMLCMT001263ZQX catch

QZXW2HTMLCMT001264ZQX النهاية - إغلاق التدفقات

QZXW2HTMLCMT001265ZQX الإبلاغ عن نهاية مؤشر الترابط

QZXW2HTMLCMT001266ZQX تشغيل

QZXW2HTMLCMT001267ZQX فئة

QZXW2HTMLCMT001268ZQX فئة مكلفة بقراءة أسطر النص المرسلة إلى الخادم

QZXW2HTMLCMT001269ZQX عبر عميل tcp تم تمريره إلى المنشئ

QZXW2HTMLCMT001270ZQX عميل TCP

QZXW2HTMLCMT001271ZQX رقم العميل

QZXW2HTMLCMT001272ZQX المنشئ

QZXW2HTMLCMT001273ZQX يُلاحظ عميل TCP

QZXW2HTMLCMT001274ZQX ورقمه

QZXW2HTMLCMT001275ZQX الشركة المصنعة

QZXW2HTMLCMT001276ZQX طريقة تشغيل الخيط

QZXW2HTMLCMT001277ZQX البيانات المحلية

QZXW2HTMLCMT001278ZQX تدفق قراءة الشبكة

QZXW2HTMLCMT001279ZQX استجابة الخادم

QZXW2HTMLCMT001280ZQX المتابعة

QZXW2HTMLCMT001281ZQX إدارة الأخطاء

QZXW2HTMLCMT001282ZQX إنشاء تدفق قراءة الشبكة

QZXW2HTMLCMT001283ZQX حلقة قراءة أسطر النص من التدفق QZXW2HTMLCSU4ZQX

QZXW2HTMLCMT001284ZQX قراءة تدفق الشبكة

QZXW2HTMLCMT001285ZQX هل التدفق مغلق؟

QZXW2HTMLCMT001286ZQX العرض

QZXW2HTMLCMT001287ZQX while

QZXW2HTMLCMT001288ZQX خطأ

QZXW2HTMLCMT001289ZQX catch

QZXW2HTMLCMT001290ZQX النهاية - يتم إغلاق التدفقات

QZXW2HTMLCMT001291ZQX الإبلاغ عن انتهاء مؤشر الترابط

QZXW2HTMLCMT001292ZQX تشغيل

QZXW2HTMLCMT001293ZQX فئة

QZXW2HTMLCMT001294ZQX عرض معلومات النموذج في قائمة

QZXW2HTMLCMT001295ZQX يتم المسح أولاً

QZXW2HTMLCMT001296ZQX يتم عرض قيمة الحقول #

QZXW2HTMLCMT001297ZQX حقل مخفي

QZXW2HTMLCMT001298ZQX حقل نصي بسيط

QZXW2HTMLCMT001299ZQX حقل نصي متعدد

QZXW2HTMLCMT001300ZQX أزرار الاختيار

QZXW2HTMLCMT001301ZQX for

QZXW2HTMLCMT001302ZQX مربعات الاختيار

QZXW2HTMLCMT001303ZQX for

QZXW2HTMLCMT001304ZQX قائمة منسدلة

QZXW2HTMLCMT001305ZQX لـ

QZXW2HTMLCMT001306ZQX قائمة الاختيارات المتعددة

QZXW2HTMLCMT001307ZQX لـ

QZXW2HTMLCMT001308ZQX كلمة المرور

QZXW2HTMLCMT001309ZQX مع

QZXW2HTMLCMT001310ZQX وظيفة

QZXW2HTMLCMT001311ZQX كتابة نص في قائمة المعلومات

QZXW2HTMLCMT001312ZQX كتابة

QZXW2HTMLCMT001313ZQX QZXW2HTMLCZWZmYWNlckluZm9zZQX

QZXW2HTMLCMT001314ZQX هل هناك شيء يجب فعله؟

QZXW2HTMLCMT001315ZQX حسناً - يتم مسح النتائج السابقة

QZXW2HTMLCMT001316ZQX التحقق من النموذج

QZXW2HTMLCMT001317ZQX لا يوجد تطابق بين النموذج والسلسلة

QZXW2HTMLCMT001318ZQX تطابق - يتم عرض النتائج التي تم الحصول عليها

QZXW2HTMLCMT001319ZQX خلاف ذلك

QZXW2HTMLCMT001320ZQX مع

QZXW2HTMLCMT001321ZQX وظيفة

QZXW2HTMLCMT001322ZQX كتابة نص في قائمة المعلومات

QZXW2HTMLCMT001323ZQX كتابة

QZXW2HTMLCMT001324ZQX QZXW2HTMLCZWZmYWNlckluZm9zZQX

QZXW2HTMLCMT001325ZQX يختبر النموذج مقابل السلسلة في المثال المختار

QZXW2HTMLCMT001326ZQX مع

QZXW2HTMLCMT001327ZQX تشغيل

QZXW2HTMLCMT001328ZQX يضيف الاختبار الحالي إلى الأمثلة

QZXW2HTMLCMT001329ZQX هل هناك ما يجب فعله؟

QZXW2HTMLCMT001330ZQX إضافة

QZXW2HTMLCMT001331ZQX مسح المدخلات

QZXW2HTMLCMT001332ZQX مع

QZXW2HTMLCMT001333ZQX إضافة

QZXW2HTMLCMT001334ZQX التحقق من أن حقول الإدخال غير فارغة

QZXW2HTMLCMT001335ZQX إذا

QZXW2HTMLCMT001336ZQX إذا

QZXW2HTMLCMT001337ZQX حسناً

QZXW2HTMLCMT001338ZQX مع

QZXW2HTMLCMT001339ZQX التحقق

QZXW2HTMLCMT001340ZQX إضافة

QZXW2HTMLCMT001341ZQX يُضيف قيمة الحقل T إلى القوائم QZXW2HTMLCTDEZQX، QZXW2HTMLCTDIZQX

QZXW2HTMLCMT001342ZQX هل هناك شيء يجب فعله؟

QZXW2HTMLCMT001343ZQX الحقل فارغ

QZXW2HTMLCMT001344ZQX if

QZXW2HTMLCMT001345ZQX يتم إضافة العنصر

QZXW2HTMLCMT001346ZQX إضافة

QZXW2HTMLCMT001347ZQX إفراغ

QZXW2HTMLCMT001348ZQX إفراغ القائمة L

QZXW2HTMLCMT001349ZQX إفراغ

QZXW2HTMLCMT001350ZQX نقل

QZXW2HTMLCMT001351ZQX ينقل العناصر المحددة في القائمة QZXW2HTMLCTDEZQX إلى QZXW2HTMLCTDIZQX

QZXW2HTMLCMT001352ZQX هل هناك ما يجب فعله؟

QZXW2HTMLCMT001353ZQX فهرس العنصر المحدد في QZXW2HTMLCTDEZQX

QZXW2HTMLCMT001354ZQX if

QZXW2HTMLCMT001355ZQX ما هو وضع تحديد العناصر في القوائم

QZXW2HTMLCMT001356ZQX التحديد الفردي

QZXW2HTMLCMT001357ZQX إضافة في QZXW2HTMLCTDIZQX

QZXW2HTMLCMT001358ZQX الحذف في QZXW2HTMLCTDEZQX

QZXW2HTMLCMT001359ZQX بسيط

QZXW2HTMLCMT001360ZQX اختيار متعدد

QZXW2HTMLCMT001361ZQX تصفح القائمة 1 في الاتجاه المعاكس

QZXW2HTMLCMT001362ZQX هل العنصر محدد؟

QZXW2HTMLCMT001363ZQX إضافته إلى QZXW2HTMLCTDIZQX

QZXW2HTMLCMT001364ZQX حذفه من QZXW2HTMLCTDEZQX

QZXW2HTMLCMT001365ZQX إذا

QZXW2HTMLCMT001366ZQX لـ i

QZXW2HTMLCMT001367ZQX if ! بسيط

QZXW2HTMLCMT001368ZQX التحويل