Új hozzászólás Aktív témák
-
PumpkinSeed
addikt
Megoldottam, de fogalmam sincs, hogy hogy. Próbálgattam, meg átírtam részeket, és működik, de hát nem is programozás lenne a programozás ha nem jött volna elő egy újabb hiba.
"Akinek elég bátorsága és türelme van ahhoz, hogy egész életében a sötétségbe nézzen, elsőként fogja meglátni benne a fény felvillanását." - Kán
-
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! -
Flashback
addikt
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?
[ Szerkesztve ]
Bocs nincs hosszú ö, ü és néha az á is ä :)
-
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.Sk8erPeter
-
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 ..
[ Szerkesztve ]
-
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.
Sk8erPeter
-
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?
x gon' give it to ya
-
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 .. -
Flashback
addikt
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>[ Szerkesztve ]
Bocs nincs hosszú ö, ü és néha az á is ä :)
-
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.)[ Szerkesztve ]
Sk8erPeter
-
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 #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.
Sk8erPeter
-
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();
}[ Szerkesztve ]
-
Sk8erPeter
nagyúr
-
#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?
[ Szerkesztve ]
-
-
#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
válasz Peter Kiss #17020 üzenetére
Köszönöm szépen a segítséget. Így már jó
-
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? -
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..
In nomine Pasta, et Fusilli, et Spaghetti Sancti. Ramen.
-
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.[ Szerkesztve ]
A kisebbség is számíít, teszkó.
-
-
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.A kisebbség is számíít, teszkó.
-
-
gyga
senior tag
Zyxel NSA 310
A kisebbség is számíít, teszkó.
-
PumpkinSeed
addikt
"Akinek elég bátorsága és türelme van ahhoz, hogy egész életében a sötétségbe nézzen, elsőként fogja meglátni benne a fény felvillanását." - Kán
-
gyga
senior tag
válasz Peter Kiss #17027 üzenetére
Fogalmam sincs hogyan lehetne erre vmi frissítést tenni
A kisebbség is számíít, teszkó.
-
EmberXY
addikt
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.Up the Irons!
-
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>[ Szerkesztve ]
-
DrojDtroll
addikt
Ezt php-ban meg lehet valósítani?
-
válasz DrojDtroll #17034 üzenetére
Persze.
-
DrojDtroll
addikt
válasz Peter Kiss #17035 üzenetére
Köszi, valami segítséget tudnál adni, hol induljak el?
teljesen kezdő vagyok
-
válasz DrojDtroll #17036 üzenetére
Talán ezzel kellene kezdeni: fgetcsv
-
DrojDtroll
addikt
válasz Peter Kiss #17037 üzenetére
Köszi és magát a php-t mivel kezdjem?
-
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?[ Szerkesztve ]
but without you, my life is incomplete, my days are absolutely gray
-
válasz DrojDtroll #17038 üzenetére
Szóval az életben nem programoztál még PHP-ban?
-
válasz DrojDtroll #17041 üzenetére
Tippek:
A simple tutorial
PHP 101: PHP For the Absolute BeginnerMagyar tutorial oldalakat/könyveket elfelejtheted, ennyi biztos.
-
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).
-
DrojDtroll
addikt
válasz Peter Kiss #17042 üzenetére
Köszönöm szépen mindkettőtöknek.
-
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.
-
Sk8erPeter
nagyúr
-
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 -
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.[ Szerkesztve ]
Sk8erPeter
-
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 #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...Sk8erPeter
Új hozzászólás Aktív témák
- Csak Kipróbált Ps5 Playstation 5 Lemezes Konzol 21 Hónap Garanciával BESZÁMÍTÁSSAL
- Meta Quest 3, 128MB Eladó + Halo headstrap
- ÚJ, GARIS Gigabyte RX 6500XT GAMING OC 4GB DDR6 videokártya
- FIXED FIXRLX-BK Univerzális asztali tablet/telefon tartó állvány forgatható és állítható karral, fek
- iPhone SE 2020 64GB Új akku