- Magga: PLEX: multimédia az egész lakásban
- vrob: Az IBM PC és a játékok a 80-as években
- Parci: Milyen mosógépet vegyek?
- sziku69: Fűzzük össze a szavakat :)
- sziku69: Szólánc.
- Argos: Szeretem az ecetfát
- gban: Ingyen kellene, de tegnapra
- Flashback: Építsünk PC-t akciós alkatrészekből, lassan. upd: 05.28
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- bambano: Bambanő háza tája
Új hozzászólás Aktív témák
-
honda 1993
senior tag
válasz
PumpkinSeed #17099 üzenetére
Hmm.
Ez mind világos, csak olyan kellemetlen hogy folyamatosan jönnek az újabb dolgok amit még meg kell tanulnom ahoz hogy egy normálisan működő oldalt tudjak készíteni.
Én naívan azt hittem hogy HTML és CSS segítségével elkészítem az oldalamat és ezek után már csak a híreket kell majd legyártanom.No akkor én megyek is szépen PHP-t tanulni.
Köszi az útbaigazítást mindenkinek. -
PumpkinSeed
addikt
válasz
honda 1993 #17094 üzenetére
Elmondom, hogy hogy néz ki egy "portál motor". Elkezded tanulni a PHP-t változók, azok adattípusai, vezérlési szerkezetek, tömbök, adatbázis kezelés meg egyéb dolgok amik kellenek ahhoz, hogy stabil PHP tudásod legyen. Ezeket gyakorlod, megérted a funkcióikat, megérted azt, hogy egy adatbázisból kiolvasott adattal mit lehet kezdeni, megérted, hogy vezérlési szerkezetek hogyan épülnek fel, stb. Ha ezeket érted akkor nem kell olyan hülyeségeket csinálnod, hogy beírod a google-ba "portál motor". Szegény google érzi már magát kínosan, hogy ilyen hülyeségekre kell rákeresnie. Ha érted a PHP működését fejben összeáll, hogy bizonyos feladatokra milyen scriptet kell írni. Érteni fogod a működését és pár hét alatt összeraksz egy jó kis oldalt, de ehhez az kell, hogy megtanuld a PHP-t. Hiába nézegetsz kódokat, meg töltesz le bejelentkező felületeket ha nem érted mi, hogy működik, a programozás nehéz. Le kell ülni és gyakorolni kell, nézni tanulni. Annyi időt amennyit elsírtál itt a fórumon fordíthattál volna PHP tanulására is és most lehet nem kellene ezt leírjam.
Vegyük példának egy teljesen egyszerű hírportált. Ha végig gondolod mire lesz szükséged és előkapod a középiskolai tanulmányokat (feltéve, hogy már kijártad
) ott a MS Access. Az egy adatbázis kezelő program. Ebben mit tudsz csinálni? Adatokat eltárolni. Egy hír miből áll? Adatokból. Ha eltárolod a hírt egy adatbázisban akkor azt bármikor előkaphatod onnan és beteheted az oldaladra. Ezenkívül tudsz új hírt is beletenni az adatbázisba mert az új hír is adat. Mindezt menedzselni tudod az SQL nyelvvel. Ezekhez a feladatokhoz nem is kell olyan borzasztóan nagyon tudni az SQL-t mert csak simán néhány sort szedsz kis vagy éppen adsz hozzá. Ha kiszedted akkor azt valamiben le is kell tárolni. A változó mit csinál? Letárolja. Akkor már csak ki kell írni egy echo utasítással, és kész is van az, ami neked 400 HTML fájlban van.
Egy "portál motor" alatt nem nagy dologra kell gondolni, több ezer soros kódra meg ilyenek. Az általad "portál motor"-nak titulált dolog meg van 20 sorból, és ezer értelmetlen kódsort vált ki.
Na és most kapom le a leplet a nagy titokról. Tudod mit kell tenned ehhez? Leülni és esténként mialatt ide jössz inkább PHP-t tanulsz. A nekünk szánt pénzből veszel egy könyvet (mert manapság az sem szégyen), és elkezded olvasni, csinálni, olvasni, csinálni. Ha napi 1 órát tanulsz akkor már sokkal jobban haladsz előre mint azzal, hogy itt írogatsz.
-
honda 1993
senior tag
Nyeeemm.
Mert találtam én is egy pár jól megfogalmazott leírást a témával kapcsolatban.
Egyébként te is könnyen oltogatod a másikat azért mert nem ért valamihez, de tudod nem mindenki tanult évekig programozást ( Mindegy hogy suliban vagy éppen otthon a gép előtt ülve), a lényeg hogy több éves tapasztalatod lehet ezen a területen.
Én sem szoktam beszólni senkinek azért mert valamiben kevésbé tehetséges vagy gyakorlott mint én magam.
-
honda 1993
senior tag
válasz
DNReNTi #17095 üzenetére
Na ezekre mondjuk így már tényleg tudok támaszkodni.
Csak ugye én már ott tartok hogy inkább meg sem kérdeztem hogy mikre van szükségem mert úgyis csak azok a válaszok jöttek volna hogy "Miért nem tudsz rákeresni te magad?" meg a "Ha ennyire lusta vagy akkor inkább hagyd az egészet a pics@ba."
Miközben szó sincs egyikről sem, csak én nem találtam semmit a témával kapcsolatban.Minden esetre köszi a linkeket.
-
DNReNTi
őstag
válasz
honda 1993 #17094 üzenetére
""Max pár óra" igen annak aki ért a php-hoz."
Nem. Összedobni nulla tudással. Idézem magam: "maximum néhány óra összedobni pár doksi elolvasásával."Továbbá, csak a tisztánlátás végett. Had idézzem magam ismét, illetve az eredeti posztot:
"Már az is előrelépés lenne, ha az oldalt egy PHP fájl rakná (include-ozná) össze, és a linkben megadott paraméternek megfelelő tartalmat húzná be, teszem azt egy fájlból. Ez persze sehol sincs még a portálmotorhoz, nevezzük inkább szakócának (pattintott kő), az orvosi robotok korában."
Kulcs: Ez még sehol nincs egy portálmotorhoz. DE előrelépés!Ahhoz hogy ezt meg tudd csinálni az alábbiakra van szükség:
- PHP minimális alapok.
- include();
- paraméterátadás ($_GET).
- minimális hibakezelés.Na ezt összeguglizni max pár óra. )
Hajrá hajrá! -
honda 1993
senior tag
válasz
DNReNTi #17093 üzenetére
Nos igen elhiheted hogy én is annak örülnék a legjobban ha saját magam meg tudnám írni.
"Max pár óra" igen annak aki ért a php-hoz.Én sajnos azt sem tudom hogy hogy néz ki egy ilyennek a felépítése, pedig guglizgattam rendesen.
Csak ugye ha az ember azt sem tudja hogy mit is keres akkor úgy nehezebb.
Merthogy a "portálmotor" kifejezésre van kb1500 találat és azok között mindent találtam csak olyat nem amire nekem lenne szükségem... -
DNReNTi
őstag
válasz
honda 1993 #17092 üzenetére
Bakker. Kicsit próbáld má' meg megerőltetni magad.
Amit én leírtam példaképp az igazán nem nagy kaland, maximum néhány óra (!!! óriási túlzással, lvl80-as lustasággal számolva) összedobni pár doksi elolvasásával. Gyakorlatilag elegendő egy minimál PHP tudás, amit én írtam még adatbázist sem igényel.
"Valaki esetleg elvállalná?"
Teszem azt valaki elvállalja, te meg kifizeted, borítékolható mondjuk, hogy zsebbe kell nyúlni. Szóval, kész a portálmotor. Egyrészt: Mit kezdesz vele? Mert, hogy azt se fogod tudni az most jön vagy megy az 100%. Másrészt: Ha nem akarsz a megírásával kínlódni, akkor megint ott tartunk amiben a másik topikban már volt szó: Ingyenes tartalomkezelő rendszer. -
honda 1993
senior tag
Sziasztok.
DNReNTI Említett egy portálmotort, ami azt a célt szolgálja hogy ne kelljen minden egyes alkalommal új HTML fájlt létrehoznom amikor valamit fel szeretnék tölteni az oldalamra.Nos mivel én úgysem tudom hogy ezt hogyan kellene elkezdeni, de még csak elképzelésem sincs egy ilyennek a működéséről, arra gondoltam hogy azok közül akiket "ismerek" innen a PH-ról, megkérek valakit hogy csinálja meg nekem.
Természetesen nem ingyen kérném.
Valaki esetleg elvállalná ? -
DNReNTi
őstag
válasz
PumpkinSeed #17090 üzenetére
Igazából még csak nem is plusz lekérdezés, ha ügyesen csinálod, akkor az egész felhasználó objektumodat annak minden tulajdonságával létre tudod hozni egyetlen lekérdezéssel. Kb nulla plusz terhelés.
-
PumpkinSeed
addikt
válasz
Sk8erPeter #17088 üzenetére
Értem akkor marad a query-s módszer, most már véglegesen, bár a projekt még csak tervezés alatt van, de jobb ilyen dolgokat előre letisztázni.
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #17084 üzenetére
"Amúgy azért lenne fontos, mert pontokat kapnak a felhasználók bizonyos oldalak meglátogatásáért, és hogy ne legyen minden oldal töltésnél adatbázis művelet így úgy gondoltam, hogy letárolom cookieba és csak valamilyen időközönként tárolom le."
Hát pedig de, az ellenőrzést és szükség esetén a pontnövelést, és ezzel az adatbázis-műveletet azonnal az oldalletöltésnél, szerveroldalon végezd el, ilyen feladatokat semmiképp se rakj át kliensoldalra. Egy normálisan karbantartott adatbázisnál, nem feleslegesen agyonbonyolított query-knél ez nem szabadna, hogy gondot okozzon. Ha gyorsítani akarsz ezen, akkor ezt szerveroldalon végezd, ne úgy akarj gyorsítani, hogy azon töröd az agyad, hogy hogyan fogadj el megbízhatatlan adatforrást (minden adatforrás megbízhatatlan, ami a klienstől származik) valamilyen szinten megbízhatónak. -
válasz
PumpkinSeed #17084 üzenetére
Használj checksumot. De ez csak egy ötlet, a web nem az én területem.
-
Zedz
addikt
válasz
PumpkinSeed #17084 üzenetére
Ha ennyire fontos számodra az adat és biztos helyen akarod tudni, akkor szerintem is felesleges spórolni azon az 1 queryn. Az a biztos, ha elrakod DB-be, onnan már nem olyan egyszerű eltüntetni.
-
wis
tag
válasz
PumpkinSeed #17084 üzenetére
A leírásodból nem derült ki számomra, hogy miért probléma minden oldalletöltésnél egy adatbázis művelet, hisz ez teljesen természetes manapság, plusz egy query nem számít. Esetleg próbálkozhatsz azzal, hogy valamilyen memória alapú táblában tárolod egy ideig a látogatásokat, így csökkentve a lemezterhelést.
A manipulációt úgy tudod elkerülni, ha egy titkosított adatot tárolsz a felhasználónál ami visszafejtésnél kibukik ha belenyúltak.
-
PumpkinSeed
addikt
Erre gondoltam én is, hogy hülye kérdés volt, mert módosítható. Amúgy azért lenne fontos, mert pontokat kapnak a felhasználók bizonyos oldalak meglátogatásáért, és hogy ne legyen minden oldal töltésnél adatbázis művelet így úgy gondoltam, hogy letárolom cookieba és csak valamilyen időközönként tárolom le. Ezért lenne fontos, hogy azok ne legyenek manipulálhatóak.
-
wis
tag
válasz
PumpkinSeed #17082 üzenetére
Minden amit a kliens oldalon tárolsz módosítható. Egyébként miért cél, hogy ne lehessen módosítani?
-
PumpkinSeed
addikt
A cookie-k mennyire módosíthatók kliens oldalon? Azt kellene megoldjam, hogy cookie-ban kellene olyan adatot tároljak amit nem szabadna módosítani.
-
DNReNTi
őstag
válasz
Jim Tonic #17075 üzenetére
Szia,
Ha számok összeadásáról van van szó, akkor a .5 is 0.5, illetve a 00 az 0. Ha azonban string típusú változók, akkor egy az egyben fűzi őket össze, ahogy le van írva. Másik csavar lehet, ha a változók egész szám típusúak, de a művelet konkatenáció nem összeadás. Akkor megint más jön ki. -
Helló PHP Guruk!
Gyors kérdésem lenne kódértelmezéshez: a .5 az 0.5 egy összeadásban? A 00 mi?
-
sztanozs
veterán
válasz
supercow #17073 üzenetére
Jó az oldal, amit linkeltél (bár több, mint két éves a cikk) - de továbbra is kitartok amellett, hogy a böngésző a leggyengébb szem a védelmi láncban. Amennyiben böngésző dekódol az egyetlen helyben tárolt kulccsal - itt az egyetlen probléma maga a böngésző - egyszerűen nincs lehetőség megfelelően "elzárni" a kulcsot, amit a kliens oldali kód használ.
Kicsit végiggondolva, akövetkezők használhatók a kulcs átadására (szerver és kliens oldal között):
1. Cookie, form fields, header fields - mindegyikkel az a gond, hogy bármelyik JS elérheti, amelyik be tud töltődni az oldal scope-ja alatt...
2. Javascript (non-global) hardcoded privát változó/konstans - ezzel az a gond, hogy cache-elődik a gépre és utólag kibányászható...
3. XHTTP Request http-only cookie-val, válasz (master password, titkosított jelszó adatbázis) privát változókba tárolva - ez talán legkevésbé kockázatos megoldás, így nem kell hardcode-olni a master hash-t és a jelszó adatbázist. az alábbi triviális támadási módok vannak ellene:
- Másik JS is tud egy XHTTP kérést küldeni és neki is elküldi a szerver a master hash-t/ jelszó adatbázist. Illetve másik JS is el tudja érni a privát változóink publikus interfészét, tudja hívogatni a metódusokat...
Digitálisan aláírt JS kikényszerítésével lehet esetleg védekezni ezek ellen.
- Böngésző JS debuggerén keresztül hozzá lehet férni a változókhoz (egyes beépülő modulok ezt is tudják kontrollálni) -
supercow
őstag
válasz
sztanozs #17072 üzenetére
Az alagondolat onnan jött, hogy pl a blockchain.info is kódolja a tárcákat a böngészőben feltöltés előtt. Nyilván a böngésző is támadható mindenféle JS kóddal és kiterjesztésekkel, de akkor is, talán biztonságosabb egy kicsit ha két oldalon zajlik a titkosítás.
The Site uses javascript the encrypt and decrypt wallet client side in the user's browser. The encryption is done using AES-256 which is likely to be secure for the foreseeable future.
Wallets are simply json files containing private keys. The entire json file is encrypted by the users browser before being uploaded to us. So when a wallet reaches our server is appears as random Base64 string. This means we cannot view your balance, see your transactions or addresses and cannot make transactions on your behalf.http://lifehacker.com/5944969/which-password-manager-is-the-most-secure
Online password managers such as LastPass and Roboform Everywhere encrypt your password database and give you the only key—in the form of a master password that only you know. All the encryption and decryption happens locally on your computer.Mindegy, ez csak az egyik megközelítés, én ilyet próbálnék ha kéne. Megkapom a szervertől a titkosított jelszót, amit majd a böngésző dekódol az egyetlen helyben tárolt kulccsal, ha meg kell mutatnia.
-
sztanozs
veterán
válasz
supercow #17071 üzenetére
Én "böngészó alapon" semmilyen jelszó manager eszközt nem készítenék. De ez lehet, hogy csak a saját hülyeségem.
Adatbázisban tárolva amúgy:
1. Adatbázisból user egyedi (user regisztrációkor random generált) salt lekérése
2. user login (master) jelszóból és lekért saltból egyedi jelszó készítése
3. a tárolt jelszó (be/ki) titkosítása az egyedi jelszóvalMásik megoldás lehet a PKI (publikus/privát kulcsok) használata titkosításra, ehhez kell valamiféle PKI infrastruktúra.
-
supercow
őstag
válasz
Proci85 #17068 üzenetére
ha nullárol írod meg, szerintem valahogy böngészőben titkosíts mindent a feltöltés _előtt_ ( pl jquery-crypt ). mondjuk belépéskor bekéred a jelszót, hash-t tárolod JS változóban, aztán azt használod kulcsnak ahhoz amit feltöltesz, meg visszafelé megjelenítéshez.
lopás esetén nem lehet visszafejteni, mert a kulcsot még te sem tudod, csak a böngészőben van/volt meg, teljesen elkülönítve a szerveredtől.
de ha nem akarod a spanyolviaszt megint feltalálni.. pl google "php password manager"
http://sourceforge.net/projects/ppma/files/
illetve itt.
vagy https://clipperz.is/, https://github.com/clipperz/password-manager -
Proci85
senior tag
Sziasztok
Egy jelszó tároló felületet készítek PHP+MySQL alapon és egy kis segítséget szeretnék kérni.
Az SQL-ben tárolt jelszavakat encryptelni kell. Hogyan érdemes, hogy kellően biztonságos legyen?
Azt találtam ki, hogy a felhasználó login jelszó 2 részből áll. 1 fix, mindenkinél azonos részből és egy egyediből, ami felhasználónként más. Az egyedi jelszó az user azonosításhoz kell majd.
A lényeg a fix jelszón van, ami alapján encryptálja a jelszavakat a PHP és úgy kerül az adatbázisba. Így a decrypthez szükséges kulcs nem a PHP kódban vagy az SQL-ben van, tehát adatbázis lopás esetén nehezebb visszafejteni.A másik ötletem az, hogy alapból a PHP-ban van a kulcs, de a login során bekért fix jelszóval megsózom.
Azokhoz fordulok akik csináltak vagy láttak már ilyet. Hogyan célszerű egy ilyet megvalósítani?
Köszönöm!
-
fordfairlane
veterán
válasz
Speeedfire #17066 üzenetére
Tudok olvasni, te nem tudsz fogalmazni értelmesen.
Az 5.4-es PHP-ban az égvilágon semmi nem vált elfogadottá vagy nem elfogadottá. A <? operátor kezelése sem változott. Annyi történt, hogy a <?= akkor is működik, ha a short_open_tag OFF-ban van. A <? és <?= két különböző dolog.
Ha nem erre értetted, akkor én nem értem, mire vonatkozik az a mondatrész, hogy "Ez igaz is volt...".
-
Speeedfire
félisten
válasz
fordfairlane #17065 üzenetére
-
fordfairlane
veterán
válasz
Speeedfire #17064 üzenetére
Nem ugyanezt írtad. A <? használata továbbra sem ajánlott, mert ha a short_open_tags nincs engedélyezve, nem működik. A <? és <?= két külön taggá vált.
-
Speeedfire
félisten
válasz
fordfairlane #17063 üzenetére
Ugyan ezt írtam én is kettővel feljebb.
-
fordfairlane
veterán
válasz
Speeedfire #17060 üzenetére
Az, hogy elfogadott vagy sem, attól függ, hogy ki milyen kódolási konvenciót követ. A PSR-1 pl. így kezdődik:
Files MUST use only <?php and <?= tags.
Ami az 5.4-es PHP-ban változott az az, hogy ha a short_open_tag nincs engedélyezve, a <?= akkor is működik.
-
Speeedfire
félisten
válasz
Sk8erPeter #17061 üzenetére
Nem volt tiltott, de ajánlott se.
Ezzel viszont nagyon szép, átlátható view-okat lehet csinálni. Szinte csak a html kód marad. -
Sk8erPeter
nagyúr
válasz
Speeedfire #17060 üzenetére
Korábban sem tiltotta senki, hogy engedélyezve legyen.
Ízlés kérdése, én azért nem komálom, mert szerintem rontja az olvashatóságot, én feleslegesnek látom lespórolni azt a pár karaktert, számomra csúnyább tőle a kód, de ez tök szubjektív, a fejlesztőre vagy fejlesztőbrigádra van bízva ennek az eldöntése.
-
Sk8erPeter
nagyúr
válasz
#68216320 #17057 üzenetére
Most, hogy engedélyezted, cseréld is le az összeset
https://gist.github.com/jankkhvej/1117678 -
#68216320
törölt tag
A "php.ini"-ben hol lehet beállítani, hogy ne csak a <?php hanem a <? is elfogadott legyen?
Került hozzám egy kód, amiben mindenhol csak a <? szerepel. Átírni macerás lenne.
Update: Megvan. short_open_tag = On
-
DNReNTi
őstag
Ó je. Most először látok ilyet álláshirdetésben:
"Előnyt jelent: PHPStorm fejlesztői környezet ismerete"
Metál! -
martin66
senior tag
válasz
fordfairlane #17052 üzenetére
Köszönöm!
Így már működik! -
fordfairlane
veterán
válasz
Sk8erPeter #17053 üzenetére
A kódminőség nem valami fényes, de rengeteg példát lehet találni google-lal.
-
Sk8erPeter
nagyúr
válasz
fordfairlane #17052 üzenetére
Ja, és valóban, ott volt egy tök felesleges kódblokklezárás, majd üres sor, majd megint kódblokk-kezdés, észre se vettem. Mondjuk a kódban továbbra sincs egy sornyi validálás sem, szóval ez még mindig úgy, ahogy van, fos...
-
fordfairlane
veterán
válasz
martin66 #17051 üzenetére
Szedd ki a kódból a fölösleges programrészt:
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: YourWebsite.com';
$to = 'bmcsmartin77@gmail.com';
$subject = 'Email Inquiry';
$body = "From: $name\n E-Mail: $email\n Message:\n $message";
if ($_POST['submit']) {
if (mail ($to, $subject, $body, $from)) {
header('Location: http://www.example.com/');
} else {
echo '<p>Oops! An error occurred. Try sending your message again.</p>';
}
}
?> -
martin66
senior tag
válasz
Sk8erPeter #17050 üzenetére
Okés, köszönöm.
Természeten nem vártam el, hogy készíts egyet, a netről is tökéletesen megfelelő lenne, az előzőt is onnan szedtem. Akkor Guglizok tovább. -
Sk8erPeter
nagyúr
válasz
martin66 #17049 üzenetére
Hát sorry, de másokhoz hasonlóan éppen adódó szabadidőmben látogatok csak fel, hobbiból, nincs tengernyi időm, konkrét hiba javításában, konkrét kérdés megválaszolásában szívesen segítek, de elölről megírni neked egy ilyet melós. Persze reméljük, hogy lesz lelkes önkéntes, aki bevállalja (amikor először kezdtem segítgetni a topicban, akkor még én is lelkes voltam, aztán rájöttem, hogy nem érdemes, az ember a kisujját nyújtja, akkor az esetek többségében az egész karja kell, és mindez véget nem érő folyamat, aminek az eredménye az, hogy nekem rengeteg időm elment, a másik meg copy-paste-el, aztán köszönés nélkül távozik
).
Rengeteg témához kapcsolódó, de az általad írtnál sokkal szebb megoldás, tutorial létezik, ha pár percig guglizol, biztos lehetsz benne, hogy kész megoldásokat kapsz. Persze főleg angol anyagokban érdemes keresni, "form validation php", "form processing php", stb. kulcsszavak segítségével... -
martin66
senior tag
válasz
Sk8erPeter #17048 üzenetére
Értem.
Sajnos ez is egy letöltött ingyenes üzenetküldő. Esetleg te tudnál küldeni nekem egy nagyjábol jó fajta átirányítós üzenetküldő formot?
Nagyon sokat segítenél.Köszönöm.
-
Sk8erPeter
nagyúr
válasz
martin66 #17047 üzenetére
Ezek szerint van output még a header-kiküldési kísérlet előtt, ez így nem fog működni (pontosan ezzel kezdtem), úgyhogy ne legyen. A feldolgozás legyen teljesen különálló fájlban, ne legyen egybeömlesztve azzal, ahol kiíratod az űrlapot.
Ez a kód egyébként még borzalmasan hiányos, sehol sem validálod az űrlapot (nem ellenőrzöd, hogy egyáltalán léteznek-e az általad elvárt kulcsok a $_POST tömbben, illetve a felhasználó által megadott adatok megfelelnek-e bármilyen elvárt formátumnak), az ELSŐ feladat mindig az legyen, hogy elkészíted a felhasználótól kapott adatok ellenőrzésére szolgáló kódrészletet. Soha ne bízz meg felhasználótól kapott adatokban. -
martin66
senior tag
válasz
Sk8erPeter #17046 üzenetére
A PHP-t így módosítottam:
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: YourWebsite.com';
$to = 'bmcsmartin77@gmail.com';
$subject = 'Email Inquiry';$body = "From: $name\n E-Mail: $email\n Message:\n $message";
?><?php
if ($_POST['submit']) {
if (mail ($to, $subject, $body, $from)) {
header('Location: http://www.example.com/');
} else {
echo '<p>Oops! An error occurred. Try sending your message again.</p>';
}
}
?>Sajnos ezt a hibát írja ki:
Warning: Cannot modify header information - headers already sent by (output started at /home/httpd/www/domain.com/html/form.php:12) in /home/httpd/www/domain.com/html/form.php on line 15 -
-
martin66
senior tag
Sziasztok,
Egy kis segítséget kérnék.
Van egy contact formomom és azt szeretném, hogy, amikor rá mennek, hogy submit (email üzenet küldése), akkor egy URL címre (http://valami.hu/koszonjuk.html) irányítsa a felhasználót.
A form:
<form action="form.php" method="post" enctype="multipart/form-data"><h1 class="title">Contact</h1>
<label></label>
<input name="name" required="required" placeholder="Your Name"><label></label>
<input name="email" type="email" required="required" placeholder="Your Email"><label></label>
<textarea name="message" cols="20" rows="5" required="required" placeholder="Message"></textarea><input id="cancel" name="cancel" value="Cancel" />
<input id="submit" name="submit" type="submit" value="Submit">
</form>
A PHP:
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: YourWebsite.com';
$to = 'bmcsmartin77@gmail.com';
$subject = 'Email Inquiry';$body = "From: $name\n E-Mail: $email\n Message:\n $message";
?><?php
if ($_POST['submit']) {
if (mail ($to, $subject, $body, $from)) {
//echo '<p>Thank you for your email!</p>';
} else {
echo '<p>Oops! An error occurred. Try sending your message again.</p>';
}
}
?>KÖSZÖNÖM.
-
DrojDtroll
veterán
válasz
Peter Kiss #17042 üzenetére
Köszönöm szépen mindkettőtöknek.
-
Tele von Zsinór
őstag
válasz
PumpkinSeed #17029 üzenetére
Kezdd például itt: https://wiki.php.net/rfc#php_70
Ez a lista folyamatosan bővülni fog a kiadásig, ami még bőven odébb van (lásd itt a php 7.0 timeline rfc-t).
-
Peter Kiss
őstag
válasz
DrojDtroll #17041 üzenetére
Tippek:
A simple tutorial
PHP 101: PHP For the Absolute BeginnerMagyar tutorial oldalakat/könyveket elfelejtheted, ennyi biztos.
-
Peter Kiss
őstag
válasz
DrojDtroll #17038 üzenetére
Szóval az életben nem programoztál még PHP-ban?
-
DNReNTi
őstag
válasz
DrojDtroll #17038 üzenetére
"a php-t mivel kezdjem?"
<?phpBocs nem hagyhattam ki.
Szerk:
Komolyra: Teljesen a nulláról akarod ezt megoldani? -
DrojDtroll
veterán
válasz
Peter Kiss #17037 üzenetére
Köszi és magát a php-t mivel kezdjem?
-
Peter Kiss
őstag
válasz
DrojDtroll #17036 üzenetére
Talán ezzel kellene kezdeni: fgetcsv
-
DrojDtroll
veterán
válasz
Peter Kiss #17035 üzenetére
Köszi, valami segítséget tudnál adni, hol induljak el?
teljesen kezdő vagyok
-
Peter Kiss
őstag
válasz
DrojDtroll #17034 üzenetére
Persze.
-
DrojDtroll
veterán
Ezt php-ban meg lehet valósítani?
-
moltam88
tag
válasz
EmberXY #17031 üzenetére
Az URL-t így kiegészítve működik a szűrés: http://atw.hu/toplista?id=3.
(Ez egyébként nem törvényszerű, csak éppen szerencséd van, és úgy csinálták meg, hogy url paramétert is figyelik a szűrésnél, nem csak a form-ban elküldöttet).
Az egyenlőségjel után kell megadni a kategória azonosítóját, amit html-ből tudsz kinézni. A forráskódban (ctrl+u billenyűkombinációval meg tudod nyitni a böngészőben) a value="kategória azonosító" részből kapod az id értékét (pl. 1-es Állat-növény, 2-es általános, stb.):
<option value="1">Állat-növény</option>
<option value="2">Általános</option>
<option value="3" selected>Autó-motor</option>
<option value="4">Cég</option>
<option value="5">Család</option>
<option value="6">Divat</option> -
EmberXY
veterán
Sziasztok!
Nem tudom, jó helyen járok-e, de megpróbálkozok itt a kérdésemmel...Meg lehet oldani valahogyan azt, hogy ezen az oldalon a megnyitáskor a toplistán belül a különböző kategóriákra az URL-ben tudjak hivatkozni, vagyis egyből egy adott kategóriát nyisson meg, ne kelljen kiválasztani? Azt szeretném elérni, hogy ha egy bizonyos kategóriát akarok megnézni (csak bizonyos oldalak helyezése, látogatottsága érdekel), akkor ne kelljen manuálisan kiválasztani, mondjuk pl hogy "internet", és ráklikkelni a Listáz gombra, hanem az URL alapján az oldal megnyitásakor már egyből az adott kategória legyen listázva. Tehát az érdekelne, hogy az URL-t hogyan kéne módosítani (gondolom valamiféle operátorokkal, ha egyáltalán lehet)?
Köszönöm előre is. -
gyga
senior tag
válasz
Peter Kiss #17027 üzenetére
Fogalmam sincs hogyan lehetne erre vmi frissítést tenni
-
PumpkinSeed
addikt
-
gyga
senior tag
Zyxel NSA 310
-
gyga
senior tag
válasz
Peter Kiss #17025 üzenetére
Erre a nasra ez a gyárilag legfrissebb felület
manuálisan meg nem találtam leírást a frissítésre.
Az a baj hogy ez egy NAS. Nem lehet csak úgy telepítgetni mindenfélét. -
gyga
senior tag
Sziasztok.
Zyxel nason fut egy phpmyadmin rendszer. Az lenne a problémám hogy nem tudom a táblákat összekapcsolni mert nincs innodb Motor.
[link]
[link]
Van e valamilyen megoldás rá?2.
Accesben megszoktam hogy ha beírtam új adatot akkor automatice kapott "id"-t. phpmyadmin-nál pedig csak utólag kap auto increment "id"-t. Így mivel 2 táblába egyszerre viszek fel adatot és ezek kapcsolatban vannak egymással akkor hiányolja a másik táblában levő kapcsolt adatot. Hogy lehet ezt kiküszöbölni. Elég hülyén fogalmaztam bocsesz. Nem vagyok nagy guruja, csak most próbálgatom a phpmyadmint. -
supercow
őstag
válasz
tothjozsi96 #17022 üzenetére
külső time szerverről szedj időt, azt tárold el a helyi timstamp helyett pl ilyesmivel. A rendszergazda meg rakjon be cron-ba time frissítést..
-
tothjozsi96
addikt
Van arra megoldás hogy az oldal ne a szerver gép beállított idejét írja ki?
Van egy üzenőfal és minden egyes üzenetnél elvan tárolva hogy óra:perc-kor lett beküldve.
De a szerver gépen van pár perces csuszás. De van hogy ez nő, és több lesz. Tehát az a megoldás nem jó hogy hozzá adok 300 másodpercet.
Létezik valami olyan megoldás ami nemzetközi pontos időt írja ki, vagy hasonló pontos időt megad és nem a szerver gépét? -
#39417856
törölt tag
válasz
Peter Kiss #17020 üzenetére
Köszönöm szépen a segítséget. Így már jó
-
#39417856
törölt tag
válasz
Peter Kiss #17018 üzenetére
átírtam azt a részt, de nem vettem észre különbséget az előzőhöz képest. ez mit javítana a kódon? elvileg ez miatt tűnne el az index.php? Ha csak kód szépítésre írtad akkor pedig köszi
-
#39417856
törölt tag
Sziasztok!
Írtam egy fájl és mappa listázó kódot php-ben, ami így néz ki:
<table id="content">
<tr><td> <ul>
<?php
$dirpath = ".";
$dh = opendir($dirpath);
while (false !== ($file = readdir($dh))) {
if($file == "..") {
echo "<b>A ";
echo getcwd();
echo " mappában található fájlok: <br><br>";
echo "<a href=\"$file\">[...] </a><br>";
} else if($file != ".") {
echo "<li><a href=\"$file\">$file</a></li>";
}
}
closedir($dh);
?>
</ul></td></tr>
</table>Tudom, hogy a kód puritán, ennyit tudtam kihozni belőle laikusként. Nekem igazából a célnak megfelel, egy "hibája" van amit nem tudom hogy kell megoldani. A listázó script így magát is kilistázza. Azt hogyan tudom elérni, hogy önmaga (index.php) kivételével listázza a mappa fájlait? Esetleg még mivel kellene kiegészíteni, hogy méretet és azt is kiírja, hogy mappa vagy fájl-e az adott ojjektum?
-
Sk8erPeter
nagyúr
válasz
tothjozsi96 #17015 üzenetére
Sejtettem, hogy ilyesmi lesz...
-
tothjozsi96
addikt
válasz
Sk8erPeter #17014 üzenetére
Ja, utólag rájöttem hogy egy teljesen másik adatbázist állítgattam mert 2x is megvolt ugyan az és nem vettem észre, és utána vettem észre hogy az üres adatbázisban kutakodtam, de most felraktam a Wamp-ot mert azt hittem hogy nem én vagyok a hülye
és kiderült hogy még is, ezért nem akartam még egyszer írni ..
De a close kellett a végére amúgy, mert nem futott le az insert, mert az is $stmt névvel volt megadva és ütköztek, de már minden oké, és köszönöm!
Tehát így néz ki a kész kód.
$username = !empty($_POST["username"]) ? $_POST["username"] : '';
$password = !empty($_POST["password"]) ? $_POST["password"] : '';
$passagain = !empty($_POST["passagain"]) ? $_POST["passagain"] : '';
$email = !empty($_POST["email"]) ? $_POST["email"] : '';
if(!$username OR !$password OR !$passagain OR !$email) {
errormsg("Hiba", "Hiányoznak az adatok!");
}
// ellenőrizzük hogy létezik-e már
$stmt = $mysqli->prepare('SELECT COUNT(*) FROM users WHERE username = ? OR email = ?');
$stmt->bind_param('ss', $username, $email);
$stmt->execute();
// a $numberOfUsers változó fogja tárolni a prepared statement eredményét a fetch után
$stmt->bind_result($numberOfUsers);
$stmt->fetch();
$stmt->close();
if($numberOfUsers > 0) {
errormsg("Hiba", "Létezik már ez a felhasználó név, vagy az email cím már foglalt!");
}
$passhash = password_hash($password, PASSWORD_DEFAULT);
if ($stmt = $mysqli->prepare("INSERT INTO users (username, passhash, email) values (?, ?, ?)")) {
$stmt->bind_param('sss', $username, $passhash, $email);
$stmt->execute();
$stmt->close();
} -
Sk8erPeter
nagyúr
válasz
tothjozsi96 #17013 üzenetére
Ennek egészen biztos, hogy SEMMI köze nincs ahhoz, hogy miért kaptál eredményt mégis úgy, hogy állításod szerint üres volt az egész adatbázis (?? akkor milyen táblát kérdeztél volna le? Ha pedig a táblára gondoltál, hogy üres, akkor miért adott volna vissza találatot?!). Ezzel erőforrásokat szabadítasz fel, de a problémáid oka tuti nem ez volt, közben valami mást is babrálhattál.
-
tothjozsi96
addikt
válasz
Sk8erPeter #17011 üzenetére
Közben rájöttem hogy mi volt a baj.
Kimaradt ez:
$stmt->close();Azért nem adott hozzá új felhasználót meg semmit sem.
Most már minden rendben van, köszönöm! -
Sk8erPeter
nagyúr
válasz
tothjozsi96 #17009 üzenetére
Pedig akkor egészen biztos, hogy valami nem stimmel. Mutass komplett kódot, amivel csinálod.
(#17010) Flashback:
Első körben próbáld meg azt, hogy még a <!DOCTYPE elé rakd be az említett sort (igen, ott van a meta tagben, de nem biztos, hogy elég):
<?php header('Content-Type: text/html; charset=utf-8'); ?>
<!DOCTYPE ...
(nyilván az alsó sor nélkül, csak hogy egyértelmű legyen)
Egyébként mivel gyaníthatóan most alakítod ki az oldalt, lehetőleg ne XHTML 1.0 Strict legyen, hanem HTML5-ös, van jópár igen hasznos feature, amit így kihasználhatsz (az mellékes, hogy a böngésző sokszor engedékeny, és más doctype ellenére is esetleg használhatsz HTML5-től létező dolgokat, de legyen szabályos). Az meg csak annyiból áll, hogy a szokásos tagek elé a
<!DOCTYPE html>
deklarációt rakod, és máris HTML5-ös a doksid. (Az xmlns és xml:lang attribútum ennek megfelelően itt már nem szükséges, csak XHTML-nél.) -
válasz
Sk8erPeter #17005 üzenetére
Elvileg átadom a headreben. Hol keressem a hibát? Itt a forrás:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="hu">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Hangmánia Raktár</title>
<link type="text/css" rel="stylesheet" href="css/style.css" media="screen" />
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/easing.js"></script>
<script type="text/javascript" src="js/jquery-tab-down-v0.1.js"></script>
<script type="text/javascript" src="js/my.js"></script>
</head>
<body>
<div id="container">
<p>
</p>
<?PHP
if (!isset($_POST['post-variable-name'])) {$menu_page='hello.html';}
else
{$menu_page=$_POST['post-variable-name'];}
include 'connect.php';
include 'menu.php';
include $menu_page;
?>
</div>
</body>
</html> -
tothjozsi96
addikt
válasz
Sk8erPeter #17007 üzenetére
Köszönöm a segítséget!
Most már nem dob hibát, de tök üres az adatbázis és kiírja hogy létezik.
Pedig elvileg minden rendben van, stimmel minden ..És a numberofusers értéke most 1, de nem értem hogy miért.
Üres az adatbázis .. -
fordfairlane
veterán
válasz
tothjozsi96 #17006 üzenetére
Skacok, tegnap is volt itt egy olyan mélységű probléma, hogy egy if az else ágra futott, pedig nem arra kellett volna futnia, nahát. Nem ismeritek az alapvető debuggolási módszereket?
-
Sk8erPeter
nagyúr
válasz
tothjozsi96 #17006 üzenetére
COUNT-tal könnyen tudod ellenőrizni, hány rekord van, ami a feltételeknek megfelel:
$stmt = $mysqli->prepare('SELECT COUNT(*) FROM users WHERE username = ? OR email = ?');
$stmt->bind_param('ss', $username, $email);
$stmt->execute();
// a $numberOfUsers változó fogja tárolni a prepared statement eredményét a fetch után
$stmt->bind_result($numberOfUsers);
$stmt->fetch();
if($numberOfUsers > 0) {
// para, van már ilyen felhasználó, tehát nem regisztrálhat ezekkel az adatokkal
// kivételdobás, stb.
}
// egyébként mehet tovább...Ja, még annyi, hogy a die() létezését inkább felejtsd el, dobj kivételt, kezeld is le valahol tisztességesen, stb.
-
tothjozsi96
addikt
válasz
Sk8erPeter #17004 üzenetére
Igen, tényleg logikusabb, csak érdekelt.
És mysqli-t használok!Most itt akadtam el ..
$stmt = $mysqli->prepare('SELECT * FROM users WHERE username = ? OR email = ?');
$stmt->bind_param('ss', $username, $email);
$stmt->execute();Az $username és az $email már előtte megvan adva.
De viszont, nem tudom hogy hogy ellenőriztessem mert úgy nem működik hogyif($stmt["username"] == $username)
Azt én is tudom hogy így hülyeség, de nem tudom hogy hogyan lesz ez így jó ..tehát most itt tartok ..
-
Sk8erPeter
nagyúr
válasz
tothjozsi96 #17002 üzenetére
Na ne. Ezek szerint amikor feltöltesz egy felhasználót, akkor UTÓLAG ellenőrzöd, hogy duplicate key hibára hivatkozik-e (mivel az az 1062-es), nem is ellenőrzöd még feltöltés ELŐTT, hogy van-e már olyan felhasználó? Még beszúrás előtt ellenőrizz minden szükséges adatot, ne a beszúrási kísérlet után...
Kb. így kéne kinéznie a folyamatnak: felhasználó elküldi az űrlapot » formvalidálás: egyáltalán jók a bevitt adatok, nem tartalmaznak nem elfogadott karaktert, ilyesmik? » van már ilyen felhasználó? » ha igen, hibaüzenetet mutatunk; ha nem, beszúrjuk, sikerre utaló üzenetet írunk ki.
Nem pedig úgy, hogy beszúrjuk, és az arra kapott esetleges hibaüzenetből derítjük ki, hogy volt már olyan felhasználó...Amúgy mysqli vagy PDO?
http://php.net/manual/en/mysqli.errno.php
http://php.net/manual/en/pdo.errorcode.php
http://php.net/manual/en/pdostatement.errorcode.php
PDO-t viszont egyszerűbb/szebb úgy beállítani, hogy dobjon exceptiont, ha probléma volt a lekérdezéssel. -
Megint belefutottam valami karakterkészlet problémába:
Á betűk helyett ilyet kapok: �
Kiszolgálókapcsolat illesztése utf8_mb4_general_ci
Meta fejléc: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
PHP-im UTF-8 kódolásúak (BOM nélkül)
Mit rontok el?
-
tothjozsi96
addikt
Írok egy regisztrációt és prepared statement-el írom, de lenne egy problémám.
Tehát regisztrációkor ellenőrizni kell hogy létezik-e már ez a felhasználó név vagy email cím.
Na most sql-ben be van állítva az UNIQUE index, és így nem is megy be duplán azonos név vagy email.De viszont, szeretném ezt jelezni az oldalon is, mert nem ír rá ki hbát a prepared statement.
Eddig így volt megoldva.if(!$lekérdezéseredménye) {
if (mysql_errno() == 1062) {
die("létezik már ez a felhasználó vagy email");
}
}Az lenne a kérdésem hogy ez kivitelezhető-e így, tehát tud-e ilyesmit a prepared statement.
Oké, külön lekérdezéssel megoldható, persze ..
De érdekel hogy van-e rá megoldás, a google-ben nem találtam erre érdemes megoldást, azért kérdezem!
Új hozzászólás Aktív témák
Hirdetés
- Asus RTX 4070 12GB DDR6X - DUAL-RTX4070-O12G-EVO-DLSS 3 Garancia
- Apple iPhone 14 128GB, Kártyafüggetlen, 1 Év Garanciával
- Apple iPhone 14 Pro Max 128GB, Kártyafüggetlen, 1 Év Garanciával
- Új Apple iPhone 16 Pro 128GB, Kártyafüggetlen, 3 Év Garanciával
- Honor Magic7 Lite 512GB, Kártyafüggetlen, 1 Év Garanciával
- LG 42C3 - 42" OLED EVO - 4K 120Hz 0.1ms - NVIDIA G-Sync - FreeSync Premium - HDMI 2.1 - A9 Gen6 CPU
- Samsung Galaxy A12 64GB, Kártyafüggetlen, 1 Év Garanciával
- Lenovo ThinkPad X1 Carbon G8, i7-10510U, 16GB, 1TB SSD, 4K kijelző + WWAN (ELKELT)
- Eredeti Lenovo 230W töltők - 4X20Z83995
- AKCIÓ! "ÚJ" Microsoft Surface 5 13,5 notebook - i5 1235U 8GB RAM 256GB SSD Intel Iris Xe IGP 27% áfa
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: PC Trade Systems Kft.
Város: Szeged