- Házi hangfal építés
- Azonnali alaplapos kérdések órája
- Nyaralás előtti hardverszemle
- Az évtized végéig maradhatnak a PC-kben a PCI Express 5.0-s SSD-k
- OLED monitor topik
- Ez már a középkategória: teszten a GeForce RTX 5070
- NVIDIA GeForce RTX 3080 / 3090 / Ti (GA102)
- Fujifilm X
- Philips LCD és LED TV-k
- Videós, mozgóképes topik
Aktív témák
-
alitak
senior tag
válasz
Forest_roby #899 üzenetére
Hát nem tudom, nem látok hibát. Idézőjelek nem tudom, hogy jól vannak-e, azt nézd át. Meg szerintem a dátumot is el kellene menteni, valamint a $text változón a parancsbeállítás előtt hajtsd végre az nl2br() függvényt. Próbáld beírni ezt:
$text = nl2br($text);
$datum = date(''YmdHis'');
$query = ''insert into comments (user,date,comment) values ('admin','$datum','$text')'';
if (mysql_query($query)) echo ''OK'';
else echo mysql_error;
[Szerkesztve] -
Forest_roby
őstag
Hi!
Megcsináltam ezt:
$query =
''CREATE TABLE comments ( '' .
''comment_id bigint(10) unsigned NOT NULL auto_increment, '' .
''user VARCHAR(20) NOT NULL, '' .
''date datetime NOT NULL, '' .
''comment text NOT NULL, '' .
''PRIMARY KEY (`comment_id`), '' .
''KEY `date` (`date`) )'';
idáig tuti a dolog : )
Megpróbáltam 1 sort bevinni, de híbát írt ki a gép.
$query = ''INSERT INTO comments (user,comment) VALUES ('admin',''' . nl2br($text) . ''')'';
Nem így kell feltölteni?
Előre is köszi!
Forest
[Szerkesztve] -
alitak
senior tag
válasz
Forest_roby #894 üzenetére
Amikor csinálja a táblát, szerinterm feleslegesen bonyolítod túl.
$query = ''CREATE TABLE users (
user_id int(10) unsigned NOT NULL auto_increment,
loginName VARCHAR(20) NOT NULL,
password VARCHAR(20) NOT NULL,
email VARCHAR(20) NOT NULL,
authorization int NOT NULL default '1',
PRIMARY KEY (`user_id`) )'';
A hibajelentésben meg minden le van írva:
Unknown MySQL server host 'forest_roby.extra.sql'
Nincs olyan host. hogy 'forest_roby.extra.sql' -
Forest_roby
őstag
fura, amikor először kipróbáltam ezt - nem működött, mert nem volt aktíválva az adatbázis.
Aktíváltam és utánna se működött.
Módosítottam a create_table.php -n - kikommenteztem a felesleges részeket ( semmi fontosat - lényeg hogy változott a file ) és lám már jó is.
Miért van ez? Nem is futtata le a php-t szerintem, csak cache-ből olvasta be a végeredményt. Ez nagyon idegesítő tud lenni. Minden esetre most műxik!
Köszi mindenkinek a segítséget!! -
skera
tag
válasz
Forest_roby #894 üzenetére
Próbáld ki a host-ot mysql1.extra.hu-val.
-
Forest_roby
őstag
hát én bezsongok, de csak nem akar működni.
Aktíváltam az adatbázist, már megjelenik a phpmyadmin is... szoval happy
De ha már egyszer megírtam ezt a kis szösszenetet, gondoltam már csakazért is kipróbálom, de nem megy!
config.php:
<?php
define(''DBHOST'', ''forest_roby.extra.sql'');
define(''DBUSER'', ''forest_roby'');
define(''DBPASS'', ''*********'');
define(''DBNAME'', ''forest_roby'');
?>
------------------------
create_table.php:
<?php
// CGI atiranyitas eltűntetése az url-ből (lásd 4. cikk)
$reszek=explode('/',$PHP_SELF);
$PHP_SELF=$reszek[count($reszek)-1];
include(''config.php'');
mysql_connect(DBHOST, DBUSER, DBPASS);
mysql_select_db(DBNAME);
$query =
''CREATE TABLE users ( '' .
''user_id int(10) unsigned NOT NULL auto_increment, '' .
''loginName VARCHAR(20) NOT NULL, '' .
''password VARCHAR(20) NOT NULL, '' .
''email VARCHAR(20) NOT NULL, '' .
''authorization int NOT NULL default '1', '' .
''PRIMARY KEY (`user_id`) )'';
$result =
mysql_query($query) or die(''Adatbazis hiba: mysql hibauzenet:''.mysql_error());
print(''tábla létrehozva!'');
?>
hibaüzenet még mindig ugyan ez:
Warning: mysql_connect() [function.mysql-connect]: Unknown MySQL server host 'forest_roby.extra.sql' (1) in /nfs/extra/admin/prepend/prepend.php(170) : system created function on line 29
mit ronthattam el?
[Szerkesztve] -
skera
tag
válasz
Forest_roby #891 üzenetére
Az extrán van phpmyadmin. Ahogy belépsz, az Eszközök menüpontban ott van a korábban említett MYSQL MANAGER. 3 gomb közül az egyik...
A kapcsolódást feleslegesen túlbonyolítottad.
$link = mysql_connect(''mysql1.extra.hu'',''usernév'',''jelszó'');
mysql_select_db(''adatbázisnév'');
Az adatbázisnév és a usernév extrán ugyanaz.
Ha ezt berakod a config fájlba és azt a fő php-d legelején hívod meg, akkor már kapcsolódik. De én azt javaslom, hogy a konfigba tedd bele ezt a 4 paramétert 4 külön változóba és a fő php fájlban csatlakozz ezekkel az adatbázis szerverhez. Előtte persze include!!!
[Szerkesztve] -
cucka
addikt
válasz
Forest_roby #891 üzenetére
pedig ott van. eszközök menüpont és utána klikk a mysql manager nevű gombra.
ez a hibaüzenet valami extrás helyi sajátosság lehet, tehát passz[link]
-
Forest_roby
őstag
hát én nem találom ott a phpmyadmint.
más:
MySQL szerver cím (kiszolgáló): felhasznalonev.extra.sql
a config.php -be pedig ezt írtam:
define(''DBHOST'', ''felhasznalonev.extra.sql'');
majd ezt include -olom, de nagyon erőteljesen reklamál, amikor futatom:
mysql_connect(): Unable to connect to MySQL server (felhasznalonev.extra.sql)! You should use the right password or activate your database access! in : on line
in /nfs/extra/admin/prepend/prepend.php(170) : system created function on line 35
pedig minden stimmel - nev, pass, adatbázis... nem értem.
mi lehet a gond?
mod: nem volt aktíválva az adatbázis a nevem alatthát ezt bebuktam.
[Szerkesztve] -
cucka
addikt
válasz
Forest_roby #889 üzenetére
igen, extrán van sqlite manager is, de azt még nem próbáltam, jó az a phpmyadmin.
(illetve annyira nem jó, de azért el lehet vele lenni. )
toad for mysql lenne a királyság. régebben próbáltam, akkor egy bug miatt nem működött nálam, lehet, azóta kijavították. -
cucka
addikt
válasz
Forest_roby #886 üzenetére
például a phpmyadmin-ra gondoltál?
az admin felületen az eszközök között találod mysql manager álnéven. -
Forest_roby
őstag
az otthoni gépen van phpmyadmin és a parancssoros módszert is használtam már!
( ezért is okoz most egy kis gondot ugyanez php-vel )
Most nem a saját gépemen akarok táblát létrehozni, hanem az extra.hu tárhelyemen. Gondoltam, hogy ott csak php-vel fog ez működni, de ha van rá jobb módszer, szívesen hallgatlak!
[Szerkesztve] -
cucka
addikt
válasz
Forest_roby #884 üzenetére
meg szabad kérdezni, hogy miért pont php-ból akarsz táblákat létrehozni? vannak erre jó adatbázis-matató eszközök, például a phpmyadmin, mysql query browser, elvetemülteknek meg a parancssoros kliens.
ha a query-d (bármilyen query) hibát ad, akkor azt meg tudod nézni a mysql_error() függvénnyel. ha nem ad hibát, akkor értelemszerűen lefutott. -
Forest_roby
őstag
Hi!
Köszi a választ!
ujabb kérdés:
Ha php -vel létrehozok az adatbázisban egy táblát ( mysql_query ), a megfelelő paraméterekkel, akkor, hogyan tudok arról megbizonyosodni, hogy jól is csináltam mindezt? Vagyis, van vmi lehetőség php-ben hogy leelenőrizzem, hogy létezik -e a tábla és ha létezik akkor olyan paraméterekkel, ahogy én szeretném?
Előre is köszi!
Forest -
-
Briganti
tag
hellosztok
valaki arulja el nekem mi a legelonyosegg mondszer arra hogy:
van nekem 3 legordulo menu-sorom (nap, honap, ev) ahova a latogato beirja a szuletesi datumat, es ezt atadom egy php-nak, es ossze kene hasonlitani a mai datummal, es valahogy kiszamitani hogy az illeto elmulte 18
erre kene egy jo metodus, mert en ahogy elkepzeltem az bonyolult, es biztos van egy nagyon egyszeru megoldas erre ...
koszi elore is! -
cucka
addikt
válasz
woodpaul #876 üzenetére
kis pontosítás:
char - max. 255 hosszú lehet
varchar - 1 vagy 2 byte-on tárolja a karakterlánc hosszát, vagyis max. ~65ezer byte fér bele.
(2 byte-os karakterkódolásnál nyilván ennek a fele)
azt egyébként el tudnád magyarázni, hogy miért lenne gyorsabb a char mint a varchar? nem találtam erről semmi információt, és érdekelne.
[Szerkesztve] -
woodpaul
őstag
Char-Varchar összehasonlítás:
Char:
(-) a megadott hosszúságot mindig kihasználja, ha rövidebb a szöveg, space-kkel egészíti ki (kevésbé takarékos)
(+) gyors
Varchar:
(+) pont annyi byte-ot foglal le, amennyit zárójelben megadtunk (+1 byte a hossznak, azt hiszem), charnál takarékosabb
(-) lassabb, mint a Char -
alitak
senior tag
válasz
Forest_roby #874 üzenetére
A parancs jó, de szerintem char helyett varchar -t használj.
A komment táblában nem tudom mit akarsz eltárolni. Ebben el tárolhatod a post küldőjét, idejét, valamit a szöveget.
create table comment (
komment_id bigint(10) not null auto_increment,
user varchar(30) not null,
datum datetime not null,
komment text not null,
primary key (`komment_id`),
key `datum` (`datum`)
);
A foreign key-re meg itt van leírás: [link] -
Forest_roby
őstag
Hi!
Megnéznéd ez, hogy jó -e?
CREATE TABLE users (
user_id int(10) unsigned NOT NULL auto_increment,
loginName CHAR(20) NOT NULL,
password CHAR(20) NOT NULL,
email CHAR(20) NOT NULL,
authorization int NOT NULL default '1',
PRIMARY KEY (user_id)
);
A CREATE TABLE comment -ben segítenél, nem értettem pár részt... pl: foreign key..., nem akarom elrontani.
Előre is köszi!
Forest -
tkazmer
addikt
Lehet úgy lekérdezni, hogy összeadja a sorok bizonyos celláiban lévő értékeket? Szóval egyik sor a cellájában van 2, egy másik sor a cellájában meg 3, és azt szeretném, h a lekérdezés eredményeként egy sorban kapjak 5-öt.
-
cucka
addikt
válasz
Forest_roby #868 üzenetére
1 - 1 sor. Milyen paramétereket érdemes eltárolni? ( count, nev, pass, mail, mégvalami? )
mindenképp kell egy id mező, amivel azonosítod a júzert. ez legyen primary key és célszerű, ha auto increment-es. kell még usernév, jelszó, ezen kívül pedig olyan adatok, amelyeket fel szeretnél használni. példa: ha minden szerző cikkje mellé oda akarod rakni a képét is, akkor kell majd egy mező, ahol eltárolod az illető kép nevét. (képet tárolhatod adatbázisban is, de ez nem feltétlenül jó megoldás)
kommenteket szintén illene indexelni, vagyis itt is lesz egy id mező (primary key, satöbbi), ezen kívül itt lesz a szerző id-ja, hogy tudd ki írta azt a cikket. ez egy foreign key és a users tábla id oszlopára mutat. ezeken felül pedig bármit eltárolhatsz a cikkhez, amit később fel akarsz használni, pl. szöveg, cím, bevezető, ilyesmi.. -
alitak
senior tag
válasz
Forest_roby #868 üzenetére
Felhasználókhoz szerintem kell: usernév, pass, mail, jogok. Esetleg ha számít hsz szám, vagy rang.
Hírekhez szerintem elég: user, dátum, komment (de ezt írtam asszem)
Kiíratásnál lehet megcsinálni, hogy a user nevére van egy mailto függvény.
Nekem a jogok számmal vannak jelölve. Alap az 1, átlaguser. Hozzászólhat, nyithat új témát. A 2 a moderátor, zárhat topicot, törölheti azt, hsz-ekkel ugyanezt. Van a 3, ami az admin (én), összes többi, tehát pl. userek listázása. Úgy van benne a php-ban, hogy if (session_is_registered(''jog'') && $_SESSION[''jog''
>1) ...
Ja, és a 0 a ban. Loginnál beolvasom a jogot, és session-nal küldöm állandóan.
A nemkívánatos részek szűrését írtam előbb. A feldolgoz.php megkapja a user nevét (session), a kommentet (post), és a dátumot meg date() függvénnyel. Aztán ezt az egészet berakod egy mysql táblába
insert into `táblanév` (mező1,mező2,mező3,...) values ('érték1','érték2','érték2',...)
Az id-t tábla létrehozásakor tedd auto_increment -re, azzal nem lesz akkor több gond.
Beolvasás meg select * from hirek order by id desc
Így idő szerint lesz sorba, a legutolsó hír legfelül.
Aztán jön egy while ciklus, mysql_fetch_array() függvényében. Én a hsz-eket táblázatba raktam. Ha be van jelentkezve (if session_is_registered.....), akkor lesz ott egy link az adott hsz-nél, ami pl ilyen: modosit.php?id=5 jelezvén azt, hogy az 5. hsz-ben akarsz változtatni.
Remélem érthető vagyok
mod: mindig olyanokon bukik az egész, amire nem is gondolnál. Kis köcsög hiba, hogy pl. valahol elakad a változó értéke, aztán fél órát keresed a hibát, már minden szart kiíratsz, végül rájösz, hogy nem jó helyen kerested, és 10 mp alatt tudod javítani az egészet. Ez a tapasztalat
Kéz- és lábtörést!
[Szerkesztve] -
Forest_roby
őstag
Hi!
Először is köszi a segítséget!
Természetesen, annak aki módosíthatja a weblapot, annak belépős lesz a weblap, egyébként nem. Kevés felhasználó lesz, de jól szeretném megcsinálni a mysql táblákat - ezért lenne egy olyan kérdésem, hogy:
A felhasznalok tablaban minden egyes felhasználó 1 - 1 sor. Milyen paramétereket érdemes eltárolni? ( count, nev, pass, mail, mégvalami? )
Jöhetnek a kommentek. Szóval akkor létre kell hozni egy pl.: hirek table -t és abban minden sor 1-1 új hír. A sorokban mit érdemes eltárolni? ( count, íro, szoveg, mail, date, mégvalami? )
Ezzel a mysql táblák letudva.
Jöhet a php rész. A beléptetést már meg tudom oldani ( hála ph! userek ). Jogosultságok? Lehet érdemes lenne vmilyen jogosultságra utaló dolgot is elmenteni a felhaszánlóneveknél?
Ha van jogosultság írni, akkor az adott user írhat a hírekbe.
ujhirek.php - bejön egy szövegszerkesztő szerűség (textarea) és a megírt szöveget elküldöm egy feldolgozo.php -nek post-tal. Ez a feldolgozo.php a szövegből kiszedi a nemkívánatos részeket ( meg tudom oldani ) és VALAHOGY menti a már elkészített táblában egy uj sorba - a sorban minden egyes elemet kitöltve.
Ezután header-rel vissza modnjuk a főoldalra, ahol elvileg megjelennek a(z új) hírek. És a főoldalon van egy olyan php kódrészlet, ami betölti az adott híreket - ha be vagy jelentkezve, akkor több opcióval....
Nagyából jól írtam le? A kérdéseim jogosak/érthetőek?
/a sql táblák létrehozása egy kis utánna nézéssel, talán nem okoz gondot. A bele való írás/olvasás/update-elés egy kis utánna járással nem okoz gondot. Mi van még, amin megbukhat a dolog....? Mindegy, majd még ugyis jövök kérdezni./ -
alitak
senior tag
válasz
Forest_roby #863 üzenetére
Re!
Először is kell egy html oldal, amiben ugye <form> van. Nem tudom, hogy az oldal beléptetős-e, tehát van-e session. Ha igen, akkor ez az oldal php lesz, és az elején le kell ellenőrizni, hogy jogosult-e írni vagy nem. Ha nem, akkor visszadobod header-rel a főoldalra.
Én most írok fórumot. Minden topic 1 tábla, és egy hsz, az egy sor. Ott eltárolom a hozzászóló nevét (user), a hsz idejét, és a kommentet. A dátum az datetime, a komment az text.
A textareába írt html kódok közül nem tudom, mi az amit nem akarsz hogy működjön. Nekem az így van:
$komment = str_replace(''<'',''<'',$komment);
$komment = str_replace(''|'',''|'',$komment);
$komment = str_replace(''>'',''>'',$komment);
$komment = str_replace(''''',''''',$komment);
$komment = str_replace('''',''"'',$komment);
$komment = str_replace(''&'',''&'',$komment);
htmlspecialchars($komment);
$komment = nl2br($komment);
Ezáltal a sortörés megoldva, idézőjelekkel nem tud kombinálni.
Kiíratni meg asszem menni fog.
Módosítani lehet úgy, hogy ha az illető adminnak van belépve (session ellenőrzés), akkor kiíratsz egy linket az adott hsz-nél, pl modosit.php -ra, ahol ott van még a hsz id-je. Tehát kb. így: modosit.php?id=$id
Ott megint lesz egy form, ami ilyen kb.:
<textarea>$komment</textarea>
Persze a kommentet először ki kell olvasni táblából. Utána jön egy update mysql parancs, és header vissza a főoldalra.
Remélem érthető voltam.
Tök jó, pont ma írtam a fórumomra a hsz módosítását, meg a moderátor jogok kiosztását :) -
Benmartin
senior tag
válasz
Forest_roby #863 üzenetére
[link] google-el 1 ms. volt.
-
Forest_roby
őstag
Hi!
Érdekelne, hogy hogyan lehet eltárolni php-mysql segítségével az ilyen PH! -hoz hasonló hozzászólásokat?
NEM AKAROK FÓRUMOT CSINÁLNI!
egy counter, dátum, név, email és az üzenetet kellene eltárolni.
az üzenetet vmi html -hez hasonló formátumban kellene tárolni /nyilván adatbázisba/, hogy a html kódok egy része működjön, ennek az ide-oda alakítását meg tudom oldani...
pozitívum lenne, ha a késöbbiekben az üzenet szerkeszthető lenne....
/ egy admin ( vagy a weblap tulajdonosa ) írogatna híreket az oldalra, egyébként /
Az érdekelne, hogy az adminnál és az esetleges user-eknél ( még max 3 ember ), a mysql táblájukban milyen paramétereket érdemes létrehozni....
és persze az érdekelne a leginkább, hogy a textarea tartalmát, hogyan lehet elmenteni a ( nemtom pl.: ) uzenetek táblában.
Néhol rövid kódok érdekelnének és főleg tanácsok, hogy neki tudjak állni....
Előre is köszi!
Forest
[Szerkesztve] -
skera
tag
válasz
vakondka #859 üzenetére
Csináltam egy próbát erre és Total Commanderben GZ-be vagyis GZIP-ként elmentve lefutott a példa. (Zip fájl-al nem futott le...) Még a tömörített állomány is csak 2048KB lehet szóval egy kis darabolgatás beleférne... 1 fájlba az tábladefiníció, 2 másikba pedig az adathalmaz szétbontva.
-
vakondka
őstag
válasz
paramparya #858 üzenetére
azt próbáltam először...de nem ment...mit csinálhattam rosszul ?
-
vakondka
őstag
Van egy óriás sql mentésem (9MB adatbázis mentés 56 táblával...) és valahogy le kellene futtatnom az új helyen (ami most localhost), de nem fut le, mert ugye ez túl nagy ahhoz...
van valami megoldás, vagy php program erre ?
Mert notepad-ban kézzel szétszedni elég sokáig tartana... -
tkazmer
addikt
Nem tudjátok esetleg, hogy az extra.hu-nál mi alapján kerülnek be a dátumok az adatbázisba? Mert nekem teljesen össze-vissza van, és nem a kiolvasással van a baj, a php myadmin is össze-vissza jelöli. A kiolvasás egyébként a köv:
select * from table order by date desc
Na most odáig rendben, hogy ez a dátumot rendezi az amúgy teljesen rendezetlen táblában, de az óra:perc:mp-t nem, így kb a következő van:
(1.bejegyz)
2007.01.07. 9:44:15
(5. bejegyz)
2007.01.07. 3:03:21
(10.bejegyz)
2007.01.07. 22:16:18
(30. bejegyz)
2007.01.07. 18:46:27 -
Lortech
addikt
válasz
woodpaul #851 üzenetére
Sőt, már az lenne a legjobb, ha a böngésző kódolná javascripttel, és azt adná tovább, így még sniffeléssel se lehetne csak a hasht megszerezni.
DeMD5 értelemszerűen nincs.Visszakódolni nem lehet, csak brute force-szal próbálgatni.
Bitzonságra: Az összes bemenő adatot nagyon jól át kell gondolni, le kell ellenőrizni, a legalattomosabb és leghülyébb usert feltételezve. Gyakori hiba , hogy különböző admin scripteket csak annyival védenek le, hogy csak admin felületen lehet rábökni, de ha egy akármilyen user találomra beírja, hogy deletealltable.php, vagy showallpassword.php, akkor bukta van -
woodpaul
őstag
válasz
Jester01 #850 üzenetére
Akkor szerinted hogy érdemes csinálni? Mondjuk így?
$jelszo = md5($jelszo);
$query = ''INSERT INTO register (..., pass, ...) VALUES (..., '$jelszo', ...);
$result = mysql_query($query);
Szerk:
Ja igen, még valami. Láttam objektumos MySQL kezelést is. Nem érdemes inkább azt használni, vagy a különbség csupán formai (pl. utolsó sor helyett $result = $conn->query($query);) ?
mysqli-s parancsokról mi a véleményetek? Pár szakkönyvben láttam, inkább ezeket használják...
[Szerkesztve] -
Jester01
veterán
válasz
burgatshow #846 üzenetére
Én például jobban szeretem a MySQL-ét használni egy lekérdezésben.
Miért? Ha már a php-ben alkalmaznád, akkor még a mysql felé irányuló kommunkációban sem lehetne ellopni a jelszót. -
woodpaul
őstag
Azt úgy értem, hogy van egy form, ami postolja a beírt adatokat egy másik PHP fájlnak, ami az elején a $_POST tömbből kiszedi az ''elküldött'' változókat. A kérdésem pedig az volt, hogy ez mennyire biztonságos így (működni remekül működik).
Az említett mysql_real_escape-et még sosem használtam, lehet, hogy ezért támadható az oldal? Komolyan, írok egy emailt annak a tagnak, ha ért a támadásokhoz, biztos tud javasolni vmi védekezést ellenük! -
woodpaul
őstag
válasz
burgatshow #846 üzenetére
Ha jól látom, az md5() oda-vissza működik, azaz nemcsak encryptel hanem decryptel is? Hm, nem rossz!
-
burgatshow
veterán
válasz
woodpaul #845 üzenetére
Az md5() egy függvény a php-ban, de a mysql is támogatja. Én például jobban szeretem a MySQL-ét használni egy lekérdezésben.
SELECT * FROM tabla WHERE username='user' AND password=MD5('$valtozo');
Ahol a $valtozo szerepel az lehet például a $valtozo = $_POST['postolt_jelszo']; -
woodpaul
őstag
Köszi! A Lorthech által emíltett md5() az egy beépített PHP függvény, mint a password()?
Töredelmesen bevallom, amikor a fórum motort írtam, mindeféle kódolás nélkül pakoltattam bele a felhasználó passwordjeit a táblába. Egy ügyes query-vel ezt utólag is módosítható, igaz?
Abból nem lehet baj, hogy a POST-tal elküldött változókat az egyszerűbb, $valtozo = $_POST['valtozo'formában adom át (set_global_variables be van kapcsolva, hogy működjön)?
-
woodpaul
őstag
Ha már az adatbázislopás szóba került... Milyen elvek betartásával lehet egy kevésbé feltörhető PHP+MySQL alapú webes alkalmazást írni?
Még kora ősszel írtam egy fórumot (az első nagyobb projectem), aztán nemsokára kaptam egy emailt, hogy igen könnyen feltörhető és vigyázzak! Ez kicsit rámhozta a frászt... -
tkazmer
addikt
válasz
Jester01 #840 üzenetére
Jah....rendben.
Másik kérdésem, hogy azt szeretném megoldani, hogy a user ip címétől függően kiírjon, vagy ne írjon ki vmi az oldal. Így probáltam:
<?php
$ip = $_SERVER['REMOTE_ADDR';
print ''ip: $ip'';
$megf_ip = '127.0.0.1'
if ($ip = $megf_ip){
print''ok'';
}
?>
De ez így nem jó. Mit kellene módosítanom?
Jah, ez a gond vele:
Parse error: parse error, unexpected T_IF ... -
tkazmer
addikt
Tudja valaki, hogyha azt mondom a mysql nek, hogy select * from tabla1, tabla2, akkor, ha mindkettő táblában 100 és 110 között van a sorok száma, miért kapok 10812 találatot?
-
alitak
senior tag
OK, köszi mindkettőtöknek a segítséget. Úgy néz ki, hogy müködik a bejelentkezés, kijelentkezés. Mostmár csak foltozni kell majd folyamatosan
-
Lortech
addikt
Session id az a session azonosítója.
Kliens oldalon egy cookie testesíti meg, ami tárolja az id-t. Ezt a cookie-t és vele az id-t a kliens minden oldallekéréskor küldi a szervernek, a szerver pedig azonosítja az id alapján a sessiont. Mivel azonosítva van a session, az ehhez rendelt változókat php-ből kényelmesen el tudod érni. Ha nagyon ''advanced'' akarsz lenni, akkor csinálhatod a session kezelést kézzel is, de értelmét nem látom a te esetedben. Hangsúlyozom, a session kezelés automatikus, nem neked kell küldeni az id-t, neked annyi a dolgod, hogy elindítod a session-t, aztán kiveszel, beteszel, amit akarsz. Logout-nál meg lezárod a sessiont.
[Szerkesztve] -
alitak
senior tag
Akkor session id az mire van? Továbbá minek akkor a session-okhoz mysql tábla? PHP black book-ban volt ilyesmi írva, viszont akkor már tényleg nem értem
-
cucka
addikt
ennek így nincs sok értelme. :)
először is a #831-ben írt kódom hibás, count(*) helyett simán * kell a lekérdezésbe.
a védett oldalra való átirányítás előtt pedig a legegyszerűbb, ha a user összes adatát benyomod a session-be, mert amúgy sem túl nagy adatmennyiség.
például így.
if (mysql_num_rows($result)===0) header(''Location: login.php'');
else {
$_SESSION['user_adatok']=mysql_fetch_assoc($result);
header(''Location: vedett_tartalom.php'');
}
így a továbbiakban az isset($_SESSION['user_adatok'])-al tudod megnézni, hogy be van-e jelentkezve a user és ha például a user nevét szeretnéd kiírni valahova, akkor azt a $_SESSION['user_adatok']['nev'] fogja megmondani. -
Lortech
addikt
Belépés után csak sessionid-t, a user nevét és a jogokat tárolom el egy mysql táblában, és csak az id-t küldöm session-nal.
Lehet, hogy ezt elírtad-e vagy félreértem, de ennek mi értelme? Arra van a session, hogy a hozzá tartozó adatokat ott tárold el, ne kelljen szüttyögni adatbázissal. Minden egyes lekérésnél nevet beolvasni teljesen felesleges terhelés a szervernek, azontúl, hogy bonyolítás is. -
alitak
senior tag
Az a nehéz, hogy még kezdő vagyok, és talán kicsit nagy fába vágtam a fejszém így az elején.
pl. eszembe sem jutott, hogy mysql parancsban használjam az and utasítást is. Az ilyen jellegű problémákat oldja majd meg a gyakorlat remélem
Belépés után csak sessionid-t, a user nevét és a jogokat tárolom el egy mysql táblában, és csak az id-t küldöm session-nal. -
cucka
addikt
nem értem, mi okoz ebben nehézséget :)
$user=mysql_real_escape_string($_POST['user']);
$jelszo=mysql_real_escape_string($_POST['jelszo']);
$result=mysql_query(''select count(*) from felh where user=$user and jelszo=$jelszo'');
if (mysql_num_rows($result)===0) header(''Location: login.php'');
else header(''Location: vedett_tartalom.php'');
die();
mod: későbbiekben érdemes lehet eltárolni a belépett user adatait, mondjuk session-ban, ilyen esetben count(*) helyett *-ot válassz ki a táblából, és mielőtt átirányítanád a védett oldalra, fetch-eld a result tartalmát és pakolgasd be a session-be a szükséges adatokat.
[Szerkesztve] -
alitak
senior tag
mysql_fetch_array eddig is terítéken volt már nálam, tudom, hogy asszociatív tömböt ad vissza. Viszont így utólag nézve a $sor === '''' -nek tényleg nincs túl sok értelme
Az lenne a cél, hogy miután vki megad egy olyan user nevet, ami nincs regisztrálva még, akkor header-rel visszadobja őt a login ablakba. Viszont az előbb írt kóddal ez nem megy. A 'felh' nevű táblában csak alitak nevű user van, és ha azt írom usernak, hogy 'a', akkor is tovább enged.
Viszont ha van ilyen sor:
if (!$sor = mysql_fetch_array($adatb)) ...;
akkor a ... helyén levő parancsok lefutnak, ha nem létező user nevet adott meg vki, nem?
A fórum, amin dolgozok nagyon kezdőcipőben van még, és mostanság túl sok időm nincs is, idén érettségiznem kéne. Lesz kódolás is, meg minden finomság, de PHP-ban is még aránylag új vagyok. -
Lortech
addikt
$sor = mysql_fetch_array($adatb);
A mysql_fetch_array fgv egy asszociatív tömböt ad vissza, így ennek a sornak nincs sok értelme szerintem. Vagy azt akarod megtudni, hogy lett-e egyáltalán eredmény? Mert ha igen, akkor azt vizsgáld meg inkább, hogy igaz-e.
tehát pl. if ($sor = mysql_fetch_array($adatb))
Észrevételek: ha loginról van szó, akkor a lekérdezésben usernévre és jelszóra keress, ne csak userre, így egy lépésben megúszod.
Így ha lett pontosan egy row eredmény, akkor login. Meg így feleslegesen nem nyalja be az adatokat az adatbázisból, csakha ténylegesen fel is lesz használva, tehát ha jó a user/pass. Bár ez elhanyagolható.
A jelszó pedig legalább egy md5()-tel legyen bekódolva (már regisztrációkor úgy teszed be adatbázisba), mert én személy szerint nem szeretnék olyan oldalon regelni, ahol egy adatbázislopással többszáz/ezer jelszót (köztük az enyémet) megszerezhetnek. -
alitak
senior tag
Re!
Van egy php kódom, ami nem megy:
$user = $_POST[''user'';
$pass = $_POST[''pass'';
$par = ''select * from felh where user='$user''';
$adatb = mysql_query($par);
$sor = mysql_fetch_array($adatb);
if ($sor==='''') echo ''V'';
Alapvetően az lenne a feladat, hogy ha vki beírja a usernevét+jelszót, akkor mysql-ből az $adatb nevű változóba kerül az a sor, ahol a user mező értéke a beírt usernév. Hogyan lehet azt megoldani, hogy ha nincs a táblában a megadott user, akkor pl. átdobja az oldalt egy másikra (gondolok itt a header megoldásra)? -
zeix
senior tag
Helló van egy olyan problémám, hogy:
van egy 160 oszlopos táblázatom, nekem abból lenne szükségem 3 vagy 4 oszlop értékeire amit egy másik táblábzatan tárolnék.
Végülis az a lényeg, hogy hogyan viszem be egyszerre több táblába az értékeket?
Az egyikbe mind a 160 érték kerülne bele a másikba csak a kiválasztott 3.
Előre is köszi a segítséget. -
woodpaul
őstag
DELETE FROM <tábla neve> WHERE <attribútum> = <attribútum értéke>;
pl.
DELETE FROM register WHERE login = 'woodpaul';
Szerk:
Nagyon figyelj oda arra, hogy jól add meg a WHERE feltételét, mivel könnyedén törölheted a tábla összes sorát! Ha nem vagy túl gyakorlott SQL-ben, ajánlom, hogy készíts másolatot az adott tábláról!
[Szerkesztve] -
tkazmer
addikt
Hogyan lehet egy sort törölni mysql-ben? Átfutottam a manual mysql függvényeit, de nem találtam köztük ilyesmit
-
RedAnt
aktív tag
válasz
Forest_roby #812 üzenetére
A három számból a php-t futtató felhasználóra a harmadik vonatkozik, hacsak nincs egy csoportban veled. Ha így lenne, akkor sem mennél sokra vele, mert akkor böngészőn keresztül ugyanúgy el lehetne érni Mivel itt 0 van, nem kap semmilyen jogosultságot a fájlon, így nem nyithatja meg. Chmoddal szerintem nem megoldható a dolog.
-
Tyrael
senior tag
válasz
Forest_roby #801 üzenetére
akkor ne 700-al probald, hanem 750-nel.
ja, latom kozben megoldodott...
Tyrael
[Szerkesztve] -
Forest_roby
őstag
válasz
Forest_roby #809 üzenetére
na, csak megtaláltam a megoldást! ( google code search )
debian:~# cat /etc/apache2/httpd.conf
<Directory /var/www/proba>
order allow,deny
AllowOverride AuthConfig
allow from all
Options None
</Directory>
debian:~# /etc/init.d/apache2 reload
Reloading web server config...1439
.
debian:~#
így műxik, a php-vel való megnyitás is!
Köszi mindenkinek, hogy idáig elnavigáltatok! -
Forest_roby
őstag
-
RedAnt
aktív tag
válasz
Forest_roby #807 üzenetére
extra.hu állítólag egész jó, ott talán engednek .htaccess-t is, egy próbát megér. De nem tudok sokat mondani ingyen tárhelyekről, szerencsére nem szokott rajtuk dolgom lenni...
-
RedAnt
aktív tag
válasz
Forest_roby #805 üzenetére
uw-n tudtommal nem használható .htaccess.
A webszerver közös beállításai vannak az említett httpd.conf fájlban (apache2-től kicsit máshogy van) Itt lehet beállítani hogy pl. miket lehessen a .htaccess fájlokkal engedélyezni/tiltani. De uw-n kötve hiszem hogy ezen változtathatsz...
Úgyhogy vagy keresel egy normális szolgáltatót, vagy jól eldugod az illető könyvtárat -
Forest_roby
őstag
Az itteni gépen nyilván tudnám másik mappába is tenni a dolgokat, de az uw -n ez nem megoldható, szóval marad a 2. megoldás.
Kipróbáltam és simán beengedett az oldalra. : |
Fentebb említette Tyrael, hogy engedélyezni kell ezt a .htaccess file-t vmilyen másik fileban ( httpd.conf ), megkerestem ezt a filet (/etc/apach2/httpd.conf) és tök üres volt.
Hogy kell engedélyezni?
[Szerkesztve] -
RedAnt
aktív tag
válasz
Forest_roby #803 üzenetére
Hozzáférsz a szerveren a webes mappán kívüli helyekhez? Mert ha igen akkor legegyszerűbb azokba tenni amiket nem akarod hogy kívülről láthatók legyenek.
Ha csak ahhoz a könyvtárhoz van hozzáférésed ami egyben a webes gyökérkönyvtárad, akkor igen, az apache-nak kell megmondani, hogy bizonyos fájl-lekéréseket ne szolgáljon ki.
Egy alkönyvtárt pl. kompletten letilthatsz ha teszel bele egy .htaccess fájlt a következő tartalommal:
Order deny, allow
Deny from all
Ezután pl. egy szinttel feljebb levő könyvtárban levő php-val el tudod érni a letiltott könyvtár fájljait mondjuk fopen-nel, de ha közvetlenül akarják elérni őket böngészőben, 403-at kapnak.
[Szerkesztve] -
Forest_roby
őstag
akkor mégiscsak vissza kell térnem a .htaccess filehoz?
hogy mit szeretnék?
Első lépésként el szeretném érni, hogy egy mappából csak php-vel lehesen fileokat olvasni, semmilyen más módon....
Ha ez megvan akkor jöhet egy php-mysql -es dolog. Felhasználónév/jelszó belépni egy dinamikus oldalra ami mindössze anyiból áll, hogy az épp említett mappában lévő fileokat kilistázza és melléjük nyom egy linket, amivel le tudom tölteni... / ezmár a végcél / -
RedAnt
aktív tag
válasz
Forest_roby #801 üzenetére
nem tudtam végigkövetni, konkrétan mi volt a probléma eredete, de azt megjegyezném, hogy a szerveren a php szkripteket általában egy www_data vagy hasonló nevű user futtatja (nem te), tehát ha chmod-dal letiltasz ''másoknak'' elérést valamihez, azt a php ugyanúgy nem fogja látni, mint ha te akarnád a böngésződből megnyitni.
[Szerkesztve] -
Forest_roby
őstag
Hi! /megint én
hát nem fog ez olyan könnyen menni! : (
A .htaccess file szerkesztésével meggyűlt a bajom - mindent írtak a tutorban csak pont azt nem, hogy-hogyan lehet csak php -val megnyitható mappát létrehozni ( ...vagy vmi ilyesmi... ).
Maradta a chmod 700 mappa. ez jól is működött:
Forbidden
You don't have permission to access /proba/proba.txt on this server.
Apache/2.2.3 (Debian) PHP/4.4.4-8 Server at localhost Port 80
de... csináltam egy másik mappát /var/www/view/ és bele egy view.php a fentebb említett scriptet beílesztettem a megfelelő modosításokkal és megpróbáltam vele megnyitni a beállított filet. erre:
<br />
<b>Warning</b>: filesize() [<a href='function.filesize'>function.filesize</a>: Stat failed for /var/www/proba/proba.txt (errno=13 - Permission denied) in <b>/var/www/view/view.php</b> on line <b>13</b><br />
<br />
...
..
.
Mit csináltam rosszúl?
Aktív témák
Hirdetés
- Kazy Computers - Fehérvár - Megbízható?
- Eredeti játékok OFF topik
- PlayerUnknown’s Battlegrounds
- További kavarás a Pixel 10-ek körül
- Házi hangfal építés
- Azonnali alaplapos kérdések órája
- Futás, futópályák
- Háztartási gépek
- Egyre csak fejlődik az AI, emberek tízezreit rúgja majd ki a BT
- Nyaralás előtti hardverszemle
- További aktív témák...
- Csere-Beszámítás! AMD Ryzen 7 7800X3D Processzor!
- Csere-Beszámítás! Olcsó Számítógép PC Akár játékra! Intel X5650 / GTX 1650 / 24GB / 240SSD+ 500HDD
- Apple Macbook Air 15 M4 256 gb Garanciális/számlás Ráadás Magic Mouse 2
- Ps 5 Slim digital megkímélt 1 hónap jótállás
- GAMER PC : RYZEN 7 7800X3D /// 32 GB DDR5/// RX 9070 XT 16GB /// 1TB NVME
- Samsung Galaxy S23 128GB, Kártyafüggetlen, 1 Év Garanciával
- ALIENWARE Area-51 R6 Threadripper Edition 1920X
- Lenovo ThinkPad 40AF docking station (DisplayLink)
- BESZÁMÍTÁS! 32GB (2x16) G.Skill Trident Z RGB 6600MHz DDR5 memória garanciával hibátlan működéssel
- BESZÁMÍTÁS! Sony PlayStation4 PRO 1TB fekete konzol extra játékokkal garanciával hibátlan működéssel
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: CAMERA-PRO Hungary Kft
Város: Budapest