1 / 37

Beginners Guide to Web-Enabling your Informix database

Beginners Guide to Web-Enabling your Informix database. Using :. By: Peter Schmidt PRS Technologies, Inc. What is PHP ?. PHP (officially "PHP: Hypertext Preprocessor") ( Originally “Personal Home Page” ) A server-side HTML-embedded scripting language.

sema
Download Presentation

Beginners Guide to Web-Enabling your Informix database

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Beginners Guide to Web-Enabling your Informix database Using: By: Peter Schmidt PRSTechnologies, Inc.

  2. What is PHP ? PHP (officially "PHP: Hypertext Preprocessor") • ( Originally “Personal Home Page” ) • A server-side HTML-embedded scripting language. • Writing a database-enabled web page is incredibly simple ! • PHP is in use on over 150,000 sites around the world. • Since PHP is executed on the web server, web browsers can’t see your PHP code. • PHP is very fast. • PHP is completely free(Open Source)

  3. The following databases are currently supported: • Informix InterBase PostgreSQL • dBase FrontBase Solid • Empress mSQL Sybase • FilePro (read-only) Direct MS-SQL Unix dbm • IBM DB2 MySQL Adabas D • ODBC Velocis Ingres • Oracle (OCI7 and OCI8)

  4. An introductory example of PHP <html> <body> <?php echo "Hi, I'm a PHP script!"; ?> </body> </html> Note that PHP code is embedded inside the HTML code. Demo 1

  5. Switching between HTML and PHP <html> <body> Here I am in HTML! <BR> <?php echo ”Now I'm in PHP! <BR>"; ?> Back to HTML! <BR> </body> </html> HTML Note the PHP start and stop tags PHP Back to HTML PHP code is executed on the web server! Demo 2

  6. Putting comments in PHP code <?php echo "This is a test <br>";// This is a one-line c++ style comment echo "This is a test <br>"; # This is Unix shell-style style comment /* This is the first line of a multi line comment This is the second line of comment */ ?> PHP supports 'C', 'C++' and Unix shell-style comments.

  7. Connecting to the Informix database <?php $database = "video"; /* populate variables */ $server = "lapdog_tcp"; $login = ”username"; $password = ”password"; $dbs = $database . "@" . $server; /* concatenate */ $connect_id = ifx_pconnect($dbs,$g_login,$g_password); if (!$connect_id) { echo "Unable to connect to Informix database<br>\n"; chk_ifx_err1($connect_id); } else { echo “Informix connection successful! <br>”; } ?> This is my user defined function Demo 3

  8. Use a tcp/ip connection to avoid error -27000 <?php $database = "video"; $server = "lapdog_tcp"; $login = ”username"; $password = ”password"; ?> Use a tcp/ip connection to the database (vs. a shared memory connection) Warning: E [SQLSTATE=IX 000 SQLCODE=-27000] in /u/www/lapdog/php_demo/php_demo4.php3 on line 40Unable to connect to Informix databaseInformix error: Cannot support multiple connections over shared memory. finderr -27000 -27000 Cannot support multiple connections over shared memory. An application cannot use the CONNECT statement to make more than one connection that uses shared-memory communication (IPC). Ensure that the application makes only one shared-memory connection at a time. If the application must use concurrent connections, the database server administrator might need to change the connection type (as specified in the nettype field of the sqlhosts file) from a shared -memory connection to a network connection. Demo 3

  9. Persistent database connections • An SQL connection that does not close when the execution of your script ends. • When a persistent connection is requested, PHP checks if there's already an identical persistent connection (that remained open from earlier) - and if it exists, it uses it. • If it does not exist, it creates the connection. • if connection overhead is high, persistent connections help you considerably. • It may (and probably will) change the efficiency of the script, but should not change its behavior! $connect_id = ifx_pconnect();

  10. Reporting an Informix error <?php function chk_ifx_err1($result_id) { $err_string = ifx_error($result_id); /* Note: error If 1st character of err_string is not blank */ if ($err_string[0] != ' ') { printf("Informix error: %s", ifx_errormsg()); die; } } ?> User defined function Get the error string Check for blank End program Warning: E [SQLSTATE=IX 000 SQLCODE=-952] in /u/www/lapdog/php_demo/php_demo4.php3 on line 40Unable to connect to Informix databaseInformix error: User's password is not correct for the database server. Demo 4

  11. Selecting a count from a table <?php if ($connect_id) { $statmt_txt = "select count(*) count from vhs where type_code = 'ST1' "; $statmt_id1 = ifx_query($statmt_txt,$connect_id); // EXECUTE SQL if (!$statmt_id1) { chk_ifx_err1($statmt_id1); } // CHECK FOR ERROR $row = ifx_fetch_row($statmt_id1); // FETCH RESULT OF COUNT INTO ARRAY if (!$row) { chk_ifx_err1($statmt_id1); } // CHECK FOR ERROR $num_rows_selected = sprintf("%d",$row[count]); // FORMAT COUNT echo "<html>"; echo "$num_rows_selected rows selected <BR>"; // DISPLAY RESULT IN HTML echo "</html>"; } ?> Demo 5

  12. Selecting rows Output to a HTML table. Use display label for clarity <?php $statmt_txt = "select tape_num Tape_Number ,title from vhs where type_code = 'ST1' order by title"; $statmt_id = ifx_prepare($statmt_txt,$connect_id,IFX_SCROLL); // PREPARE if (!$statmt_id) { chk_ifx_err1($statmt_id); } // CHECK FOR ERROR $ret_val = ifx_do($statmt_id); // EXECUTE PREPARED STATEMENT if (!$ret_val) { chk_ifx_err1($statmt_id); } // CHECK FOR ERROR ifx_htmltbl_result ($statmt_id, "BORDER='1' CELLSPACING=0 CELLPADDING=2 BGCOLOR='cornsilk' ALIGN=center"); ?> See output on next slide Demo 6

  13. Result from using: ifx_htmltbl_result Demo 6

  14. Selecting rows using a cursorslide 1 of 2 <?php $statmt_txt = "select * from vhs where type_code = 'ST1' order by title"; $statmt_id = ifx_prepare($statmt_txt,$connect_id,IFX_SCROLL); // PREPARE if (!$statmt_id) { chk_ifx_err1($statmt_id); } // CHECK FOR ERROR $ret_val = ifx_do($statmt_id); // EXECUTE PREPARED STATEMENT if (!$ret_val) { chk_ifx_err1($statmt_id); } // CHECK FOR ERROR echo <table border=5 cellspacing=0 cellpadding=5 bgcolor=cornsilk>”; // HTML --- Continued on next slide --- Demo 7

  15. Selecting rows using a cursorslide 2 of 2 while ($row = ifx_fetch_row($statmt_id, ”NEXT” )) { $serial_id = $row[serial_id]; $type_code = chop($row[type_code]); $tape_num = $row[tape_num]; $title = chop($row[title]); $hours = $row[hours]; $comment = chop($row[comment]); echo "<tr>\n"; echo "<td><center>$serial_id</td>"; echo "<td><center>$type_code</td>"; echo "<td><center>$tape_num</td>"; echo "<td>$title</td>"; echo "<td>$hours</td>"; echo "<td>$comment</td>"; echo "<td>"; } echo "</table>"; ?> Create an “associative” array named “row”. Populate fields from associative array Use column names to identify fields. Use “chop” to remove trailing blanks if desired. --- Continued from previous slide --- Demo 7

  16. Can’t use placeholders <?php $statmt_txt = "select * from vhs where type_code = ? order by title"; ?> Invalid statement “placeholders” are currently not supported, but you can do this instead. <?php $my_code = “ST1”; $statmt_txt = "select * from vhs where type_code = ’ $my_code ' order by title"; ?> valid statement Demo 7

  17. Variables from outside PHPHTML Forms (GET and POST) • <html> • <form action="video_db2.php3" method="post"> • Tape Number: • <input type="text" name=”tape_num"> • <input type="submit"> • </form> • </html> <?php echo “The tape number is: $tape_num <br>”; ?>

  18. Inserting a row <?php if ($connect_id) { $sql_txt = "insert into vhs (serial_id, type_code, tape_num, title) values "; $sql_txt .= ” ($serial_id, \”$type_code\”, $tape_num, \”$title\”) "; $ret_val = ifx_query($sql_txt,$connect_id); // INSERT RECORD if (!$ret_val) { chk_ifx_err1($statmt_id); } // CHECK FOR ERROR } ?>

  19. Creating an associative array <?php $input_array = array ( "type_code" => $type_code, "tape_num" => $tape_num, "title" => $title, "hours" => $hours, "comment" => $comment ); ?> An associative array is an array which uses a string (instead of a number) to locate an element within the array.

  20. Stepping through an associative array <?php $type_code_array = array ( "MOVIE" => "Movies", "DS9" => "Deep Space 9", "ST1" => "Star Trek (Original)", "ST2" => "Star Trek the Next Generation", "VOY" => "Star Trek Voyager", "HOME" => "Home Movies", "MAX" => "Max Headroom", "OTHER" => "Other"); echo “<select name='type_code'> <option value=' '>Choose Type of Video”; while (list($key,$value) = each($type_code_array)) { if ($key == $type_code) { echo "<option value='$key' selected>$value\n"; } else { echo "<option value='$key'>$value\n"; } } echo "</select>”; ?> Create an associative array of type codes Step through the array

  21. Searching a string for a patternPerl-compatible Regular Expression functions <?php if (preg_match("/\|/",$query_string)) { // Search $query_string for a pipe … your code here … // Do this if pipe was found } ?> Search a string for the presence of a pipe symbol • Perform a regular expression match on a string. • Return (true) if match was positive. • The syntax for the pattern search closely resembles Perl.

  22. Creating an array from a pipe-delimited stringPerl-compatible Regular Expression functions <?php $query_string = “ 123 | 456 | 789 “; $pipe_list = preg_split("/\|/",$query_string); // Create an array of strings while ( list($key,$value) = each($pipe_list)) { // for each element in the array... … your code here … ?> Create an array from pipe demimited string • Split string by a regular expression. • Returns an array containing substrings. • The syntax closely resembles Perl.

  23. Call a functionpassing and returning variables Call a function Return multiple values <?php list($statmt_id,$cnt_found) = cnt_and_query("vhs",$where_clause); ?> Start function <?php function cnt_and_query ($table_name,$where_clause) { … more php code here … return array ($statmt_id2,$num_rows_selected); } ?> End function

  24. Breaking your program up into logical modules • <?php • require("common.inc"); • require("menu.inc"); • require("display_form.inc"); • require("query.inc"); • require("add.inc"); • require("modify.inc"); • ?> • Use include() and require() to reference program modules. • With include, statements are re-evaluated each time - almost like calling a function. • With require, statements are replaced by the required file when it is first encountered. Good for user defined functions.

  25. Scope of variables • Scope spans the entire module, including “included” and “required” files. • Variables defined outside of a function, can be referenced inside the function, if defined as globally available. • Any variable defined inside a function can only be used within that function, unless specifically defined as globally available in that function. • Globals can also be accessed via the special “GLOBALS” array. • See “demo8” for examples. global $variable5; $dbs = $GLOBALS["DATABASE"]; Demo 8

  26. Installing PHP • PHP (without Informix) is usually available on most Linux and Apache installations using ODBC. • Configuring PHP to use Informix is NOT a cakewalk. • Requires use of ESQL/C libraries to compile (free w/Client SDK). • Don’t reuse previous versions of Apache httpd.conf if you are upgrading Apache from a earlier version. • If you want the database to reside in a machine separate from the web server, you will need Informix Client SDK or I-Connect on the web server. • If you're using I-Connect on the deployment machine, you must compile on a machine with ClientSDK installed. And CSDK and I-Connect need to be in the same directory on the two different machines.

  27. Installing PHP with ApacheOverview • Aquire or download the software. • Unpack Apache and PHP tar-balls. • Set your Informix environmentals. • Pre-Configure Apache. • Configure, compile and install PHP • Configure, compile and install Apache. • Update Apache startup script with Informix environment • Update Apache httpd.conf • Re-start Apache web server. • Test.

  28. Installing PHP with ApacheAquire or download the software • Go to http://www.php.net • Click on: downloads • Click on: Complete Source Code • PHP 4.0.2 - 29 August 2000 • Go to http://www.apache.org • Click on apache server. • Click on download. • Click on apache_1.3.14.tar.gz

  29. Installing PHP with ApacheUnpack Apache and PHP tar-balls cd /usr/local gunzip apache_1.3.14.tar.gz tar xvf apache_1.3.14.tar gunzip php-4.0.2.tar.gz tar xvf php-4.0.2.tar

  30. Installing PHP with ApacheSet your Informix environmentals INFORMIXDIR=/opt/informix INFORMIXSERVER=myserver_shm ONCONFIG=onconfig.myserver PATH=$PATH:$INFORMIXDIR/bin LD_LIBRARY_PATH=$INFORMIXDIR/lib:$INFORMIXDIR/lib/esql export INFORMIXDIR INFORMIXSERVER ONCONFIG LD_LIBRARY_PATH Optional Don’t forget this one!

  31. Installing PHP with ApachePre-Configure Apache cd apache_1.3.14 ./configure --prefix=/usr/local/apache cd ..

  32. Installing PHP with ApacheConfigure, compile and install PHP cd php-4.0.2 ./configure --with-apache=../apache_1.3.14 --with-informix=$INFORMIXDIR make make install cd ..

  33. Installing PHP with ApacheConfigure, compile and install Apache cd apache_1.3.14 ./configure --prefix=/usr/local/apache \ --enable-module=rewrite \ --enable-shared=rewrite \ --enable-module=most \ --enable-shared=max \ --enable-module=so \ --activate-module=src/modules/php4/libphp4.a \ --enable-module=php4 make make install cd ..

  34. Installing PHP with ApacheUpdate Apache startup script with Informix environment cd /etc/rc.d/init.d • On Linux, update the apache start-up script “httpd” to include the Informix environment. • Or use apachectl. (Varies by platform.)

  35. Installing PHP with ApacheUpdate Apache httpd.conf cd /usr/local/apache/conf • Update the apache configuration file “httpd.conf”. • If you have upgraded Apache from a different version, do not use the previous “httpd.conf” file as a basis for the new one. AddModule mod_php4.c <IfModule mod_php4.c> AddType application/x-httpd-php4 .php4 AddType application/x-httpd-php4-source .phps </IfModule>

  36. Installing PHP with ApacheRe-start Apache web server On Linux: cd /etc/rc.d/init.d ./httpd restart Also, you can use: apachectl apachectl configtest

  37. PHP Resources PRSTechnologies, Inc. • http://www.prstech.com(downloads section) • This presentation • Entire source of videotape demo • Source of all examples • Tech-Notes article on PHP by Mario Estrada • Monterey Peninsula Ski Club - Cabin Reservation System by Jonathan Leffler • http://www.php.net • http://www.zend.com

More Related