☯☼☯ SEO and Non-SEO (Science-Education-Omnilogy) Forum ☯☼☯



☆ ☆ ☆ № ➊ Omnilogic Forum + More ☆ ☆ ☆

Your ad here just for $2 per day!

- - -

Your ads here ($2/day)!

Author Topic: Разни беседи, спорове и мнения от отминалите години  (Read 39341 times)

0 Members and 46 Guests are viewing this topic.

Nadia

  • Сладко миньонче
  • SEO hero member
  • *****
  • Posts: 621
  • SEO-karma: +192/-0
  • Gender: Female
  • Миньонче
    • View Profile
    • СУ
Топлоизолация
« Reply #300 on: December 28, 2023, 10:22:02 PM »

Това за топлоизолация, някаква фирма...


"Фирма "Б. 2" ЕООД, град В. с дейност: поставяне на топлоизолации, строителни работи, "НОВА ТЕРАСА ЗА 7 ДНИ" и др. /АЛА БАЛА/.
Некачествена работа, недовършване на обектите, използване на евтини материали, некоректно отношение към клиента. НЕ правете грешката да се възползвате от техните услуги колкото и ниска да е цената и колкото и да са привлекателни условията които предлагат."

Коментари:

"Mitko
Еххх в днешно време трудно да попаднеш на читави майстори... И аз лично испатих много с 1 фирма за топлоизолации дори не помна как се казваше ама ръцете си оставиха. Ходих да им копувам материяли даже, че иначе щеше да се проточи още толква :D

Неизвестен
За нищо не стават тия. НЕ ГИ НАЕМАЙТЕ ЗА НИЩО НА СВЕТА. СПОСОБНИ СА ДОРИ И ДА НАПРАВЯТ БЕЛИ...

Атанас Динков
Изключително некачествена работа, бих казал даже некадърна. Много некоректни, ако не се бях намесил щях да бъда излъган и да платя неизвършена работа и не само. Това което е написано за 5 години гаранция е ЛЪЖА. От 4 месеца се опитвам да извикам някой да я уважи, тая все още някаква надежда..... Никакъв контрол от страна на господин Г. П. - който се подвизава като "управител". Обещаните 5 дни, който аз бях приел за 10 реални, станаха 40.......

Не ги наемайте в никакъв случай, ама в никакъв....

milena dobreva
az iskam da se opla4a ot firma t. pos16tiq na4in rabotiha!mn ne ka4estveno mn ne korektni k1m klientite!izolaciqta ne stava za ni6tu i ne spazvat dogovora! ne gi naemaite nikoga stra6no ne kad1rni alpinisti i maistori

persys
az sum sushto klient na firma B.

za otzivite napraveni po gore

moga da kaja :

che spored men sa smehotvorni i neistina

za 15 rabotni dni firmata ni izgradi 11 metrova terasa

i vutreshen remont na kuhnqta,kato tq be prevurnata v staq

sega s udovolstvie moga da kaja, che moiata terasa

e napravena i izglejda mnogo po dobre ot vsi4ki terasi naokolo

adresa mi e jk V. ... ,bl ... ,vx ...,ap ...

Атанас Динков
Persys,

Изчакай да завали силен дъжд или още по-добре сняг който да навява...... Надявам се, че поне при теб са си свършили работата, за която им е платено и няма да имаш проблеми. Ако ти се наложи да търсиш прословутата им гаранция, ще разбереш за какво говоря.

 недоволна варненка
Напълно съм съгласна с коментарите относно тази фирма "Б. 2". Некачествена работа и безхаберие! След като си получат договорената сума не идват да откорегират грешките си. Не ги наемайте в никакъв случай! Аз даже мисля да се обърна към комисията за защита на потребителя, защото мн пари дадох, а качеството е никакво!"
Mieux vaut être seul que mal accompagné.
 

Dimitroff

  • Разбирач & играч
  • SEO hero member
  • *****
  • Posts: 695
  • SEO-karma: +300/-3
  • Gender: Male
  • Разбирач, играч и предприемач.
    • View Profile
    • Много ме кефи тоя predpriemach!!!
Фалшив сайт!
« Reply #301 on: December 28, 2023, 10:30:23 PM »
За един фалшив сайтец:
"Сайтът е фалшив - това не е представител на апарати за България - ВНИМАВАЙТЕ !

Сайтът е фалшив - това не е представител на апарати за България - ВНИМАВАЙТЕ ! ... ... .com/"

Кофти уебмастъри си ги има! :(
Разбирач, играч, предприемач. Какво повече от това? ;)

Nadia

  • Сладко миньонче
  • SEO hero member
  • *****
  • Posts: 621
  • SEO-karma: +192/-0
  • Gender: Female
  • Миньонче
    • View Profile
    • СУ
Простичка, но важна анкета
« Reply #302 on: December 31, 2023, 12:11:46 AM »
Една простичка, но важна за всеки сайт анкета:

"Харесва ли Ви този сайт?

- Да, много ми харесва.
- Горе-долу, може и по-добре.
- Важното е, че го има :).
- Не, много е зле."
 :) :) :) :) :) :) :) :) :) :)
Mieux vaut être seul que mal accompagné.
 

Nadia

  • Сладко миньонче
  • SEO hero member
  • *****
  • Posts: 621
  • SEO-karma: +192/-0
  • Gender: Female
  • Миньонче
    • View Profile
    • СУ
Профили и смешки
« Reply #303 on: December 31, 2023, 12:55:01 AM »
Разни профили, които бяха понякога живи смешки  ;D


1. "Възраст:   <!--age->19  години.
Зодия:  <!--zodia->rak
E-mail:  <!--email-> ...
Хоби:  <!--hobi->da se osyvarshenstvam v tova koeto moga ...
Интереси:   <!--interesi->interesuvam se ot m/ynarodnite konflikti, ot vselenata, ot psihikata na momichetata ...


Повече за мен
 
mnoo sa biim tuka"

2. "Възраст:   <!--age->24  години.
Зодия:  <!--zodia->овен
E-mail:  <!--email->...
Хоби:  <!--hobi->жени, жени, жени
Интереси:  <!--interesi->интернет


Повече за мен
 
Забавен и общителен тип, без никакви задръжки... :) Обичам жените, PC и електронната музика.
"
3. "Възраст:   <!--age->25  години.
Зодия:  <!--zodia->Водолей
E-mail:  <!--email-> ...
Хоби:  <!--hobi->Акваристика
Интереси  <!--interesi->Компютри, програмиране, спорт, музика


Повече за мен
 
 Около мен няма нищо кои знае колко интересно.. :) всичко си е normal. С мой приятел подържаме този сайт и за да бъда 'за пример' :) създадох тази страничка с програмата предложена в секцията 'Лични страници'. Естествено, всеки може да ми пише на горепосочения mail, за каквото и да става въпрос."

4. "Възраст:   <!--age->24  години.
Зодия:  <!--zodia->овен
E-mail:  <!--email-> ...
Хоби:  <!--hobi->риболов
Интереси  <!--interesi->компютри, интернет, музика


Повече за мен
 
Повече за мен? Ами няма повече.. :) Само това за сега. Грижа се за сайта ... .com и най-вече за IRC канал # ... . Ако имате някакви въпроси задайте ги на горепосочения e-mail адрес."

5. "Възраст:   <!--age->21  години.
Зодия:  <!--zodia->Скорпион
E-mail:  <!--email-> ...
Хоби:  <!--hobi->Internet
Интереси:  <!--interesi->Жените


Повече за мен
 
Казвам се ... ... ... .Роден сам в град Г. Живея в град С. и уча висше трета година в град В. Обичам да се занимавам с компютри и главно с интернет.Обичам хората които ме обичат и също така уважавам хората които ме уважават но мразя лъжата и двуличието повече от всичко на света.Липсва ми любов.Липсва ми ужасно!!!"

5. "

Възраст:   <!--age->16  години.
Зодия:  <!--zodia->рак
E-mail:  <!--email->...


Стихчета
 
 Копнеж

Вятърът в косите ми свисти,
а в очите ми сълза блести,
ден и нощ се чудя аз дали
към мен изпитваш нещо ти!
Всяка вечер аз мечтая
да се запозная с теб,
може даже името ти
да не зная,
но пак се чувствам
свързана с теб.
Да си близо силно аз желая
нещо в теб ме заплени,
наистина единствено
за тебе си мечтая,
сърцето ми не спира
да тупти.
Надали ще мога да забравя
тези огнени очи,
погледа отправен към
безкрая - от това,
че теб те няма
наистина боли!!!

Откровение

Иска ми се да забравя тоя гаден ден,
в който те видях и нещо трепна в мен,
ти ме омагъоса - взе моята душа,
но прозрачните окови не можах да разруша.
Щом те видя раждат се мечти без брой,
Искам да обичам и ти да бъдеш мой,
дните отминават, времето лети,
но как да те обичам щом не искаш ти?
Ако трябва ще си тръгна аз от твоя живот
и без това не свързваш с мен думата любов,
а без любов животът е мъгла,
мъгла, която ме обгръща и ме скрива от света.
Ако нямаш чувства - моля те не ме лъжи,
ако ме видиш ти да плача - по-добре ме остави,
нека чрез горчивите сълзи
да излея чувствата, които в мен разпали ти!

"


 :) ;)
Mieux vaut être seul que mal accompagné.
 

Nadia

  • Сладко миньонче
  • SEO hero member
  • *****
  • Posts: 621
  • SEO-karma: +192/-0
  • Gender: Female
  • Миньонче
    • View Profile
    • СУ
Re: Профили и смешки
« Reply #304 on: December 31, 2023, 11:55:04 PM »
Отмарям малко предновогодишно и продължавам с профили и смешки, но не че всичките са смешни.

 6. "Възраст:   <!--age->20  години.
Зодия:  <!--zodia->Oven
E-mail:  <!--email-> ...
Хоби:  <!--hobi->Internet,Football,
Интереси:  <!--interesi->Vsqkakvi :)


Повече за мен
 
Kazvam se ... ... .Ot grad K. sam,owner v kanala na grada # ...  .Student v Tehni4eskiq Universitet grad S.,spec. Komunikacii v bita i biznesa.Pove4e za men /q ...
"


 7. Някакъв ИРК-канал:

"Възраст:   <!--age->na okolo 8  месеца.
Зодия:  <!--zodia->....
E-mail:  <!--email-> ...
Хоби:  <!--hobi->....
Интереси  <!--interesi->.....


Повече за IRC канала
 
Ami...kanala e syzdanen ot priqteli za priqteli...
na okolo 8 meseca e...drygo drygo..
elate i shte vidite :)
Eto nqkoi snimki na xora koito redovno poseshtavat
# ... ... :

1.AirMonkey(17god. gr Varna)
2.Pak AirMonkey :)))
3.AIR_MAN(17 god gr Varna)
4.FREEJACK(silistra)
5.BOBO_101(Bobo-USA)
6.kobe__8(Ivo gr Varna)
7.originalen_nick(Viktor 19god gr Varna)
8.Toli(23god gr Pleven)
9.^3e|\eHoOkaTa^(15god gr Varna)
10.Luca(28god Italiq)"

 8. "       Възраст:   <!--age->17  години.
Зодия:  <!--zodia->Скорпион
E-mail:  <!--email-> ...
Хоби:  <!--hobi->пиша фантастика
Интереси:  <!--interesi->програмиране, писане на игри, 3D графики


Повече за мен
 
 Слушам предимно рок и метал, занимавам се спрограмиране от около 3 години. В свободното си време пиша фантастика.
Жиевя в С., уча в НПМГ, специалност физика.
Не се притеснявйте да ме потърсите по E-mail
Можете също така да посетите моя сайт:

...
"
 9. "Възраст:   <!--age->22  години.
Зодия:  <!--zodia->Лъв
E-mail:  <!--email-> ...
Хоби:  <!--hobi->Sex, Sex, Sex
Интереси:  <!--interesi->Music, Internet, EXTREM SPORTS, MOTORCYCLES


Повече за мен
 
Moga li vsi4ko da znam :))))
"
 10. "Възраст:   <!--age->26  години.
Зодия:  <!--zodia->Козирог
E-mail:  <!--email-> ...
Хоби:  <!--hobi->PC, хаус-музика
Интереси:  <!--interesi->Музика, коли, ски"
Mieux vaut être seul que mal accompagné.
 

Dimitroff

  • Разбирач & играч
  • SEO hero member
  • *****
  • Posts: 695
  • SEO-karma: +300/-3
  • Gender: Male
  • Разбирач, играч и предприемач.
    • View Profile
    • Много ме кефи тоя predpriemach!!!
Аз, да ви се похваля така де, вече ограничих пиенето, дори за Нова година (!!!) и затова мога да предоставям архивни неща; да допринасям ехей...

Малко за програмирането, па макър и от преди много години:

"Голяма част от синтаксиса си PHP наследява от C, но все пак той е създаван за писане на Web скриптове
Въведение: добавяне на PHP код
Можете да добавяте блокове PHP код към същестуващи HTML документи, оставяйки HTML кода незасегнат. Също така можете да вкарвате блокове HTML код в PHP кода - това е удобно, когато трябва да изведете на екрана голямо количесто HTML код. Началото на PHP код се отбелязва с <?php, а края - с ?>. Между тези тагове можете да имате само PHP код, но за сметка на това можете да ги разполагате където си поискате. Това означава че можете да имате PHP код между таговете <TD> и <TD>, а също така да прекъснете PHP кода посредата на условен оператор за да изведете блок от HTML код. А след това да се върнете към същия този условен оператор. С други думи когато използвате множество тагове <?php ?> кода продължава от там, където е свършил. Ако трябва да бъдем точни, целия документ представлява един общ код - HTML кода е просто е режим, в който на екрана единствено се извежда HTML код - така не трябва да използвате специален оператор за всеки един изведен ред.
Променливи
Променливите са едно от нещата, с които се започва изучаването на всеки език. В PHP променливите нямат определен тип данни. С други думи типа на променливата е същия, като типа на последно присвоената й стойност. Можете последователно да присвоявате числа, низове и дори масиви към една и съща променлива.
Друго важно нещо за променливите е, че не е необходимо да ги декларирате. Ако се опитате да използвате променлива, на която не е присвоена стойност, то PHP автоматично ще я счете за 0 или празен низ, в зависимост дали очаква да му бъде подадено число или низ. Всички променливи започват със символа $. Когато в низ, затворен в кавични използвате променлива, PHP я замества с нейната стойност. Тук идва и голямата разлика между низовете, затворени в апострофи или кавички. Ако са затворени в кавички, то низовете се интерполират - т.е. всички променливи се заменят с техните стойности, управляващите символи като \n и \t се изпълняват, а ако приложите някакви действия над променливите - като умножение - всички изчисления се осъществяват преди извеждането на крайния низ. В низовете, затворени в апострофи, се заместват само определени символи с техните еквиваленти, например \' със '

Важно е да се отбележи, че в PHP имената на променливите са чувствителни към главни/редовни букви. С други думи, $dog, $Dog и $DOG за три различни променливи

Оператори
PHP е наследил аритметичните оператори от C. Това са:
+ събиране
- изваждане
* умножение
/ деление
++ увеличава текущата стойност на променливата с единициа
-- намалява текущата стойност на променливата с единица
= присвояване
+= прибавя към текущата стойност на променливата
-= изважда от текущата стой
Извеждане на информация на екрана
Общо за всички езици за програмиране в Web е, че информацията се извежда в Web браузър и следователно трябва да извеждате HTML код. Същестуват два оператора, които можете да използвате за да изведете нещо на екрана. Това са echo и print Няма значение кой от тях ще използвате - просто след него поставяте в кавички това, което искате да се изведе. Например:
print "<B>My very first PHP page</B>"

Събиране на низове
Макар и числата да се събират чрез оператора +, то за низовете не е препоръчително използването му. Вместо това съществува специален оператор - .. Също така всила е и оператора .=, който прибавя слеващия го низ към текущата стойност на променливата. Т.е. ако имате кода:
$dog="Dog";
$dog.=" and Cat";
То променливата $dog ще съдържа низа "Dog and Cat"

От кода по-горе може да се види и още нещо важно - всеки оператор завършва с точка и запетая.

Условен оператор

Условния оператор е задължителна част от всеки един език за програмиране. PHP запазва условния операор от C - if. Неговия синтксис е:

if(условие)
{код, който се изпълнява, ако условието е изпълнено}
else
{код, който се изпълнява, ако условието не е изпълнено}

Частта else не е задължителна.

В качеството на условие вие можете да проверявате стойностите на една или повече променливи. Тук е момента да споменем операторите за сравняване и логическите оператори. В PHP съществуват следните оператори за сравняване:
== - равно на
< - по-малко
> - по-голямо
<= - по-малко или равно на
>= - по-голямо или равно на
!= - не равно на

В PHP има още един оператор за сравнение - ===. Той е изпълнен, само ако двете стойности са равни и от един и същи тип. Какво означава това? В PHP няма типове променливи - само типове данни. Следователно, можете да присвоите на променливата $first=2, а на $second="2". Ако проверите дали са равни чрез
if ($first==$second)
то условието ще е изпълнено. От друга страна едното е низ, другото е число. За оператора === условието няма да е изпълнено - трябва да сравнявате два низа или две цели числа

Логическите оператори се използват за проверка стойностите на повече от една променлива. Те включват логическото "и" и логическото "или"
&& - "и" - условието е изпълнено, ако и двете сравнения са вярни
|| - "или" - условието е изпълнено, ако едно от двете сравнения е вярно
! - "не" - обръща верността на следващия го израз (т.е. ако го следва "вярно" става "невярно и обратното; например условието !(6<5) е изпълнено)

Избор между повече от един вариант

Операторът if е полезен, когато трябва да изпълните едно действие, ако дадено условие е изпълнено, и друго - ако не е. Но какво ще стане, ако ви трябват 10 различни действия в зависимост от стойността на променливата. Бихте могли да напишете 10 последователни оператора if..else но това решение е тромаво и трудоемко. Затова PHP ви предоставя оператора switch, който има следния синтаксис:

swithc ($променлива){    case условие: код;    break;    case условие: код;     breaк;    default: код; }

Така можете да изпълните неограничен брой кодове при различни изпълнени условия за една и съща променлива. Операторът break служи за да прекъсне изпълнението на switch, в противен случай след изпълнението на което и да е условие, ще се изпълнят всички по-нататъчни блокове код. Което понякога е много полезно :) Кода след default се изпълнява в случай че нито едно от условията е изпълнено. Ето един пример:
switch ($Grade) {
   case $Grade>70:
      echo ("You got an A.");
      break;
   case $Grade>60:
      echo ("You got a B.");
      break;
   case $Grade>50:
      echo ("You got a C.");
      break;
   case $Grade>40:
      echo ("You got a D.");
      break;
   case $Grade>25:
      echo ("You got an E. ");
      break;
   default:
      echo ("You failed");
}

Можете да използвате директно стойности, в случай че не ви трябва сравнение.
switch ($Grade) {
   case 70:
      echo ("You got an A.");
      break;
   case 60:
      echo ("You got a B.");
      break;
   case 50:
      echo ("You got a C.");
      break;
   case 40:
      echo ("You got a D.");
      break;
   case 25:
      echo ("You got an E. ");
      break;
   default:
      echo ("You failed");
}

Но блоковете код ще се изпълнят само ако $Grade е точно 70,60,50,50 или 25 - ако е 26 ще се изпълни кода на defaulf. Също така можете да използвате низови стойности - само не забравяйте да ги затворите в кавички

Циклични оператори

Цикличните оператори за изключително полезни, когато трябва да повторите един и същи код няколко пъти и заедно с условните оператори са част от всеки един език. PHP предоставя следните циклични оператори:

while (условие){
код
}

Кодът в този случай ще се изпълнява докато е изпълнено условието. Ако първоначално условието не е изпълнено, то и кодът никога няма да се изпълни. Важно е да променяте стойността на условието вътре в цикъла - иначе никога няма да излезете от него. Ако искате кодът първо да бъде изпълнен, а след това да се провери условието и евентуално да се изпълни отново, трябва да използвате следващия оператор:

do{
код
}
while (условие);

Цикличния оператор for ви дава значително повече контрол. Синтаксиса му е:

for (start; condition; end){
код
}

Кодът в start се изпълнява само веднъж при влизане в цикъла и обикновени се използва за инициализация на променлива, която да следи изпълнението на цикъла. condition е условието - докато то е изпълнено, цикъла продължава да се повтаря. Кодът в end се изпълнява накрая на всеки цикъл и обикновено се използва за промяна на условието. Обърнете внимание, че във всеки един от блоковете start и end можете да имате повече от един оператор, разделени със запетая. Ето един пример:

for (i=0, j=100; i<10; i++, j-=10){
код
}"
Разбирач, играч, предприемач. Какво повече от това? ;)

Dimitroff

  • Разбирач & играч
  • SEO hero member
  • *****
  • Posts: 695
  • SEO-karma: +300/-3
  • Gender: Male
  • Разбирач, играч и предприемач.
    • View Profile
    • Много ме кефи тоя predpriemach!!!
Пиейчпи
« Reply #306 on: January 01, 2024, 09:40:29 PM »
Още за пиейчпи, ръйш ли... :)

Учете се, да сте преди години:

В PHP променливите нямат тип - една и съща променлива би могла първоначално да е числова, а в последствие да съдържа низ. Същата тази променлива би могла да съдържа и масив. За да създадете масив е достатъчно просто да сложите индекс на дадена променлива. В такъв случай вие веднага записвате стойност за този индекс и превръщате променливата в масив. Масивът се обозначава с квадрарни скоби, между които се вписва индекса. Принципно съществуват два типа масиви - обикновени масиви и асоциативни масиви, наричани още хеш-таблици. Асоциативни масиви например има в Perl. В PHP, който до голяма степен е наследил синтаксиса си от C и Perl, масива е едновременно обикновен и асоциативен. И можете да използвате една и съща променлива за двата типа - просто декларирате примерно масива $array, присвоявате съответните стойности на $array[1], $array[2] и $array[3] и го третирате като обикновен. Обикновения масив има предимството, че можете да използвате променлива в качеството на индекс и по този начин в рамките на един цикъл да прочетете или присвоите стойности на всички елементи. След това взимате същия този масив и присвоявате стойности за $array["first"], $array["second"] и $array["third"]. Вече имате масив с три елемента и три ключа. По същия начин можете да създавате многомерни масиви. Просто присвоявате стойност на $array[4][1]. Ако присвоите стойност на $array2[10], тогава имате масив с един елемент; но ако се опитате да използвате първите 9 елемента PHP няма да даде грешка - просто ще ги приеме за 0.

PHP предлага богат набор от функции за обработка на масиви - някои специално за улесняване на работата с асоциативни масиви, други универсални за двата типа. Ще започна с няколко функции, които връщат масив и често се използват за неговото създаване. Първата от тях е функцията array(), която приема неограничен брой аргументи и връща масив със записани съответните стойности от аргументите. Ето един пример:
$array = array("not used", "first", "second", "third") Този код създава масив с елементи $array[0] = "not used", $array[1] = "first", $array[2] = "second" и $array[3] = "third". Обърнете внимание че по подразбиране, първия индекс на масива е 0, а не 1.
Друга функция, връщаща масив, е range, която приема два аргумента - начална и крайна стойност, и връща масив, съдържащ стойностите между началната и крайна стойност, определени от аргументите. Ако не желаете стойностите в масива да са поредни числа, можете да определите трети аргумент, който дефинира разликата между две поредни стойности. Т.е. ако извикате функцията range(2,10,2) ще получите масив, съдържащ четните числа от 2 до 10. Интересно за тази функция е, че в качеството на па първите два аргумента може да използвате букви. Ако извикате например функцията range('a', 'z') то тя ще върне масив, съдържащ английската азбука :)
С помощта на array() може да се създаде и асоциативен масив - просто трябва да укажете двойките ключ - стойност:
$array = array("first" => "1st", "second" => "2nd", "third" => "3rd")

Едно от големите предимства на масивите е възможността да преминете през всички елементи. Най-простия начин е просто да използвате един цикъл for и в него да използвате променлива в качеството на индекс на масива. Например:

for(i=0; i<10; i++){
echo "<BR>$array";
}

Този метод обаче е неприложим за асоциативен масив. PHP предоставя специални функции за работа с асоциативни масиви. Обърнете внимание, че обикновения масив също може да бъде третиран като асоциативен, в който ключовете са съответно 1, 2, 3 и т.н.

PHP използва указател за да определи текущия елемент от масива. PHP помни всички елементи в реда в който да дефинирани и може да премине последователно през всеки от тях. За да получите текущия елемент, трябва да използвате функцията current. Ако все още не сте извиквали никоя функция, променяща текущата позиция, то current() ще върне първия елемент от масива. Фунцкията next() премества указателя с един елемент напред и връща съотвения елемент; prev() премества указателя с един елемент назад. И трите функция взимат като единствен аргумент масив, с който да работят. Функцията key връща ключа (или индекса) на текущия елемент. Функциите reset() и end() приемат като аргумент масив и слагат указателя съответно на първата или последната позиция.

Друга функция за преминаване през масива е each() Тя приема единствен аргумент масив и връща друг масив, съдържащ двойката стойност-ключ на текущата позиция, след което премества текущата позиция с едно напред. Обърнете внимание че за разлика от next() и prev(), функцията променя позицията след като е върнала стойноста. Върнатия масив съдържа 4 стойности, като елементите 0 и "key" съдържат ключа, а 1 и "value" - стойността (т.е. функцията връща двойката ключ стойност както като асоциативен, така и като обикновен масив)

Сортиране на масиви

Функцията sort() приема един аргумент - масив и връща същия масив, в който стойностите обаче са подредени по азбучен ред. Ако подадете асоциативен масив обаче, клювовете ще бъдат заменени с поредни номера. За асоциативни масиви съществува функцията asort() която прави същото, което и sort(), но запазва имената на ключовете. Ако искате да подредите масива в обратен на азбучния ред, можете да използвате функциите rsord() и arsort(). Още една възможност при сортирането е да сортирате не по стойност, а по ключ. Затова служи функцията ksort(), която приема асоциативен масив и го връща същия, но двойките ключ-стойност са подредени спрямо ключовете по азбучен ред. Съотвено можете да използвате и функцията krsort() за сортиране на масив по ключ в обратен на азбучния ред. За да обърнете реда на елементите в масива, можете да използвате функцията array_reverse(), която приема като единствен аргумент масив и врyща пренаредения масив

В някои езици същестуват стекове. Стековете са друг тип масиви, в които важи принципа "Последен влязъл - пръв излязъл". Т.е. можете последователно да добавяте стойности към масива но в даден момент можете да извлечете само последната въведена стойност. За да извадите първата стойност, трябва да извадите една по една всички следващия стойности. Подобно поведение понякога е изключително полезно и PHP го реализира като част от масива, като просто предоставя функции за добавяне на елемент и изваждане на последния елемент. PHP стига още по-далеч - предоставя функции за добавяне в началото на масива (при което елементите ще бъдат преномерирани за да запазят първия елемент с индекс 0) и изваждане на първия елемент от масива (при което отново следва преномерация на елементите). Характерното за изваждащите функции е, че те променят масива - функцията премахва елемента от масива и връща същия този елемент. Функцията за добавяне на елемент към масива е array_push() - тя приема два или повече аргумента, като първия е масив, към който да добави елементи, а следващите - съответните елементи. Функцията за изваждане на последния елемент е array_pop() която приема единствен аргумент масив и връща последната стойност от него. Фунцкията за добавяне в началото на масива е array_unshift() и е аналогична на array_push(); функцията за изваждане на първия елемент е array_shift()

PHP предоставя още много функции за масиви, но аз ще разгледам само най-често използваните от тях. Функцията count() приема като аргумент масив и връща броя на стойностите в него.
array_keys() приема един или два аргумента, първия от които е масив. Ако не е определен втори аргумент, функцията връща масив, съдържащ всички ключове в масива (включително и числовите индекси). Ако е посочен втори аргумент, функцията връща масив, съдържащ тези ключове, чиито стойности са равни на втория аргумент
array_values() действа по същия начин, като array_keys(), но връща масив със стойностите от подадения. При нея не съществува втори аргумент (би било безсмислено да извлизате стойноста за определен ключ, защото можете да го направите с директно обръщение към масива, например $array[100])
Интересна е функцията array_count_values() Тя приема аргумент масив и връща масив, в който ключовете са стойностите от масива, а стойностите - колко пъти е срещана дадената стойност в подадения масив. Т.е. извикването на функцията $array = array (1, "hello", 1, "world", "hello") ще върне масив, с елементи $array[1]=2, $array["hello"]=2 и $array["world"]=1
Много интересна е и функцията array_flip() която приема масив и връща масив, в който ключовете са стойностите от подадения масив, а стойностите - ключовете от подадения масив. С други думи функцията връща масив, в който са разменени двойките ключ-стойност. Ако в подадения масив има няколко еднакви стойности, следователно в поличения масив няколко еднакви ключа, то във върнария масив като стойност се записва посления срещнат ключ с дадената стойност
array_key_exist() приема ключ и масив в който да търси и връща true, ако в масива същестува такъв ключ. В противен случай връща false.
in_array() прави същото, но проверява дали първия аргумент присъства в стойностите на масива
array_search() отново приема стойност и масив. За разлика от in_array() функцията връща ключа, съответстваща на стойността, определене от първия аргумент, ако тя е намерена или false в противен случай.

Понякога е полезно да имате масив с произволни стойности. Можете да използвате функцията rand() при създаване на масива, за да получите произволни стойности; PHP предоставя две подобни функции, които имат за цел обаче да върнат произволен елемент от вече въведен масив. Функцията shuffle приема като аргумент масив и подрежда стойностите в него в произволен ред. Обърнете внимание, че за разлика от повечето функции тази не връща масив, а променя оригиналния. Функцията array_rand приема два аргумента, първия от които масив а втория - количество ключове, които да бъдат избрани. Връща масив, съдържащ толкова елементи, колкото са определени от втория аргумент на функцията и съдържащ произволно избрани ключове.
Разбирач, играч, предприемач. Какво повече от това? ;)

Dimitroff

  • Разбирач & играч
  • SEO hero member
  • *****
  • Posts: 695
  • SEO-karma: +300/-3
  • Gender: Male
  • Разбирач, играч и предприемач.
    • View Profile
    • Много ме кефи тоя predpriemach!!!
Паскал и Делфи
« Reply #307 on: January 01, 2024, 09:46:52 PM »
Сега, да се разберем че Delphi е среда за разработка и компилиране на програми, написани на Object Pascal език за програмиране. После да няма неразбрал или неразбрала или пък неразбрали. ;D

Object Paskal
или как е реализирано обектно-ориентираното програмиране в Delphi

Дълбоко в основата на Delphi стои езика Paskal. Това е една от причините Delphi понякога да бъде пренебрегван като среда за разработка. Но както в основата на Visual C++ не стои C, така и Delphi е базирано на един нов език, изграден на основата на Paskal но със значителни подобрения - Object Paskal. Delphi е предназначен за писане на софтуер под Windows - поради тази причина е наложително езика, на който е изграден, да покрива някои стандарти. Съществува една огромна разлика между програмирането под DOS и под Windows - дори и на един и същи език. А целта на Delphi е да улесни максимално разработката на Windows приложения. Затова още с първата версия на Delphi е представен езика Object Paskal - обектно-ориентирана версия на своя предшественик Paskal. Макар с развитието на Delphi да се развива и Objcet Paskal, аз тук ще представя ключовите концепции на езика, без да се впускам в излишни подробности. На първо място Object Paskal е обектно-ориентиран език, затова разбирането на обектно-ориентираното програмиране е важно за разбирането на Delphi; разбирането на Object Paskal е важно за ефективното разработване на софтуер с Delphi и е задължително за създаването на собсвтени контроли.

Винаги, когато пиша за един обектно-ориентиран език, започвам с това какво значи обектно-ориентиран. Програмите в Windows отговарят на събития - щракване с мишката, натискане на клавиш от клавиатурата или нещо друго. Без тези действия програмата не прави нищо - просто си стои на екрана и чака потребителя да предприеме нещо. Т.е. програмиста трябва да напише код за всяко едно събитие, на което отговаря програмата - този процес се нарича обработка на събитие. Всеки един елемент в програмата е обект; обект е бутона, текстовото поле, самия прозорец; главното меню на програмата е обект, обект е и всеки елемент на менюто. Най-общо казано, всеки един компонент, който сложите във формата по време на проектиране на приложението, както и самата форма, е обект. Обектът се състои от променливи (които се наричат свойства), процедури и функции (които се наричат методи). Самия обект представлява екземпляр на клас. Т.е. можете да имате един клас и неограничено количество обекти от този клас. С други думи, класа е тип данни; обектът е променлива от този тип. Следователно, класовете са в основата на обектно-ориентираното програмиране.

Ако сте разглеждали кода, генериран от Delphi още при създаването на формата, вероятно сте забелзали ключовата дума class. Тя показва началото на дефиницията на клас. Класовете, както и всеки друг тип данни, се декларират в частта type на кода. Край на дефиницията на клас се указва по стандартния начин - с end;. В дефиницията на класа се включват всички негови променливи, както и прототип на процедурите и функциите. Деклариране на прототип означава, че в класа записвате само името на процедурата или функцията, приеманите аргументи и, ако става въпрос за функция, типа на връщаната стойност. Самата функция с пълния й код се декларира извън класа. Ето пример за декларацията на клас:

person = class

gender: (male, female);
age: integer;
name: String;
familyName: String;
procedure IncreaseAge;
function GetAge: integer;
end;
За класовете са характерни два специфични типа процедури - констукрора и деструктора. Конструктора е процедура, която се извиква при създаване на обекта, деструктора - при неговото унищожение. Обикновено за име на конструктор се използва Create, а за деструктор - Destroy. Тези две процедури се дефинират с ключовите думи constructor и destructor респективно. Съответната ключова дума не се слага пред procedure а вместо нея. Работата на конструктора и деструктора е да резервират и освободят паметта, необходима за съхраняването на обекта. Но не е необходимо да пишете код за това - Delphi автоматично отделя необходимата памет при извикването на конструктор. Затова трябва да предефинирате стандартния конструктор само ако искате да осъществите някакаква инициализация на свойствата - подразбиращия се конструктор инициализира всички стойности на 0.

След като сте дефинирали методите, трябва и да ги напишете. Реализацията на методите се извършва извън самия клас - в класа само се дефинира името на метода и какви аргументи приема, както и типа на връщаната стойност, ако става дума за функция. Дефинирането става чрез написването на името на метода, предхождан от името на класа, разделени със запетая. Т.е. методите на класа в предишния пример ще се напишат така:

procedure Person.IncreaseAge;
begin
//код на процедурата
end;

function Person.GetAge:Integer;
begin
//код на функцията
end;

Друго основно понятие в обектно-ориентираното програмиране е капсулирането. Това означава скриването на определени свойства от света извън класа. Например ако имате клас със свойство, съдържащо датата, безсмислено е да оставяте достъпа до него свободен - невнимателния потребител може да му присвои датата 30 февруари и да предизвика грешка. Много по-добра практика е предоставянето на метод, който да проверява валидността на данните и тогава да променя свойствата, отколкото да се позволява директната промяна. Всяко едно свойство или метод може да се декларира като private, public или protected, като се използва една от тези ключови думи пред него (всъщност всяка от тези думи декларира всяко свойство или метод след нея като съответен тип, докато не бъде срещната някоя от другите думи или не се стигне до края на дефиницията на класа). Ако дадено свойство или метод е декларирано като public, то то е общодостъпно - т.е. може да бъде четено и променяно от всяка една функция, независимо дали е декларирана в или извън класа. Ако е декларирано като private, то само методите на конкретния клас имат достъп до свойството. Когато е декларирано като protected, до него имат достъп както методите на дадения клас, така и всеки друг клас, който го наследява. Тук стигаме до една от ключовите концепции на обектно-ориентираното програмиране: наследяването. Всеки клас може да наследи друг клас, при което получава всички методи и свойства на родителския. Това е изключително полезно, когато трябва да имате няколко класа, всеки от които се различава по няколко елемента от предишния. Вместо всеки път да декларирате едни и същи свойства и методи, можете да дефинирате един клас като родителски и в дъщерния само да добавите необходимите ви елементи. Достатъчно е само при декларирането на клас да определите и неговия родителски клас и вече имате копие на всички свойства и методи. Ако сте разглеждали кода, генериран от Delphi, сигурно сте забелязвали декларации от типа TForm1 = class(TForm). Този код декларира класа TForm1 като дъщерен на TForm. Има едно много важно нещо за наследяването. То е, че винаги можете да подадете дъщерен клас там, където се очаква родителски. Едно от следствията на това е, че ако имате клас TParent и негов дъщерен клас, TChild, то на променлива от тип TParent можете да присвоите обект от тип TChild. Т.е. винаги на проманлива от родителски клас можете да присвоите негов дъщерен.

Макар методите практически да представляват процедури и функции, същестуват някои съществени разлики. Например методите имат един скрит параметър, който е обръщение към текущия обект. Това е ключовата дума self. Винатги, когато трябва да се обърнете към текущия обект, можете да използвате Self вместо името - това означава, че дори не е необходимо да знаете името на обекта. Този параметър е изключително ценен, когато имате няколко обекта от един и същи клас - защото метода винаги ще трябва да променя свойствата на съответния обект, за който е извикан. В интерес на истината, използването на Self често се пропуска - можете да направите директни присвоявания към свойствата и те ще се отразят на текущия обект. Но понякога този параметър е незаменим и никога не е излишно ползването му - най-малкото за писането на по-четлив код.

Една от ключовите концепции на обектно-ориентираното програмиране е предефинирането на методи. Това означава, че можете да имате няколко метода с едно и също име, но различни по брой или по тип параметри. При изпълнение на програмата се извиква този метод, ня който съответстват подадените методи. Предефинирането на методи е много полезно, когато работите с дещерни класове и искате да отмените родителски метод - или напълно да го премахнете, или да промените действието му. В Object Paskal това се осъществява чрез ключовата думе overload, която трябва да следва всяка една от декларациите на методите (но не и на техните реализации). Ето един пример:

T3DPoint = class

private
x: integer;
y: integer;
z: integer;
dimensions: 2..3;
public
procedure SetCoord(newX, newY: integer); overload;
procedure SetCoord(newX, newY, newZ: integer); overload;

end;
procedure T3DPoint.SetCoord(newX, newY: integer); overload;
begin

x:=newX;
y:=newY;
z:=0;
dimensions:=2;

end;
procedure T3DPoint.SetCoord(newX, newY, newZ: integer); overload;
begin

x:=newX;
y:=newY;
z :=newZ;
dimensions:=3;

end;
В зависимост от броя на подадените параметри, метода SetCoord определя свойството dimensions като 2 или 3, а също така инициализира свойството Z на третия параметър, или ако са подадени само 2 - на 0. Предефинирането е възможно и за конструкторите - можете да имате различни конструктори в зависимост от подадените параметри.

Предефинирането на методи на родителски клас има малко по-друг смисъл. При него се извършва заместване на родителския метод нов. За целта при декларацията на метод, който присъства и в родителския, се използва ключовата дума override. Когато предефинирате по този начин метод на родителския клас, то вие вече можете да извикате само дъщерния метод. Понякога е полезно да запазите оригиналния метод и да добавите само малко допълнително код. Тогава можете да използвате ключовата дума inherited, която извиква метода на родителския клас. По този начин трябва само да допишете новия код и да извикате родителския метод.

Виртуални и абстрактни методи

Последното нещо, което ще разгледам, са виртуалните и абстрактни методи. Докато обикновения метод е статичен, виртуалния може да се нарече динамичен. Когато дефинирате един метод като виртуален и го предефинирате в дъщерните му класове, то извикването на този метод може да доведе до различен резултат в зависимост към кой клас сочи променливата. Това е важно при наследяването. Например ако имаме класа TAnimal и дъщерните класове TDog и TCat, като родителския клас предоставя процедурата Voice, а всеки един от дъщерните я предефинира, то можем да декларираме обект от типа TAnimal (да го наречем просто Animal) и да извикаме метода Animal.Voice. В зависимост от това дали на Animal е присвоен обект от тип TAnimal, TDog или TCat ще извикаме един от три различни метода - TAnimal.Voice, TDog.Voice или TCat.Voice. Извикването myAnimal.Voice ще е валидно за всеки един дъщерен клас на TAnimal. За да декларирате даден метод като виртуален, трябва да използвате ключовата дума virtual след неговата декларация. Това трябва да стане само веднъж - в декларацията на родителския клас. След това дъщерните класове трябва само да предефинират метода. Няма начин да отмените "виртуалността" на метода - веднъж деклариран като виртуален, той остава такъв във всички дъщерни класове. Обърнете внимание, че за тазлика от предефинирането на родителските методи, когато предефинирате виртуален метод трябва да запазите същите параметри. Абстрактния метод представлява една подобна концепция - всъщност често даден метод се декларира като виртуален и абстрактен. Идеята е в това, да декларирате в един клас методите, които трябва да притежават дъщерните класове, като реализацията остава само за дъщерните класове. Дефинирането на метод като абстрактен става чрез ключовата дума abstract след декларацията му; това напълно дефинира метода. Т.е. декларирате ли метод като абстрактен не можете да имате реализация на този метод в същия клас, а само в негови дъщерни класове.Причината да използвате абстрактни методи е възможността да извикате метода от всеки един подклас. Бихте могли разбира се да използвате просто виртуален метод но тогава ще трябва да напишете и някакъв код в реализацията на метода за този клас; абстрактния метод се ползва в декларацията на класове, които само определят общите за всички дъщерни класове методи, но не и тяхната реализация.

Като заключение ще кажа, че Object Paskal не е инстински обектно-ориентиран език. Възможно най-простото доказетелство е липсата на методи на обект String, който да връща дължината на низа или част от него, а наличието на функции като Length() и copy() вместо това. Object Paskal твърде несполучливо осъществява обекто-ориентираните концепции, но това не го прави по-малко ефективен. Създателите ми вероятно не са имали за цел да създадат обектно-ориентиран език, а да направят ефективно средство за програмиране под Windows, запазвайки максимално чертите на Paskal. Именно това е Object Paskal - език, който среща нуждите на програмиране под Windows, покрива основните стандарти на обектно-ориентираното програмиране и в същото време е удобен за работа, ефективен и лесен за научаване.
Разбирач, играч, предприемач. Какво повече от това? ;)

Dimitroff

  • Разбирач & играч
  • SEO hero member
  • *****
  • Posts: 695
  • SEO-karma: +300/-3
  • Gender: Male
  • Разбирач, играч и предприемач.
    • View Profile
    • Много ме кефи тоя predpriemach!!!
Без ескюел може ли?
« Reply #308 on: January 01, 2024, 10:02:19 PM »
Айде да не пропуснем да уважим и от преди годините (За много години!) ескюела.

Учете, да сте учили на времето за ескюел:

QL (Structured Query Language - структурен език за заявки) е основната технология за обработка на бази данни. Практически всяко средство за разработка на бази данни поддържа SQL. Delphi и Visual Studio също предоставят компоненти за обработка на бази данни чрез SQL. Напрактика всяка една база данни се контролира чрез SQL. Той определя какво да бъде изведено от базата, а не как да се осъществи това, което го прави платформено-независим. Макар различните реализации да имат определени различия, в основата си всички реализации на SQL са еднакви, така че чрез него могат еднакво добре да се обработват бази данни в Microsoft Access и в Оracle; както и в още много други приложения. Той прави възможно и създаването на собствени приложения за работа с бази данни, създадени чрез някой от гореспоменаите продукти. Като най-разпространено средсвто за обработка на бази данни, той е задължителен за всеки, който иска сериозно да се занимава с бази данни, независимо дали ще ползва готови продукти за обработката им или ще разработва приложения за работа с бази данни
Основи

Всяка база данни се състои от таблици, вкяка от които има име. Всяка таблица се състои от отделни колони; всяка колона има име. В основата на обработката на бази данни е извеждането на определена информация от определени колони на определени таблици. Нека разгледаме една таблица:

Books
title   format   language   size
Thinking in C++   HTML   english   1 033KB
Using Visual C++ 4.2   HTML   english   364 KB
Learn Visual Basic 6   DOC   english   1 405KB
CGI Programming 101   PDF   english   188 KB
Inprise MIDAS   DOC   russian   383 KB
Това е една малка таблица - в практиата може да се сблъскате с таблици със десетки колони и хиляди редове. Но за целите на това ръководство тя е подходяща. И така - в основата на обработката на базите данни е заявката. Тя може да е за извеждане на информация, за промяна на информацията или друга. Всяка команда в SQL е заявка. А основната заявка е за избор на информация за обработка.

Основната и най-често срещана команда в SQL е SELECT. Тя определя условието, по което се определя каква информация да бъде изведена. Нашата таблица се казва books и има 4 колони - title (заглавие), format, language (език) и size (размер). Можем да изведем цялата таблица, като използваме следната команда:

SELECT * FROM books
Но много по-често ни трябват определени колони. Ако не ни интересува нито формата, нито размера на книгата? Тогава използваме командата

SELECT title, language FROM books

Резултатът е следната таблица:
title   language
Thinking in C++   english
Using Visual C++ 4.2   english
Learn Visual Basic 6   english
CGI Programming 101   english
Inprise MIDAS   russian
Това ни показва базовия синтаксис на командата SELECT. Тя има много повече възможности, но най-важното и задължително за да бъде използване, е:

SELECT rows FROM table

Какво се получава, ако трябва да изведем всички книги, които са на английски език? SELECT ни дава възможност да извеждаме само редове, отговарящи на определено условие. В случая условието е в колоната language на съответния ред да е вписано english. Можем да го направим със следната команда:

SELECT * FROM books WHERE language = 'english'

Използване на WHERE
WHERE предоставя множество възможности. Освен равенството, той ви позволява да използвате всички оператори за сравнение:
!= или <> за различно от
>= за по-голямо или равно
<= за по-малко или равно
> за по-голямо
< за по-малко

WHERE успешно сравнява думи, като използва ASCII кода на символите. Трябва да имате предвид обаче, че макар и самите команди в SQL да не са чуствителни към главни/редовни букви (тук са дадени с главни но това не е задължително), имената на колоните, таблиците, както и стойностите в техните полета са. Т.е. командата SELECT * FROM books WHERE language = 'English' няма да изведе нищо

Едно от големите предимства на командата WHERE е възможността на използването на логически оператори AND и OR за определяне на повече от едно условие. Нека приемем, че трябва да изведете заглавието на всички книги, които са на английски и са в HTML формат:

SELECT title FROM books WHERE language = 'english' AND format = 'HTML'

Резултатът е:
Thinking in C++
Using Visual C++ 4.2

Използване на аритметика и LIKE, преименуване на колони

За целите на по-нататъчното ни обучение ще използваме една по-голяма таблица:
inventory
title   language   format   subject   size   archived
CGI Developer's Guide   english   HTML   Perl   1268   243
Codebook 1   english   DOC   Game Maker   418   39
CPP   russian   DOC   C++   2397   405
Database Developer's Guide width Visual C++ 4   english   HTML   Visual C++   2579   436
Database in VB5 in 21 days   english   HTML   Visual Basic   2219   381
GLspecification 1.4   english   PDF   OpenGl   1850   984
HTML Cource   english   PDF   HTML   1307   1155
Learn Visual Basic 6   english   DOC   Visual Basic   25029   1405
Programming in Java   russian   HTML   Java   1283   527
Programming in VB5   english   HTML   Visual Basic   1013   584
Programming Perl   english   HTML   Perl   2682   683
Teach Yourself Java 1.1 Programming   english   HTML   Java   815   195
Teach yourself Borland Delphi 4   english   HTML   Delphi   1943   432
Teach yourself Internet Game Programming with Java   english   HTML   Java   1148   275
Teach yourself Visual J++   english   HTML   Visual J++   4043   2788
Thinking in C++   english   HTML   C++   8256   1033
Using Visual C++ 4.2   english   HTML   Visual C++   1699   364
Learn Visual C++   english   HTML   Visual C++   676   412
Visual C++ in 12 Easy Lessons   english   HTML   Visual C++   1679   687
Visual Basic 5 Night School   english   HTML   Visual Basic   1903   374

SQL съдържа всички аритметични оператори. Преди да разберем как и за какво се използват, нека видим кои са:
+ събиране
- изваждане
* умножение
/ деление
% остатък от делението

Първото и най-очевидно място за използване на аритметика е в клаузата WHERE. Нека предположим че трябва да изведем всички книги, заедно с формата им, за които архива е не-повече от 20% от оригиналния размер. Как ще изглежда заявката?

SELECT title, format, size, archived
FROM inventory
WHERE size*20/100 <= archive

Резултата е следната таблица:
title   format   size   archived
CGI Developer's Guide   HTML   1268   243
Codebook 1   DOC   418   39
CPP   DOC   2397   405
Database Developer's Guide width Visual C++ 4   HTML   2579   436
Database in VB5 in 21 days   HTML   2219   381
Learn Visual Basic 6   DOC   25029   1405
Thinking in C++   HTML   8256   1033
Visual Basic 5 Night School   HTML   1903   374
Но защо да не покажем в таблицата, какъв процент е архива от оригиналния размер. Как? Тук идва второто приложение на аритметиката - в клаузата SELECT. Там можем да създаваме нови колони, на базата на вече съществуващите. Това са виртуални колони, които не се запазват в базата данни, но могат да ни бъдат полезни. Ето как се използва аритметика в клаузата SELECT:

SELECT title, format, archived/size*100
FROM inventory
WHERE archived/size*100 <= 20

Резултатът е следната таблица:
title   format   archived/size*100
CGI Developer's Guide   HTML   19
Codebook 1   DOC   19
CPP   DOC   9
Database Developer's Guide width Visual C++ 4   HTML   17
Database in VB5 in 21 days   HTML   17
Learn Visual Basic 6   DOC   6
Thinking in C++   HTML   13
Visual Basic 5 Night School   HTML   20
Тук възниква въпроса не може ли да се преименува колоната. И тук е мястото, в което трябва да споменем за няколко от основните свойства на командата SELECT. На първо място, колоните се извеждат в този ред, в който са определени в клаузата SELECT, а не в реда, вкойто са дефинирани в таблицата. Така бихме могли да изведем първо размера, а после формата. Името на всяка колона може да бъде сменено за конкретната таблица, като просто след колоната се напише новото име (в някои реализации на SQL се слага знак = между двете. Така можем да направим нашата таблица по-разбираема, просто като напишем

SELECT title, format, archived/size*100 ratio
FROM inventory
WHERE archived/size*100 <= 20
title   format   ratio
CGI Developer's Guide   HTML   19
Codebook 1   DOC   19
CPP   DOC   9
Database Developer's Guide width Visual C++ 4   HTML   17
Database in VB5 in 21 days   HTML   17
Learn Visual Basic 6   DOC   6
Thinking in C++   HTML   13
Visual Basic 5 Night School   HTML   20
Ще разгледаме още един елемент от клаузата WHERE. Какво ще стане, ако трябва да изведем всички книги, отнасящи се до Visual Studio? Бихме могли да напишем:

SELECT * FROM inventory
WHERE subject = 'Visual C++'
OR subject = 'Visual Basic'
OR subject = 'Visual J++'

В много случаи обаче подобен подход е нерационален. Вместо това на помощ ни идва операторът LIKE. Чрез него могат да бъдат избрани всички елементи, съдържащи даден елемент. В оператора LIKE могат да се използват символите _, който обозначава един произволен символ, и %, обозначаващ произволно количество произволни символи. Така нашата заявка ще бъде:

SELECT * FROM inventory
WHERE subject LIKE 'Visual%'

Това ще изведе всеки запис, за който полето subject започва с Visual. Ако искаме да изведем книгите, отнасящи се за Visual C++ или Visual J++ можем да напишем:

SELECT * FROM inventory
WHERE subject LIKE 'Visual _++'

Основни функции

За целите на по-нататъчните ни упражнения ще използваме следните две таблици:

programbooks
title   language   format   subject   size
CGI Developer's Guide   english   HTML   Perl   243
Codebook 1   english   DOC   Game Maker   39
CPP   russian   DOC   C++   405
Database Developer's Guide width Visual C++ 4   english   HTML   Visual C++   436
Database in VB5 in 21 days   english   HTML   Visual Basic   381
GLspecification 1.4   english   PDF   OpenGl   984
Learn Visual Basic 6   english   DOC   Visual Basic   1405
Learn Visual C++   english   HTML   Visual C++   412
Programming in Java   russian   HTML   Java   527
Programming in VB5   english   HTML   Visual Basic   584
Programming Perl   english   HTML   Perl   683
Teach yourself Borland Delphi 4   english   HTML   Delphi   432
Teach yourself Internet Game Programming with Java   english   HTML   Java   275
Teach Yourself Java 1.1 Programming   english   HTML   Java   195
Teach yourself Visual J++   english   HTML   Visual J++   2788
Thinking in C++   english   HTML   C++   1033
Using Visual C++ 4.2   english   HTML   Visual C++   364
Visual Basic 5 Night School   english   HTML   Visual Basic   374
Visual C++ in 12 Easy Lessons   english   HTML   Visual C++   687
webbooks
title   language   format   subject   size
Barebones   english   HTML   HTML   24
CGI Developer's Guide   english   HTML   Perl   243
Complete Itiot's Guide to JavaScript   english   HTML   JavaScript   228
DHTML(small)   english   HTML   HTML   272
HTML Course   english   PDF   HTML   1 155
HTMLTutor   bulgarian   EXE   HTML   1 147
HTML Tutorial   english   HTML   HTML   30
Programming in Java   russian   HTML   Java   527
Programming Perl   english   HTML   Perl   683
Teach Yourself Java 1.1 Programming   english   HTML   Java   195
Teach yourself Internet Game Programming with Java   english   HTML   Java   275
Writing HTML   english   HTML   HTML   1 520
UNION и UNION ALL
UNION връща резултата от две заявки без повтарящите се полета. UNION ALL връща резултата от двете заявки, включително и повтарящите се полета
Пример:

SELECT title FROM programbooks
UNION
SELECT title FROM webbooks

Резултатът е следния:
title
CGI Developer's Guide
Codebook1
CPP
Database Developer's Guide with Visual C++ 4
Database in VB5 in 21 days
GLSpecification 1.4
Learn Visual Basic 6
Learn Visual C++
Programming in Java
Programming in VB5
Programming Perl
Teach yourself Borland Delphi 4
Teach yourself Internet Game Programming with Java
Teach yourself Java1.1 Programming
Teach yourself Visual J++
Thinking in C++
Using Visual C++ 4.2
Visual Basic 5 Night School
Visual C++ in 12 Easy Lessons
Barebones
Complete Idiot's Guide to JavaScript
DHTML(small)
HTML Course
HTMLTutor
HTML Tutorial
Writing HTML

INTERSECT
INTERSECT връща само записите, намерени и при двете заявки.
Пример:

SELECT * FROM programbooks
INTERSECT
SELECT * FROM webbooks

Резултатът е:
title   language   format   subject   size
CGI Developer's Guide   english   HTML   Perl   243
Programming in Java   russian   HTML   Java   527
Programming Perl   english   HTML   Perl   683
Teach Yourself Java 1.1 Programming   english   HTML   Java   195
Teach yourself Internet Game Programming with Java   english   HTML   Java   275
MINUS
MINUS връща записите от първата заявка, които не са намерени при втората
Пример:

SELECT * FROM webbooks
MINUS
SELECT * FROM programbooks

Резултатът е:
title   language   format   subject   size
Barebones   english   HTML   HTML   24
Complete Itiot's Guide to JavaScript   english   HTML   JavaScript   228
DHTML(small)   english   HTML   HTML   272
HTML Course   english   PDF   HTML   1 155
HTMLTutor   bulgarian   EXE   HTML   1 147
HTML Tutorial   english   HTML   HTML   30
Writing HTML   english   HTML   HTML   1 520
SUM
SUMВръща сумата от всички стойности в колоната. Тя може да се прилага само върху колони, съдържащи числа.
Пример:

SELECT SUM(size) FROM programbooks

Резултатът е:
12247

AVG
Тази функция връща средно аритметичното от стойностите в колоната. Може да се използва само с колони, съдържащи числови стойности
Пример:

SELECT AVG(size) FROM programbooks

Резултатът е
644,578947

MAX
За разлика от предишните функции, тази може да работи и със символни низове. Тя връща най-големия елемент от колоната. Когато става въпрос за символен низ - връща последния в азбучен ред
Пример

SELECT MAX(size) FROM programbooks

Резултатът е:
2788

MIN
Тази функция връща най-малкия елемент от колоната. Както и предишната, тя може да работи и със символни низове
Пример

SELECT MIN(size) FROM programbooks

Резултатът е:
39

COUNT
Тази функция връща броя на записите, отговарящи на клаузата WHERE. Да предположим, че искате да разберете колко са книгите за Visual C++

SELECT COUNT(*) FROM programbooks
WHERE subject = 'Visual C++'

Разултатът е:
4

ABS
Тази функция връща абсолютната стойност на дадените числа

CEIL и FLOOR
CEIL връща най-малкото цяло число, по-голямо или равно на подаденото. FLOOR връаща най-голямото цяло число, по-малко или равно на подаденото

COS, SIN и TAN
Тези функции връщат съответно косинус, синус или тангес от подадените им стойности. Имайте предвид че те работят с радиани

LN и LOG
LN връща натурален логаритъм на подадените й стойности. LOG приема два аргумента, като първия е базата. Функцията връща логаритъм от втория аргумент при база първия

POWER
POWER приема два аргумента и връща първия на степен втория

SIGN
Тази функция връща -1, ако аргументът е по-малък от 0; 0, ако аргументът е равен на нула; или 1, ако аргуметът е по-голям от 0

SQRT
Тази функция връща корен квадратен от подадените й стойности

Промяна на данните в база данни

Чрез SQL можете да променяте информацията в база данни, използвайки три основни процедури: добавяне, изтривне и промяна. За целите на по-нататъчните ни разглеждания, ще използваме следната таблица:
inventory
title   language   format   subject   size   archived
CGI Developer's Guide   english   HTML   Perl   1268   243
Codebook 1   english   DOC   Game Maker   418   39
CPP   russian   DOC   C++   2397   405
Database Developer's Guide width Visual C++ 4   english   HTML   Visual C++   2579   436
Database in VB5 in 21 days   english   HTML   Visual Basic   2219   381
GLspecification 1.4   english   PDF   OpenGl   1850   984
HTML Cource   english   PDF   HTML   1307   1155
Learn Visual Basic 6   english   DOC   Visual Basic   25029   1405
Programming in Java   russian   HTML   Java   1283   527
Programming in VB5   english   HTML   Visual Basic   1013   584
Programming Perl   english   HTML   Perl   2682   683
Teach Yourself Java 1.1 Programming   english   HTML   Java   815   195
Teach yourself Borland Delphi 4   english   HTML   Delphi   1943   432
Teach yourself Internet Game Programming with Java   english   HTML   Java   1148   275
Teach yourself Visual J++   english   HTML   Visual J++   4043   2788
Thinking in C++   english   HTML   C++   8256   1033
Using Visual C++ 4.2   english   HTML   Visual C++   1699   364
Learn Visual C++   english   HTML   Visual C++   676   412
Visual C++ in 12 Easy Lessons   english   HTML   Visual C++   1679   687
Visual Basic 5 Night School   english   HTML   Visual Basic   1903   374
Добавяне на информация
Добавянето на информация в базата данни е изключително лесно - за целта служи командата INSERT. Можете да добавите нов ред към дадена таблица като използвате:

INSERT INTO tablename
(col1, col2...)
VALUES(value1, value2...)

Това ви позволява да добавите един ред към дадена таблица. Броя на стойностите трябва да отговаря на броя на колоните, като данните се попълват в реда, в който сте определили колоните, а не в реда, в който са колоните в оригиналната таблица. Т.е. можете да попълните реда отзад-напред като просто определите имената на колоните в обратен ред. Ако не определите колони, данните се попълват подред в колоните от оригиналната таблица, започвайки от първата и продължавайки до последната.

Това е изключително лесен и удобен начин да прибавим информация към базата данни. Но какво става ако трябва да добавим десетки или дори стотици нови редове? Напрактика, командата INSERT има две форми - INSERT ... VALUES, която разгелдахме, и INSERT ... SELECT. При втория вид, към таблицата се прибавя информацията, върната от стандартна заявка чрез командата SELECT. Отново, синтаксисът е:

INSERT INTO tablename
(col1, col2, ...)
SELECT col1, col2, ...
FROM sourcetable
WHERE search-condition

Повече информация за използването на SELECT и клаузата WHERE ще наметите в Въведение в SQL.

Изтриване

Изтриването на елемент е също толкова лесно, колкото и прибавянето му. Нещо повече - можете да изтриете един или множество елементи по един и същи начин. Използването на клаузата WHERE при триене е изключително важно за определяне на това, което да бъде изтрито. В противен случай ще изтриете цялата информация от таблицата, но таблицата ще продължи да съществува. Командата, използвана за изтриване на данни е DELTE а нейния синтаксис:

DELETE FROM tablename
WHERE search_condition

Тази команда изтрива всички редове от посочената таблица, отговарящи на условието search_condition. Ако не използвате клаузата WHERE ще изтриете всички редове от таблицата.

Нека разгледаме един пример

Ще премахнем от нашата таблица книгите за Perl и Java, тъй като те се отнасят за web програмиранме и ще бъдат отделени от тази база данни.

DELETE FROM inventory
WHERE subject = 'Perl' OR subject = 'Java'

Сега нашата таблица изглежда така:
inventory
title   language   format   subject   size   archived
Codebook 1   english   DOC   Game Maker   418   39
CPP   russian   DOC   C++   2397   405
Database Developer's Guide width Visual C++ 4   english   HTML   Visual C++   2579   436
Database in VB5 in 21 days   english   HTML   Visual Basic   2219   381
GLspecification 1.4   english   PDF   OpenGl   1850   984
HTML Cource   english   PDF   HTML   1307   1155
Learn Visual Basic 6   english   DOC   Visual Basic   25029   1405
Programming in VB5   english   HTML   Visual Basic   1013   584
Teach yourself Borland Delphi 4   english   HTML   Delphi   1943   432
Teach yourself Visual J++   english   HTML   Visual J++   4043   2788
Thinking in C++   english   HTML   C++   8256   1033
Using Visual C++ 4.2   english   HTML   Visual C++   1699   364
Learn Visual C++   english   HTML   Visual C++   676   412
Visual C++ in 12 Easy Lessons   english   HTML   Visual C++   1679   687
Visual Basic 5 Night School   english   HTML   Visual Basic   1903   374
Но да предположим, че сме конвертирали всички .doc файлове в PDF. Как да отразим тази промяна? Би било твърде нерационално да изтрием всички записи, съдържащи DOC за формат и да ги прибавим с нужната корекция. SQL предоставя за целта командата UPDATE, имаща следния синтаксис:

UPDATE tablename
SET col1=value1
(,col2=value2, ...)
WHERE search_condition

Отново тук е важно използването на клаузата WHERE за определяне на това, кои записи да бъдат променени. С col1, col2 и т.н. се обозначават имената на колоните, които се променят, а с value1, value2 и т.н. - съответните стойности. За да променим формата в нашата таблица, ще използваме следната команда:

UPDATE inventory
SET format = 'PDF'
WHERE format = 'DOC'

Сега таблицата изглежда така:
inventory
title   language   format   subject   size   archived
Codebook 1   english   PDF   Game Maker   418   39
CPP   russian   PDF   C++   2397   405
Database Developer's Guide width Visual C++ 4   english   HTML   Visual C++   2579   436
Database in VB5 in 21 days   english   HTML   Visual Basic   2219   381
GLspecification 1.4   english   PDF   OpenGl   1850   984
HTML Cource   english   PDF   HTML   1307   1155
Learn Visual Basic 6   english   PDF   Visual Basic   25029   1405
Programming in VB5   english   HTML   Visual Basic   1013   584
Teach yourself Borland Delphi 4   english   HTML   Delphi   1943   432
Teach yourself Visual J++   english   HTML   Visual J++   4043   2788
Thinking in C++   english   HTML   C++   8256   1033
Using Visual C++ 4.2   english   HTML   Visual C++   1699   364
Learn Visual C++   english   HTML   Visual C++   676   412
Visual C++ in 12 Easy Lessons   english   HTML   Visual C++   1679   687
Visual Basic 5 Night School   english   HTML   Visual Basic   1903   374
Разбирач, играч, предприемач. Какво повече от това? ;)

Dimitroff

  • Разбирач & играч
  • SEO hero member
  • *****
  • Posts: 695
  • SEO-karma: +300/-3
  • Gender: Male
  • Разбирач, играч и предприемач.
    • View Profile
    • Много ме кефи тоя predpriemach!!!
С една която се правеше на много честна
« Reply #309 on: July 06, 2024, 08:11:37 PM »
Имаше преди години една, която тук ми се правеше на много честна. После обаче се видя, че се среща с други наживо, флиртува с трети онлайн и всичко е било един фалш голям.

Ето ви, да се накефите на фалша:

Добър вечер, господин Димитров!

Получих имейла както и личното съобщение от вас. Ще кажа, че имейла ми не е фалшив, мислех даже да ви отговоря първо там, ползвам го редовно повече от Gmail.

Радвам се, че сте толкова директен, не всеки има смелост! Не съм дрънкало и всичко си остава между нас, все пак големи хора сме. Разбрана съм. Не се притеснявайте. Съжалявам за случилото се с приятелката ви. Наистина е тъжно.

Имате ли против да си разменим фейсбук?

Ако е удобно може ли да си пишем тук на лично или в случай че сте съгласен в фейсбук? Там по-бързо отговарям.

Ако желаете нещо повече да знаете за мен, може да ме питате. Няма проблем от моя страна.

Бях в страхотно парти настроение и страшно много ми се празнуваше особено след баня и това беше причината/ повода да си кача снимката 8)
Разбирач, играч, предприемач. Какво повече от това? ;)

Dimitroff

  • Разбирач & играч
  • SEO hero member
  • *****
  • Posts: 695
  • SEO-karma: +300/-3
  • Gender: Male
  • Разбирач, играч и предприемач.
    • View Profile
    • Много ме кефи тоя predpriemach!!!
Re: С една която се правеше на много честна
« Reply #310 on: July 06, 2024, 08:20:56 PM »
Следващото.


Ще си позволя да ви разкажа повече за мен, да няма неприятни изненади и такива неща, защото мисля, че е важно и искам всичко да се знае.
Не обичам лъжите и увъртанията, затова ще ви кажа/споделя 8)

Мисля, че няма да ви допадна в леглото, поради факта, че ВСЕ ОЩЕ ВАГИНАЛЕН СЕКС НЕ СЪМ ПРАВИЛА и не съм опитна в секса защото съм била с 2-ма само, вие предполагам сте свикнал с по-опитни мадами които имат опит и знаят какво и как.

Имала съм само 2 момчета досега и съм правила само анален и орален.

Ако не съм ви разочаровала с думите си, може да ми пратите ваша снимка.

За да не ви губя времето понеже все пак работите и не искам да преча или нещо, не обичам да съм натрапник и да досаждам. Не съм нагъл човек а точно обратното, прекалено съм разбрана и скромна. Може би си личи. От малко градче съм, не съм от София.И благодаря, че споделихте, че сте на 29, мислех ви за по-голям, надявам се да не се обидите но ме изненадахте приятно! Ще кажа, че предложението е добро и вероятно ако беше по нахална мацка някоя би се съгласила веднага и би се възползвала. Поне като знам днешните момичета... :) Просто възпитанието ми не е такова, че да злоупотребявам или да наглея като повечето мадами и си го казвам вместо да крия до последно. 8) Надявам се, че няма да се обидите от това което казах, просто държа всичко да е точно и да се знае. За връзка с предложението, незнам как ще реагирате на това, което сега ви написах, не съм казала все още да, но все пак не искам да ви задържам и мотая и ще ви разбера ако не желаете да комуникирате с мен или намерите друга кандидатка.




Благодаря ви от сърце, че ми честитихте Коледните празници. Много мило, г-н Димитров. Благодаря.  :D Пожелавам Ви Весело изкарване на празниците, много усмивки, весели моменти и нека каквото пожелаете и искате да се сбъдне! Понеже знам, че 2020 беше трудна година както за бизнеса така и за хората, надявам се да не ви се е отразила много. И ако имате загуби или нещо в работата, да успеете да си го върнете и всичко да е наред!




Радвам се да ви видя/чуя отново! Ами... на мен разказа ми хареса но ми беше в същото време много тъжен и мъчно. По принцип съм много емоционален и чувствителен човек, което най не харесвам в себе си и също обичам прекалено много а отсрещната страна не ме дарява със същата обич колкото аз влагам.  Колкото и да е скъп някой за мен винаги са ме изоставяли и разочаровали, дори собственото ми семейство което е разведено ми тежи най-вече факта че баща ми ме изостави от 2007год и досега не съм го виждала нито ме потърси нито иска да ме чува или вижда. Донякъде си мисля, че явно е за добро, 100% винаги може и по-зле и така се успокоявам. Много ме зарадвахте, че бизнеса ви върви и че всичко е наред. Все пак това е работа и е важно. От парите зависят доста неща, дори и да не е всичко пари, пак са важни и са с кървав труд. Защото човек се бори и влага усилия, здраве също влага, било то ментално или физически. Радвам се, че се развивате!

Какво пиете ако не е тайна? Кое ви е любимото питие? Бил ли сте в чужбина? :o
Аз пия когато съм в компания но силните алкохоли ги избягвам защото не съм свикнала да пия силен алкохол. Примерно пелин пия, ликьор, мента също пия макар и скоро да не съм. ;)

За връзка с предложението:  Бих искала да знам повече за вас, вие искате директно да се съглася и тогава бихте ми пратили снимка и бихте ми разказали повече за Вас, струва ми се нелогично веднага да се съгласям и да се срещам с вас без да знам нищо, дори как изглеждате и с какво се занимавате, защото съм 100% сигурна че гледате външния вид и дефакто вие ме знаете как изглеждам но аз вас не ви знам и не мисля, че е много честно по този начин. Защото хем ми правите предложение хем се криете. Нито ще ви убия или причиня нещо, нито нищо. Другото което е всичко си остава между нас ако това толкова ви притеснява, нито ще разказвам на някой нито бих правила глупости и мизерии. Прекалено съм интелигентна и съм над тези неща. ;) Контактувала съм с обществена личност и не съм толкова глупава за разлика от повечето момичета които си дават задниците и другите неща щом срещнат успял човек и грам разбиране нямат и правят простотии. Незнам с какви мадами сте бил но аз не съм от този тип мадами. Би трябвало да сте го разбрал досега. И не е казано, че щом съм контактувала с обществена личност или успял човек трябва да съм правила секс с него. 8)

Пишете ми отговор ако желаете! :)



Весели празници г-н Димитров :D мислех да ви пиша и да ви честитя но не посмях, знам, че работите и тн..

Бих искала да ми пратите ваши снимки за да ви кажа да или не.

Радвам се, че сте толкова директен.  ;)



Благодаря. Няма проблем.



Може ли друга?


Ех, исках само теб да видя :D но благодаря за снимките! Оценявам това. 8)  Усещам, че ще ме скъсаш.. :) :) :) Едва ли само ще ме гледаш. :P


Отказвам предложението. :-* Дано ти мине главата и се пази!



Пожелавам ти новата 2021 година да ти донесе много здраве, щастие, късмет, пари и любов! 8)





Разбирач, играч, предприемач. Какво повече от това? ;)

 

Your ad here just for $1 per day!

- - -

Your ads here ($1/day)!

About the privacy policy
How Google uses data when you use our partners’ sites or apps
Post there to report content which violates or infringes your copyright.