Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 01/16/12 in Posts

  1. Deschizi programu, apesi butonul, si te alegi cu 2 usere rds. Just like that! Download : Download rcs-rds.rar from Sendspace.com - send big files the easy way Pass in PM Screen : Limit : 2 usere pe zi In baza de date sunt 100 de usere, in functie de comentarii voi mai adauga(sau nu) usere. +rep if you like it ;D P.S. Admin, daca postu asta incalca vreo regula si/sau "pune in danger" site-ul, sterge-l. UPDATE : +100 adaugate / 3 usr pe zi 1/19/2012 Userele nu mai sunt bune. Logarea este filtrata acum la RDS si te va deconecta automat daca userul logat nu corespunde cu adresa de pe contract. Imi pare rau dar nu mai are rost sa mai adaug usere. Closed!
    1 point
  2. In urma cu ceva timp am facut un mic tutorial pentru conectarea la un fisier ms acces aflat pe hard. Tutorialul respectiv aici. La scurt timp am incercat sa fac si o mica clasa pentru a incapsula cateva operatii standard de care aveam eu nevoie atunci si anume insertie si selectie, clasa poate fi gasita aici. Problema cu clasa respectiva este ca are un memory leak destul de mare, ea necuratand dupa fiecare statement si conexiune. Asa am ajuns la concluzia ca un set mic de functii fiecare cu propria ei conexiune si clean up aferent ar functiona mai bine. Mai jos aveti fisierele necesare utilizarii lor cu explicatia pentru fiecare. Pentru utilizarea lor aveti nevoie sa legati libraria odbc32 furnizata de compilatorul vostru. Pentru codeblocks aceasta este libodbc32.a Am incercat sa le comentez pe cat posibil. Daca gasiti erori in ele spuneti-mi pentru a le rezolva. Nu ar trebuii sa mai existe nici un fel de memory leak in ele deci ar trebuii sa fie destul de sigure in utilizare pentru proiecte simple. Aceste clase pot fi folosite atat pentru proiecte cmd cat si gui(eu le folosesc pentru un proiect in wxWidgets fara probleme) functii_odbc.h #ifndef FUNCTII_ODBC_H_INCLUDED #define FUNCTII_ODBC_H_INCLUDED #include <iostream> #include <string> #include <sstream> #include <fstream> #include <vector> #include <windows.h> #include <sql.h> #include <sqlext.h> int select(std::string dns, int numarCampuri, std::string querry, std::vector<std::vector< std::string> >& array, std::string& erroare); void getErrors(SQLSMALLINT type,SQLHANDLE handle, std::string& error); void freeDbResources(HSTMT& hStmt, HENV& hEnv, HDBC& hDbc); int insert(std::string dns, std::string num_Tabel, std::vector<std::string> Campuri, std::vector<std::string> Valori, std::string& error); #endif // FUNCTII_ODBC_H_INCLUDED functii_odbc.cpp #include "functii_odbc.h" /** * Lista argumente: * string dns = adresa fisierului acces mdb/accdb pe hard-disk * numarCampuri = numarul de campuri care urmeaza a fi selectate prin querry-ul respectiv * vector<vector<string> >& array = este un vector de vectori de stringuri, trimis prin referinta care va contine datele extrase * in felul urmator: array[0][0] va fi prima coloana returnata pe primul rand * array[0][1] va fi a 2-a coloana * array[0][2] va fi a 3-a coloana smd * iar array[x][0], x va desemna randul de date extrase * string& eroare = va contine mesajele de eroare, in situatia in care apare o eroare in executia functiei sau a querry-ului atunci aceasta va fi salvata in acest string * Functia are doar 2 valori de return 1 = succes in executarea querry-ului, sau -1 eroare * Functia face doar cateva verificari de baza in privinta corectitudinii querry-ului * De asta trebuie sa se asigure utilizatorul inainte * Functia va verifica doar daca exista un posibil insert in querry caz in care iese. */ using namespace std; int select(string dns, int numarCampuri, string querry, vector<vector<string> >& array, string& erroare) { if(querry.find("SELECT") == string::npos || querry.find("INSERT") != string::npos) { erroare = "Nu ai introdus o comanda de select;"; } else { SQLCHAR valoareCustomers[numarCampuri][128]; HSTMT querryStmt; string tempNume; int retCode[numarCampuri]; HENV hEnv; HDBC hDbc; RETCODE rc; int len = querry.size(); char szConnStrOut[255]; int iConnStrLength2Ptr; char szDSN[256] = "Driver={Microsoft Access Driver (*.mdb)};DSN='';DBQ="; unsigned char* statementQuerry = (unsigned char*)querry.c_str(); //vStrArray.clear(); // golim vectorul primit ca container de output (este datoria utilizatorului sa se asigure ca nu are nimic important in vector inainte de a fi trimis acestei functii strcat(szDSN, dns.c_str()); rc = SQLAllocEnv(&hEnv); if(!SQL_SUCCEEDED(rc)) { erroare = "Nu am putut aloca Envorimentul."; cout << "Nu am putut aloca envorimentul."; freeDbResources(querryStmt, hEnv, hDbc); return -1; } rc = SQLAllocConnect(hEnv, &hDbc); if(!SQL_SUCCEEDED(rc)) { erroare = "Nu am putut aloca conexiunea."; cout << "Nu am putut aloca conexiunea."; freeDbResources(querryStmt, hEnv, hDbc); return -1; } rc = SQLDriverConnect(hDbc, NULL, (SQLCHAR*)szDSN, SQL_NTS, (SQLCHAR*)szConnStrOut, 255, (SQLSMALLINT*)&iConnStrLength2Ptr, SQL_DRIVER_NOPROMPT); if(!SQL_SUCCEEDED(rc)) { getErrors(SQL_HANDLE_DBC , hDbc, erroare); freeDbResources(querryStmt, hEnv, hDbc); return -1; } rc = SQLAllocStmt(hDbc, &querryStmt); if(!SQL_SUCCEEDED(rc)) { erroare = "Nu am putut aloca statementul."; cout << "Nu am putut aloca statementul."; freeDbResources(querryStmt, hEnv, hDbc); return -1; } rc = SQLPrepare(querryStmt, statementQuerry, SQL_NTS); if(!SQL_SUCCEEDED(rc)) { erroare = "Nu am putut pregatii statementul."; cout << "Nu am putut pregatii statementul."; freeDbResources(querryStmt, hEnv, hDbc); return -1; } for(int i = 0; i < numarCampuri; i++) { rc = SQLBindCol(querryStmt, (i + 1), SQL_C_CHAR, valoareCustomers[i], 128, (SQLINTEGER*)&retCode[i]); if(!SQL_SUCCEEDED(rc)) { erroare = "Nu am putut bindui coloana."; cout << "Nu am putut bindui coloana."; freeDbResources(querryStmt, hEnv, hDbc); return -1; } } cout << endl << endl << statementQuerry << endl; rc = SQLExecute(querryStmt); if(SQL_ERROR == rc || SQL_SUCCESS_WITH_INFO == rc) { cout << "Eroare in executare statement, sau SQL_SUCCESS_WITH_INFO"; erroare = "Eroare in executare statement, sau SQL_SUCCESS_WITH_INFO"; getErrors(SQL_HANDLE_STMT, querryStmt, erroare); return -1; } else if(SQL_NEED_DATA == rc) { cout << "SQL_NEED_DATA."; erroare = "SQL_NEED_DATA."; getErrors(SQL_HANDLE_STMT, querryStmt, erroare); return -1; } else if(SQL_STILL_EXECUTING == rc) { cout << "SQL_STILL_EXECUTING."; erroare = "SQL_STILL_EXECUTING."; getErrors(SQL_HANDLE_STMT, querryStmt, erroare); return -1; } else if(SQL_NO_DATA == rc) { cout << "SQL_NO_DATA."; erroare = "SQL_NO_DATA."; getErrors(SQL_HANDLE_STMT, querryStmt, erroare); return -1; } else if(SQL_INVALID_HANDLE == rc) { cout << "SQL_INVALID_HANDLE."; erroare = "SQL_INVALID_HANDLE"; getErrors(SQL_HANDLE_STMT, querryStmt, erroare); return -1; } rc = SQLFetch(querryStmt); if(SQL_SUCCESS == rc) { while(SQL_SUCCEEDED(rc)) { vector<string> vString; string temp; for(int i = 0; i < numarCampuri; i++) { temp = (char*)valoareCustomers[i]; vString.push_back(temp); } array.push_back(vString); rc = SQLFetch(querryStmt); } freeDbResources(querryStmt, hEnv, hDbc); return 1; } else if(SQL_SUCCESS_WITH_INFO == rc || SQL_ERROR == rc) { cout << "Nu am putut executa SQLFetch.\n"; cout << "Nu am putut executa SQLFetch.\n"; getErrors(SQL_HANDLE_STMT, querryStmt, erroare); freeDbResources(querryStmt, hEnv, hDbc); return -1; } else if(SQL_STILL_EXECUTING == rc) { cout << "Inca se executa statementul.\n"; erroare = "Inca se executa statementul.\n"; freeDbResources(querryStmt, hEnv, hDbc); return -1; } else if(SQL_NO_DATA == rc) { cout << "Nu exista date de returnat.\n"; erroare = "Nu exista date de returnat.\n"; freeDbResources(querryStmt, hEnv, hDbc); return -1; } } return -1; } /** * Functia preia prin referinta handle-urile pentru conexiune, mediu si statement si le elibereaza */ void freeDbResources(HSTMT& hStmt, HENV& hEnv, HDBC& hDbc) { SQLFreeStmt(hStmt, SQL_UNBIND); SQLFreeHandle(SQL_HANDLE_STMT, hStmt); SQLDisconnect(hDbc); SQLFreeHandle(SQL_HANDLE_DBC, hDbc); SQLFreeHandle(SQL_HANDLE_ENV, hEnv); } /** * Functia preia datele necesare pentru a putea prelua o eroare legata de un handle pentru conexiune, statement sau mediu * SQLSMALLINT type poate fi: QL_HANDLE_DBC, SQL_HANDLE_DBC_INFO_TOKEN, SQL_HANDLE_DESC, SQL_HANDLE_ENV, SQL_HANDLE_STMT * SQLHANDLE handle va fi de fapt handle-ul pentru care aven nevoie sa preluam eroarea * string& eroare = va tine textul erori * Functia preia doar erorile care pot fi preluate prin SQLGetDiagRec. * Mai multe informatii despre SQLGetDiagRec aici: http://msdn.microsoft.com/en-us/library/windows/desktop/ms716256(v=vs.85).aspx */ void getErrors(SQLSMALLINT type,SQLHANDLE handle, string& eroare) { SQLINTEGER i = 1; SQLINTEGER native; // codul nativ al erori ( depinde de sistemul de operare si de driver SQLCHAR state[7]; // starea driverului mai multe informatii despre state : http://msdn.microsoft.com/en-us/library/windows/desktop/ms716412(v=vs.85).aspx SQLCHAR text[256]; // textul erori SQLSMALLINT len; // marimea textului erori SQLRETURN ret; // stocheaza raspunsul functiei SQLGetDiagRec ret = SQLGetDiagRec(type, handle, i, (SQLCHAR*)state, &native, (SQLCHAR*)text, sizeof(text), &len ); if(SQL_SUCCESS == ret || SQL_SUCCESS_WITH_INFO == ret) { stringstream buffer(stringstream::in | stringstream::out); string temp; eroare = "Eroare:\n"; eroare.append("State: "); cout << "State: " << state << endl; buffer << state; buffer >> temp; eroare.append(temp); buffer.flush(); string temp3((char*)text); eroare.append("\nTextul eroarei: "); eroare.append(temp3); buffer.flush(); cout << "Textul erori: " << text << endl; } else if(SQL_ERROR == ret) { eroare = "eroare Raporting: SQLGetDiagRec returneaza o eroare.\n"; } else if(SQL_INVALID_HANDLE == ret) { eroare = "eroare Raporting: Handleul furnizat pentru preluarea erori a fost incorect.\n"; } else if(SQL_NO_DATA == ret) { eroare = "eroare Raporting: Nu au fost date de returnat.\n"; } } /** * Lista argumente: * string dns = adresa pe disk a fisierului access * string num_Tabel = numele tabelului in care se face inserarea * vector<string> Campuri = Un vector ce contine campurile in care se va face inserarea * vector<string> Valori = Un vector cu valorile ce vor fi introduse in fiecare camp * string& eroare va tine textul oricarei posibile erori * Pentru cei doi vectori marimea lor trebuie sa fie identica. * Exemplu Campuri va contine stringurile "Nume", "Prenume" "telefon" * vectorul Valori va contine "ION", "VASILE", "02345241590" * Functia are doar 2 valori de return 1 = succes in inserarea datelor, sau -1 eroare */ int insert(string dns, string num_Tabel, vector<string> Campuri, vector<string> Valori, string& eroare) { //Incepem pregatirea statmentului string comanda = "INSERT INTO "; string comanda2 = ") VALUES ('"; string comanda3 = ");"; string campuri_tabel; string campuri_valori; //verificam daca numarul de campuri si de valori e identic if(Campuri.size() != Valori.size()) { eroare = "Numarul de campuri si de valori nu este identic. Pentru ca inserarea sa se poata efectua este necesar ca cele 2 sa fie identice.\n"; return -1; } // pregatim lista cu campurile in care se introduc datele for(unsigned int i = 0; i < Campuri.size(); i++) { if(i == (Campuri.size() - 1)) { campuri_tabel.append(Campuri[i]); //campuri_tabel.append(")"); } else { campuri_tabel.append(Campuri[i]); campuri_tabel.append(", "); } } // pregatim lista cu valorile de introdus for(unsigned int i = 0; i < Valori.size(); i++) { if(i == (Valori.size() - 1)) { campuri_valori.append(Valori[i]); campuri_valori.append("'"); } else { campuri_valori.append(Valori[i]); campuri_valori.append("', '"); } } string sql_statement; sql_statement.append(comanda); sql_statement.append(num_Tabel); sql_statement.append("("); sql_statement.append(campuri_tabel); sql_statement.append(comanda2); sql_statement.append(campuri_valori); sql_statement.append(");"); // am terminat pregatirea statementului // pregatim conexiunea la bd // inceput definitii variabile necesare conexiunii la db HENV hEnv; HDBC hDbc; HSTMT hStmt; RETCODE rc; char szConnStrOut[255]; int iConnStrLength2Ptr; char szDSN[256] = "Driver={Microsoft Access Driver (*.mdb)};DSN='';DBQ="; // incheiere definitii // Initiem conexiunea strcat(szDSN, dns.c_str()); rc = SQLAllocEnv(&hEnv); if(!SQL_SUCCEEDED(rc)) { eroare = "Nu am putut aloca Envorimentul."; cout << "Nu am putut aloca envorimentul."; return -1; } rc = SQLAllocConnect(hEnv, &hDbc); if(!SQL_SUCCEEDED(rc)) { eroare = "Nu am putut aloca conexiunea."; cout << "Nu am putut aloca conexiunea."; return -1; } rc = SQLDriverConnect(hDbc, NULL, (SQLCHAR*)szDSN, SQL_NTS, (SQLCHAR*)szConnStrOut, 255, (SQLSMALLINT*)&iConnStrLength2Ptr, SQL_DRIVER_NOPROMPT); if(!SQL_SUCCEEDED(rc)) { getErrors(SQL_HANDLE_DBC , hDbc, eroare); freeDbResources(hStmt, hEnv, hDbc); return -1; } rc = SQLAllocStmt(hDbc, &hStmt); rc = SQLPrepare(hStmt, (SQLCHAR*)sql_statement.c_str(), SQL_NTS); rc = SQLExecute(hStmt); if(!SQL_SUCCEEDED(rc)) { eroare = "Inserarea nu a putut fi efectuata."; cout << "Inserarea nu a putut fi efectuata."; getErrors(SQL_HANDLE_STMT, hStmt, eroare); freeDbResources(hStmt, hEnv, hDbc); return -1; } else if(SQL_SUCCEEDED(rc)) { freeDbResources(hStmt, hEnv, hDbc); return 1; } return -1; } le: Am sters clasa stringArray deoarece nu mai era necesara, pentru preluarea datelor se foloseste un vector de vectori(definitie vector<vector<string> > numeVector; De asemenea momentan din nu stiu exact ce motiv statementurile care folosesc clausa Like nu returneaza nici un fel de date. Se pare ca clausa Like nu se executa la fel prin odbc cum se executa direct in access. Eventual poate cineva explica de ce se comporta altfel?
    1 point
  3. Incearca sa bagi asta: PHP Simple HTML DOM Parser require_once 'simple_html_dom.php'; $page = file_get_contents('veveve.page.com'); $page = str_get_html($page); $pageDivs = $page->find('div'); $maxLength = 0; $maxKey = false; foreach($pageDivs as $pageDivKey => $pageDivData) { $currentLen = strlen($pageDivData->plaintext); if($currentLen > $maxLength) { $maxLength = $currentLen; $maxKey = $pageDivKey; } } if($maxKey) { echo '<pre>'.print_r($pageDivs[$maxKey], true).'</pre>'; // Foarte mult verbose, sa-ti faci o idee echo $pageDivs[$maxKey]->plaintext; } Inventat la minut ca salam, forum in quick edit. Ti-am dat o idee, va trebui sa-l analizezi. EDIT: E posibil ca daca un div are un alt div in el, cand ii dai plaintext sa-ti afiseze si div-ul child. Daca-i asa mai ai putin de munca. Poti modifica div cu orice alt tag.
    1 point
  4. Scurta introducere: Plecand de la o ideea lui Nytro de a posta un tutorial despre access point pe backtrack, am zis ca ar fi ok sa fac share la un tutorial facut de mine in urma cu 9-10 luni. Cum imi plac lucrurile mai complicate si dorind ceva foarte stabil, AP-ul l-am facut pe FreeBSD. -- Satul de micile cutiute magice folosite pentru Wireless / Routing (Netgear, D-Link), am decis sa-mi fac un AP pe unul din “serverele” cu FreeBSD ce le folosesc acasa pentru lucru. Dezavantajele cutiutelor: Se blocau frecvent, erau instabile. Note: - Placa wireless folosita: Linksys WMP54G. (O vede ca Ralink Technology, Corp) - In tutorial nu am inclus si configurarea protejarii wireless-ului, o sa fac un tutorial separat pentru asta. (Update: S-a facut.) - Test-ul wireless-ului l-am facut dupa un netbook; Screenshot-ul se poate vedea aici. - Pe netbook, am configurat manual adresa IP; Daca doriti sa aloce automat, puteti instala DHCPD. - NAT-ul in firewall este facut catre 10.0.0.12 (Adresa IP dupa placa de retea externala – Nu am specificat nat catre interfata pentru ca este si IPv6) - FreeBSD-ul folosit este 8.2 Release. tex ~ # pciconf -lv .................................... ral0@pci0:1:0:0: card=0x00551737 chip=0x03011814 rev=0x00 hdr=0x00 vendor = 'Ralink Technology, Corp.' device = 'Edimax 54 MBit WLan 802.11g rt 2500 (b8341462)' class = network tex ~ # ifconfig ral0 ral0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 2290 ether 00:16:b6:5d:73:05 media: IEEE 802.11 Wireless Ethernet autoselect (autoselect) status: no carrier tex ~ # dmesg |grep ral ral0: <Ralink Technology RT2561S> mem 0xfbef8000-0xfbefffff irq 17 at device 0.0 on pci1 ral0: MAC/BBP RT2661B, RF RT2527 ral0: [ITHREAD] ppc0: <Parallel port> port 0x378-0x37f irq 7 on acpi0 ppbus0: <Parallel port bus> on ppc0 ppi0: <Parallel I/O> on ppbus0 tex ~ # ifconfig wlan1 create wlandev ral0 wlanmode hostap tex ~ # ifconfig wlan1 up scan SSID/MESH ID BSSID CHAN RATE S:N INT CAPS FRITZ!Box o... 00:24:fe:ac:7b:35 1 54M -93:-95 100 EPS RSN WPA WME HTCAP ATH WPS LINUX SECUR... 00:1b:2f:f6:d5:12 11 54M -83:-95 100 EPS RSN WPA WME tex ~ # tex ~ # ifconfig wlan1 192.168.0.1 netmask 255.255.255.0 ssid RTFM channel 11 tex ~ # ifconfig wlan1 wlan1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 00:16:b6:5d:73:05 inet6 fe80::216:b6ff:fe5d:7305%wlan1 prefixlen 64 scopeid 0x7 inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255 nd6 options=3<PERFORMNUD,ACCEPT_RTADV> media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap> status: running ssid RTFM channel 11 (2437 MHz 11g) bssid 00:16:b6:5d:73:05 country US authmode OPEN privacy OFF txpower 0 scanvalid 60 protmode CTS dtimperiod 1 -dfs tex ~ # pico /etc/rc.conf ............ wlans_ral0="wlan1" create_args_wlan1="wlanmode hostap mode 11g" ifconfig_wlan1="inet 192.168.0.1 netmask 0xffffff00 ssid RTFM channel 11" ............ tex ~ # pico /etc/pf.conf ............ nat from 192.168.0.0/24 to any -> 10.0.0.12 ............ tex ~ # /etc/rc.d/pf reload Reloading pf rules. tex ~ # sysctl net.inet.ip.forwarding=1 net.inet.ip.forwarding: 0 -> 1 tex ~ # echo 'net.inet.ip.forwarding=1' >> /etc/sysctl.conf tex ~ # ifconfig -m wlan1 wlan1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 00:16:b6:5d:73:05 inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255 inet6 fe80::216:b6ff:fe5d:7305%wlan1 prefixlen 64 scopeid 0x7 nd6 options=3<PERFORMNUD,ACCEPT_RTADV> media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap> status: running supported media: media OFDM/54Mbps mode autoselect mediaopt hostap media OFDM/48Mbps mode autoselect mediaopt hostap media OFDM/36Mbps mode autoselect mediaopt hostap media OFDM/24Mbps mode autoselect mediaopt hostap media OFDM/18Mbps mode autoselect mediaopt hostap media OFDM/12Mbps mode autoselect mediaopt hostap media OFDM/9Mbps mode autoselect mediaopt hostap media OFDM/6Mbps mode autoselect mediaopt hostap media DS/11Mbps mode autoselect mediaopt hostap media DS/5.5Mbps mode autoselect mediaopt hostap media DS/2Mbps mode autoselect mediaopt hostap media DS/1Mbps mode autoselect mediaopt hostap media OFDM/54Mbps mode 11g mediaopt hostap media OFDM/48Mbps mode 11g mediaopt hostap media OFDM/36Mbps mode 11g mediaopt hostap media OFDM/24Mbps mode 11g mediaopt hostap media OFDM/18Mbps mode 11g mediaopt hostap media OFDM/12Mbps mode 11g mediaopt hostap media OFDM/9Mbps mode 11g mediaopt hostap media OFDM/6Mbps mode 11g mediaopt hostap media DS/11Mbps mode 11g mediaopt hostap media DS/5.5Mbps mode 11g mediaopt hostap media DS/2Mbps mode 11g mediaopt hostap media DS/1Mbps mode 11g mediaopt hostap media autoselect mode 11g mediaopt hostap media DS/11Mbps mode 11b mediaopt hostap media DS/5.5Mbps mode 11b mediaopt hostap media DS/2Mbps mode 11b mediaopt hostap media DS/1Mbps mode 11b mediaopt hostap media autoselect mode 11b mediaopt hostap media autoselect mode autoselect mediaopt hostap ssid RTFM channel 11 (2462 MHz 11g) bssid 00:16:b6:5d:73:05 country US authmode OPEN privacy OFF txpower 0 scanvalid 60 protmode CTS dtimperiod 1 -dfs tex ~ # Alte note: - Daca doriti sa va faceti o jucarie de genul si nu pricepeti ceva, va pot ajuta. - O sa includ in acest thread inca un howto, pentru protejarea AP-ului.
    1 point
This leaderboard is set to Bucharest/GMT+02:00
×
×
  • Create New...