Полезные примеры на PHP

Форум для программистов

Сообщение Sh0Ck_filE » Чт июн 17, 2004 7:10 pm

Короче вот после моих мытарств с базами решил я подсобить остальным форумчанам и поделиться своими изысканиями в области присобачивания и коннекта таких серверов как MySQL, Firebird и M$ SQL Server.
Прим.: Все скрипты есть "с подветкой" на мойм сайте в разделе "Статьи"
Скрипт #1
Код: выделить все
<html><head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html"; charset="KOI8-R">
<title>
mysql test page
</title></head><body>
<code>
<?php
/*
Пример работы с MySQL
Проверялся на Apache/2.0.49 (Win32) PHP/5.0.0RC3 + MySQL-4.0.20a
*/
   $host = 'localhost';
   $username='root';
   $password='';
   $dbh=0;
   printf ("MySQL server version: %s\n", mysql_get_server_info()); //просто выводим информацию о сервере
   $dbh = mysql_pconnect($host,$username,$password);   //соединяемся с сервером
   echo '<br>';
   if ($dbh!=0) {
       print "Succesful connection\n";
       }
   //mysql_create_db('newdatabase');   //такой способ создания базы тоже есть, но лучше делать запрос
   mysql_select_db("newdatabase");     //выбираем базу, с которой будем работать
   $result=0;
 
   $result = mysql_query("CREATE DATABASE newdatabase");   //создаём базу;
   if (result!=false) {
       print "Database created<br>";
       }
   else {
       print "Database not created!<br>";
       }
 
   $res = mysql_query("CREATE TABLE IF NOT EXISTS addr_book (name VARCHAR(50), icq_uin DECIMAL(9));");
   if ($res!=false) {
       print "Table created<br>";
       }
   else {
       print "Table not created because ";
       print mysql_error();
       print "<br>";
       }

   mysql_query("INSERT INTO addr_book VALUES('Sh0Ck_filE',265253365);");   //вставляем записи
   mysql_query("INSERT INTO addr_book VALUES('C001_haX0r',123456789);");
 
   print ("<table width=300 border=1>");
   $res = mysql_query("SELECT * FROM addr_book");
   while ($row = mysql_fetch_object($res)) {   //берём запись из базы в переменную $row
       echo '<tr><td width=50%>';
       echo $row->name;                //выводим поле ICQ_NUM
       echo '</td><td width=50%>';
       echo $row->icq_uin;             //выводим поле ICQ_NAME
       echo '</td></tr>';
   }
   print ("</table>");
   mysql_close($dbh);
?>
</code>
</body>
</html>

Добавлено:
Скрипт #2
Код: выделить все
<html><head><title>
odbc test page
</title></head><body>
<?php
/*
Пример работы с M$ SQL Server и ODBC в целом.
Проверялся на Apache/2.0.49 (Win32) PHP/5.0.0RC3 + MS SQL Server 2000
*/
$dsn="MQIS";        //это ODBC алиас; у меня распознался только системный
$user="sa";
$password="pass";
$sql="SELECT * FROM catalog";   //формируем запрос

if ($conn_id=odbc_connect("$dsn",$user,$password)){ //собственно сам процесс коннекта :)
       echo "connected to DSN: $dsn<br><br>";
       if($result_id=odbc_do($conn_id, $sql)) {    //экзекутим запрос по сформированному ID соединения
               echo "executing '$sql'<br><br>";
                       $num_fields=odbc_num_fields($result_id); //получаем число полей
                       if($num_fields>0){
                               echo "Number of fields:
$num_fields<br>";
                               for($i=1;$i<=$num_fields;$i++){

$field_name[$i-1]=odbc_field_name($result_id,$i);               //заполняем именами полей переменную
                               }
                               $num_rows=0;
                               while(odbc_fetch_row($result_id)){      //выдираем строчку(запись)
                                       for($i=1;$i<=$num_fields;$i++){

$result[$num_rows][$field_name[$i-1]]=odbc_result($result_id,$i);//короче тут мы считаем
                                       }                       //сколько всего записей
                                       $num_rows++;
                               }
                               echo "Number of rows: $num_rows<br>";
                       }else{
                               echo "not a field returned. <br><br>";
                       }
               echo "Results:<br>";
               echo "<table border='2' bgcolor=#F0F0F0>";
               for($i=0;$i<sizeof($result);$i++){
                       echo "<tr><td>";
                       while(list($key,$value)=each($result[$i])){ //пускаем цикл и
                               echo "$i:$key=$value<hr>";          //выводим запись
                       }
                       echo "</td></tr>";
               }
               echo "</table>";
               echo "freeing result<br><br>";
               odbc_free_result($result_id);                       //освобождаем переменную
       }else{
               echo "can not execute '$sql'<BR><BR>";              //просто обработка ошибки
       }
       echo "closing connection $conn_id";
       odbc_close($conn_id);                                       //закрываем измученное соединение :)
}else{
       echo "can not connect to DSN: $dsn<br><br>";                //ещё один обработчик ошибки  
}  

?>
</body>
</html>
<!--coloro:red--><span style="color:red"><!--/coloro-->"Для того чтобы быть человеком, надо им какое-то время не быть."<!--colorc--></span><!--/colorc--> ©<a href="http://zhurnal.lib.ru/b/brigadir_j_a/" target="_blank">Ю. А. Бригадир.</a>
<a href="http://counter.li.org/cgi-bin/runscript/display-person.cgi?user=437143" target="_blank">Registered Linux user #437143</a>.
Sh0Ck_filE
Генерал-лейтенант
 
Сообщений: 3474
Зарегистрирован: Пн апр 21, 2003 6:20 pm
Откуда: СССР
Пункты репутации: 0

Сообщение Sh0Ck_filE » Чт июн 17, 2004 7:22 pm

Скрипт #3 /* мой любимый Изображение */
Код: выделить все
<html><head><title>
firebird test page
</title></head><body>
<?php
/*
Пример работы с FireBird
Проверялся на Apache/2.0.49 (Win32) PHP/5.0.0RC3 + FireBird 1.5 SS
*/
   $host = 'localhost:/db/forum';
   $username='USER';
   $password='pass';
   $dbh=0;
   $dbh = ibase_connect($host, $username, $password);//коннектимся к базе данных
 
   //Таким макаром надо встявлять записи;
   //Но лучше всё же почитать мануал по SQL MySQL :)
   //ibase_query("INSERT INTO lists VALUES(265253365,'Sh0Ck_filE');");
 
   $stmt='SELECT * FROM LISTS';        //формируем запрос
   $sth = ibase_query($dbh, $stmt);    //собственно его проводим
   echo '<table border="1" summary="" align=left width=300>';
   while ($row = ibase_fetch_object($sth))//берём запись из базы в переменную $row
   {
       echo '<tr><td width=50%>';
       echo $row->ICQ_NUM;             //выводим поле ICQ_NUM
       echo '</td><td width=50%>';
       echo $row->ICQ_NAME;            //выводим поле ICQ_NAME
       echo '</td></tr>';
   }
   echo '</table>';
   ibase_free_result($sth);            //освобождаем переменную и память
   ibase_close($dbh);                  //закрываем соединение
//закрывать соединение не обязательно, оно закрывается автоматически, но лучше это
//делать чтобы выработалась привычка, т.к. при использовании mysql_pconnect это
//надо делать ОБЯЗАТЕЛЬНО!!!  
?>
</body>
</html>
<!--coloro:red--><span style="color:red"><!--/coloro-->"Для того чтобы быть человеком, надо им какое-то время не быть."<!--colorc--></span><!--/colorc--> ©<a href="http://zhurnal.lib.ru/b/brigadir_j_a/" target="_blank">Ю. А. Бригадир.</a>
<a href="http://counter.li.org/cgi-bin/runscript/display-person.cgi?user=437143" target="_blank">Registered Linux user #437143</a>.
Sh0Ck_filE
Генерал-лейтенант
 
Сообщений: 3474
Зарегистрирован: Пн апр 21, 2003 6:20 pm
Откуда: СССР
Пункты репутации: 0

Сообщение Mafin » Чт июн 17, 2004 7:41 pm

Это все примеры из учебников по РНР :))))
<span style='color:green'>Я здесь, я везде, я всегда...</span>
Mafin
Полковник
 
Сообщений: 1585
Зарегистрирован: Пт мар 29, 2002 9:53 am
Откуда: Центральная Чехия
Пункты репутации: 0

Сообщение Sh0Ck_filE » Чт июн 17, 2004 8:08 pm

2Mafin
Вообще то нет, я их сам писал :)
Хотя спасибо, что мои труды сочли сопоставимыми с примерами из книг! :)
---
А своими наработками влом поделиться?
<!--coloro:red--><span style="color:red"><!--/coloro-->"Для того чтобы быть человеком, надо им какое-то время не быть."<!--colorc--></span><!--/colorc--> ©<a href="http://zhurnal.lib.ru/b/brigadir_j_a/" target="_blank">Ю. А. Бригадир.</a>
<a href="http://counter.li.org/cgi-bin/runscript/display-person.cgi?user=437143" target="_blank">Registered Linux user #437143</a>.
Sh0Ck_filE
Генерал-лейтенант
 
Сообщений: 3474
Зарегистрирован: Пн апр 21, 2003 6:20 pm
Откуда: СССР
Пункты репутации: 0

Сообщение sm@rt » Пн июн 21, 2004 4:37 pm

<a href='http://xgroop.narod.ru/projects/javascript.html' target='_blank'>http://xgroop.narod.ru/projects/javascript.html</a>

Smart string ver. 0.2 948 b
Библиотечка работы со строками. Реализованные функции:
array explode (separator, string) - разбить строку по разделителю и запихать в массив
string implode (glue, pieces) - склеить массив pieces в строку через разделитель glue
int strpos (haystack, needle) - поиск подстроки needle в строке haystack


Smart array ver. 0.1 544 b
Библиотечка работы с массивами. Реализованные функции:
bool in_array (needle, haystack) - есть или нету элемент needle в массиве haystack
int array_search (needle, haystack) - номер элемента needle в массиве haystack (-1 если ине найден)
Красота и массовые расстрелы спасут мир.
sm@rt
Генерал-майор
 
Сообщений: 2935
Зарегистрирован: Вт фев 25, 2003 4:42 pm
Пункты репутации: 0

Сообщение SiMM » Пн июн 21, 2004 7:45 pm

2sm@rt, я что-то не понял, а каким тут бочком PHP? Да и в JS вроде что-то встроенное должно быть.
IRC: <a href='http://www.fileforum.ru/irc.php' target='_blank'>RUSNET #fileforum</a> (irc.tsk.ru:6669)
SiMM
Подполковник
 
Сообщений: 588
Зарегистрирован: Чт июн 13, 2002 8:41 am
Пункты репутации: 0

Сообщение Bio Wolf » Пн авг 02, 2004 6:51 am

Ну а теперь немного функций от меня - я ими сам пользуюсь в повседневной жизни, немного запутанно, но зато формировать простые запросы к БД SQL очень просто.
Функция - работает с активным соединением с БД SQL - не забудьте соедениться Изображение.
Код: выделить все
<?
/*
просмотр данных из базы
array preview(str $table, array $data, str $id=FALSE)
$table - таблица, $data - данные, $id - название поля уникального id поля в таблице (по умолчанию "ID")
$data[where][]=>"" - условия
   [select][]=>"" - поля
   [order]=>"" - поле сортировки
   [order_type]=>"" - тип сортировки
   [from]=>"" - выбрать начиная с ...
   [rows]=>"" выбрать строк ...
*/
function preview($table,$data,$id=FALSE) {
   global $sizeof;
   // получение размера запроса
   $ntable=explode(",",$table);
   $q = "SELECT ".($id?$id:"id")." FROM ".$table.(@$data["where"]?" WHERE ".implode(" and ",$data["where"]):"");
   $r = mysql_query($q) OR DIE("Query failed - preview1");
   $sizeof = mysql_affected_rows();
   @mysql_free_result($r); // освобождение ресурса

   $q = "SELECT ".implode(",",$data["select"])." FROM ".$table.
 (@$data["where"]?" WHERE ".implode(" and ",$data["where"]):"").
 (@$data["order"]?" ORDER BY ".$data["order"]." ":"").(@$data["order"]&&@$data["order_type"]=="DESC"?"DESC":"").
 (@$data["from"]?" LIMIT ".($data["from"]-1):"").
 (@$data["from"]&&@$data["rows"]?", ".$data["rows"]:"");
   $r = mysql_query($q) OR DIE("Query failed - preview2");
   while($l[]=@mysql_fetch_assoc($r)); // сбор результата в массив
   unset($l[(@sizeof(@$l)-1)]); // удаление пустой ячейки в конце результата
   @mysql_free_result($r); // освобождение ресурса
   if (!@$l) return;
   for ($i=0;$i<sizeof($l);$i++)
       foreach($l[$i] as $k=>$v)
           $l[$i][$k]=stripslashes($v); // расковычивание
   return $l;
}
?>

PS. побочный эффект возвращает общее количество записей для такого условия, без диапазона - это для автоматического построения линейки ссылок на страницы. если надо - выложу.

Пример - реально работающий на моем сайте:<a href='http://www.akipress.org' target='_blank'>АКИpress</a>
Код: выделить все
<?
//// получение сегодняшних новостей
$preview = array(
   "select"=>array("id","cat","title","date","DATE_FORMAT(date,'%d-%m-%Y %H:%i') as dates","main"),
   "where"=>array("date LIKE '".$endday["date0"]."%'","date < ".date("YmdHis")),
   "order"=>"date",
   "order_type"=>"DESC"
);
$allnews0=preview("имя_таблицы",$preview);
?>
Последний раз редактировалось Bio Wolf Вт авг 10, 2004 4:54 am, всего редактировалось 1 раз.
Спам придумали боги в отместку за наши молитвы.
Bio Wolf
Майор
 
Сообщений: 397
Зарегистрирован: Пн апр 08, 2002 9:23 pm
Откуда: KG
Пункты репутации: 0

Сообщение Sh0Ck_filE » Сб сен 04, 2004 7:35 pm

Гм. Решил выложить один скриптик со своего сайта - может будет полезно кому-нибудь.
В папку (по дефолту /fun) на сервере кидаются текстовики с именами в качестве заголовков табов на странице. Скрипт выдёргивает все имена изи папки, формирует на чистом html+css страничку с вкладками и по щелчку на табе выдаёт содержимое файла. Почему именно имена файлов как заголовки? Чтобы триста раз не делать fopen() и fgets(), а трогать содержимое всего одной функцией. Если вы не хотите его использовать, но заметили косяк в коде - напишите плиз, ведь этот скрипт используется по крайней мере у одного человека на сайте (у меня <!--emo&:)-->[img]style_emoticons/<#EMO_DIR#>/smile.gif[/img]<!--endemo--> ) и он будет очень грустить при глюке <!--emo&:)-->[img]style_emoticons/<#EMO_DIR#>/smile.gif[/img]<!--endemo-->
Код: выделить все
<table bgcolor=#A0A0A0 cellspacing=0 style="{border-spacing: 0px; border: 0px navy solid}"><tr>
<?php
if($handle = opendir("fun")){
   $n=0;
   while(false!==($filename=readdir($handle))){
       if(!(($filename=='.')||($filename=='..'))){
           $file[]=$filename;
           $n++;}}}                                                    
for($i=0;$i<=$n;$i++){?><td class="<?
   if(($_GET["story"]!=="")||($_GET["story"]<=$n)){
       if($_GET["story"]==$i){$story=$_GET["story"];?>tab-selected"><?
       }elseif(($i==0)&&($_GET["story"]>=$n)){$story=0;?>tab-selected"><?
       }else{?>tab-normal"><?}
   }?>
   <a href="index.php?page=programmerzfun&story=<?=$i?>" class=tablink><?=$file[$i]?></a>
</td><?}?>
</tr><tr><td class=tab-text colspan=<?=$n?>><?=file_get_contents("fun/".$file[$story+0])?></td></tr></table></div>
Последний раз редактировалось Sh0Ck_filE Сб сен 04, 2004 7:41 pm, всего редактировалось 1 раз.
<!--coloro:red--><span style="color:red"><!--/coloro-->"Для того чтобы быть человеком, надо им какое-то время не быть."<!--colorc--></span><!--/colorc--> ©<a href="http://zhurnal.lib.ru/b/brigadir_j_a/" target="_blank">Ю. А. Бригадир.</a>
<a href="http://counter.li.org/cgi-bin/runscript/display-person.cgi?user=437143" target="_blank">Registered Linux user #437143</a>.
Sh0Ck_filE
Генерал-лейтенант
 
Сообщений: 3474
Зарегистрирован: Пн апр 21, 2003 6:20 pm
Откуда: СССР
Пункты репутации: 0

Сообщение Night Angel » Вс сен 05, 2004 8:55 am

2Sh0Ck_filE
Если не инициализировать массив $files, то можно скрипту запросом передать массив, уже содержащий какой-то путь к файлу. И почитать что угодно можно.

$files = Array();
Auscultura et perpende - Выслушай и взвесь
Теперь я есть в <a href='http://www.livejournal.com/users/mrnight/' target='_blank'>LJ</a>
Night Angel
Полковник
 
Сообщений: 1160
Зарегистрирован: Ср сен 25, 2002 7:20 pm
Откуда: Belarus
Пункты репутации: 0

Сообщение Sh0Ck_filE » Пн сен 06, 2004 8:31 am

2Night Angel
А так намного быстрее работать будет? Мне кажется, что без инициализации пхп будет делать то же самое, только неявно... Хотя я могу ошибаться. <!--emo&;)-->[img]style_emoticons/<#EMO_DIR#>/wink.gif[/img]<!--endemo-->
<!--coloro:red--><span style="color:red"><!--/coloro-->"Для того чтобы быть человеком, надо им какое-то время не быть."<!--colorc--></span><!--/colorc--> ©<a href="http://zhurnal.lib.ru/b/brigadir_j_a/" target="_blank">Ю. А. Бригадир.</a>
<a href="http://counter.li.org/cgi-bin/runscript/display-person.cgi?user=437143" target="_blank">Registered Linux user #437143</a>.
Sh0Ck_filE
Генерал-лейтенант
 
Сообщений: 3474
Зарегистрирован: Пн апр 21, 2003 6:20 pm
Откуда: СССР
Пункты репутации: 0


Вернуться в Программирование

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15

cron