Új hozzászólás Aktív témák
-
Peter Kiss
őstag
válasz
SektorFlop #10999 üzenetére
Linkkel főleg nem törlünk semmit.
Ha linket használsz, akkor készíthetsz valamilyen Javascript megoldást, ami indít egy POST kérést (maga a link nem valódi), vagy a link egy megersőítő oldalra mutat, ahol be van iktatva egy POST form.
-
SektorFlop
aktív tag
válasz
Peter Kiss #10998 üzenetére
és ha egy link alapján szeretnék törölni valamit? legalább egy id-t csak át kell adni a linkben nem?
-
Soak
veterán
A kérdésed első része eddig fel sem tünt
.
$myusername = $_GET['username'];
mysql_query("UPDATE user SET status = 0 WHERE username='$myusername'");Akkor nem csak ajánlom a prepared statementet hanem muszáj !!!
Amúgy a session kérdésedhez, a php.net-en le van írva, hogy a session_destroy() nem elég,
In order to kill the session altogether, like to log the user out, the session id must also be unset.
-
Soak
veterán
válasz
SektorFlop #10995 üzenetére
Akkor mi a probléma a beléptettéssel?
-
Soak
veterán
válasz
Forza_JUVE #10992 üzenetére
php.net -> header .
Felhívnám a figyelmedet erre a részre : Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP.
-
Forza_JUVE
aktív tag
válasz
CSorBA #10985 üzenetére
mégis csak kérnék 1 kis segítséget.
van 1 ilyen rész a php-ban:if ($securimage->check($_POST['captcha_code']) == false) {
// the code was incorrect
// you should handle the error so that the form processor doesn't continue
// or you can use the following code if there is no validation or you do not know how
echo "Rosszul írta be a kódot.<br /><br />";
echo "Kérem <a href='javascript:history.go(-1)'>menjen vissza</a> és próbálja újra.";
exit;
}De én nem ezt a 2 sort szeretném kiirattatni, hanem azt szeretném, hogy hiba esetén egy html oldal jelenjen meg. Mondjuk vmi error.html ... vagy hasonló.
De hiába próbálom annak a kódját az echo helyére írni ... nem OK a dolog.
Ebben kérnék 1 kis segítséget!Köszönöm!!
-
Soak
veterán
válasz
SektorFlop #10989 üzenetére
Elosszor is ajanlom, hogy prepared statementeket hasznalj , php.net-en le van irva a PDO eleg jol. A regisztralasnal pedig futtasd le ugyanazt a query-t mint amit belepeskor, szoval egy nevvel nem lehet ketszer regisztralni, javaslom azt is hogy ellenorizd, hogy ne a "semmit" ird be (magyarul ha egy ures formnal ranyomok a regisztracios gombra akkor ne tudjak regelni).
Ha pedig case sensitiven akars keresni MySql-ben akkor SELECT * FROM users WHERE BINARY username ="username"
-
Forza_JUVE
aktív tag
-
SektorFlop
aktív tag
Sziasztok!
Tudnátok segíteni beléptető rendszerrel és session kezeléssel kapcsolatban? Úgy alapjában működik amit írtam, de lenne egy két problémám, például nem törtlődnek a session fájlok, vagy szeretnék beállítani idő korlátot, vagy ha valaki kijelentkezés nélkül zárja a böngészőt akkor is jelentkezzen ki az oldalról.jelenleg így néz ki a kilépésért felelős php-m:
<?php
require_once ('../config.php');
session_start();
$myusername = $_GET['username'];
mysql_query("UPDATE user SET status = 0 WHERE username='$myusername'");
session_destroy();
header("location:../index.php");
?>Lenne még egy kérdésem, szemet szúrt egy apró de problémás bug, ha egy felhasználó regisztrál pl Teszt néven, és egy másik regisztrál teszt néven(amit szeretnék kiküszöbölni hogy ne legyen lehetséges), a Teszt felhasználó be tud lépni a teszt jelszavával és ugyan úgy fordítva.
Belépésnél csak ennyit ellenörzök:
$sql="SELECT * FROM `user` WHERE username='$myusername' and password='$mypassword'"; .
a $myusername meg egyezik a formba beírt felhasználónévvel, a jelszó pedig egy $mypassword pedig egy formból átadott kódolt jelszót tartalmaz. És ellenörzöm, mysql_num_rows()-al hogy 1-et add e vissza.
Regisztrációnál pedig csak lekérem hogy van e olyan felhasználó név amit át adott a form.
SELECT * FROM `user` WHERE username='$username'Ezeket a dolgokat nem lehetne kiegészíteni olyannal, hogy nézzek a kis és nagy betűket?
-
SureStudio
tag
válasz
Brown ügynök #10983 üzenetére
Nagyon köszi!
Sikerült! -
Speeedfire
félisten
válasz
Speeedfire #10986 üzenetére
-
Speeedfire
félisten
Van valami egyszerű függvény amivel meg tudom állapítani, egy adott hónap első és utolsó napját?
Csináltam egy php-s naptárat és ha a hónap nem hétfővel kezdődik akkor az elejét és a végét fel szeretném tölteni az előző és a következő hónap számaival.pl jelen esetben itt az aug. végével.
-
CSorBA
őstag
válasz
Forza_JUVE #10984 üzenetére
Szia!
Mi a baj a google recaptchával? Szerintem nagyon jól használható és könnyű. Ha elmondod hol akadtál el, tuti segítünk benne. Vagy már az elején gondban vagy? (Most így hirtelen nem tudom én sem, de már csináltam, és 10-15perc alatt implementálni lehetett első nekifutásra is, pedig én is kezdő vagyok)
-
Forza_JUVE
aktív tag
-
Brown ügynök
senior tag
válasz
SureStudio #10982 üzenetére
Jelöld ki a <form>-tól a </form>-ig a kódodat és illeszd be a következőt:
<?php
define("PSW", "jelszó");
if ( isset($_POST['jelszo']) ) {
if ( PSW === $_POST['jelszo']) { //ha egyezik, átirányítod
header("Location:http://www.facebook.com");
exit;
} else { // ha nem egyezik meg visszairányítod
header( "refresh:2;url=http://www.surestudio.freebase.hu" );
echo "Helytelen jelszó!";
exit;
}
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="tesztUrlap">
<label for="email">E-mail</label>
<input name="email" id="pass" type="text">
<label for="jelszo">Jelszó</label>
<input name="jelszo" id="pass" type="password">
<input type="submit" value="Belépés" />
</form>Akkor vegyük sorba:
- A form mező action-jébe beraktuk, hogy az űrlap elküldésekor ezt a fájlt futtassa. <?php echo $_SERVER['PHP_SELF']; ?>
- Amikor az egyes html tagek attribútumainak adsz értéket, akkor nem kell ";"-el lezárni. Helytelen: name="jelszo;" Helyes: name="jelszo"
- Ne használj ékezetes betűket értékadásnál, csak az angol abc betűit. Helyes name="jelszo". Kivéve, ha az a szöveg kikerül a képernyőre: value="Belépés"
- Az input mező "name" értéke lesz a $_POST változóban, így tudsz majd hivatkozni rá (ez esetben tehát a $_POST["jelszo"]-ba kerül az, amit a felhasználó begépelt).
- A form elküldését szintén input taggel kell megoldanod:
<input type="submit" value="szöveg" />- A isset($_POST['jelszo'] kóddal pedig azt vizsgáltuk, hogy létezik-e már a jelszo értéke. Ha igen, akkor megvizsgáljuk, hogy ugyanaz-e amit te megadtál (jelen esetben "jelszó").
- Ja, és így mentsd el: Fajlnev.php
Tudom, kicsit sok a duma de nem leszek mindig itt, hogy megírjam.
-
SureStudio
tag
válasz
Brown ügynök #10981 üzenetére
Itt a kódom:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta
content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<title>SureStudio -
surestudio.freebase.hu</title>
<style type="text/css">
.classname {
-moz-box-shadow:inset 0px 1px 0px -1px #ffffff;
-webkit-box-shadow:inset 0px 1px 0px -1px #ffffff;
box-shadow:inset 0px 1px 0px -1px #ffffff;
background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #f9f9f9), color-stop(1, #e9e9e9) );
background:-moz-linear-gradient( center top, #f9f9f9 5%, #e9e9e9 100% );
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#e9e9e9');
background-color:#f9f9f9;
-moz-border-radius:5px;
-webkit-border-radius:5px;
border-radius:5px;
border:1px solid #dcdcdc;
display:inline-block;
color:#666666;
font-family:arial;
font-size:10px;
font-weight:bold;
padding:5px 54px;
text-decoration:none;
text-shadow:2px 0px 1px #ffffff;
}.classname:hover {
background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #e9e9e9), color-stop(1, #f9f9f9) );
background:-moz-linear-gradient( center top, #e9e9e9 5%, #f9f9f9 100% );
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e9e9e9', endColorstr='#f9f9f9');
background-color:#e9e9e9;
}.classname:active {
position:relative;
top:1px;
}
/* This imageless css button was generated by CSSButtonGenerator.com */
</style>
<style type="text/css">
#tesztUrlap {
font: 10pt "Lucida Grande", "Trebuchet MS", Verdana, sans-serif;
line-height: 14pt;
margin: 40px auto;
width: 400px;
}
#tesztUrlap label {
width: 150px;
float: left;
clear: left;
text-align: center;
margin: 13px 0;
}
#tesztUrlap input {
width: 200px;
height: 25px;
border: 3px solid #9cf;
float: left;
clear: right;
text-align: center;
margin: 5px 0 5px 20px;
}
#tesztUrlap .checkbox {
width: 20px;
}
#reklamlevelAdatok {
clear: both;
border: 1px solid #ccc;
}
#reklamlevelAdatok #periodusHatarok {
color: #666;
font-size: .9em;
}
#tesztUrlap button {
float: right;
margin-top: 20px;
width: 150px;
height: 35px;
}
.clear {
clear: both;
float: none;
height: 0;
overflow: hidden;
}
</style>
</head>
<body>
<div style="text-align: center;"><br>
<br>
<div style="text-align: left;"><br>
<div style="text-align: center;"><br>
<img style="width: 285px; height: 80px;"
alt="SureStudio" src="http://i.imgur.com/U6RLD.jpg"
vspace="50"><br>
</div>
</div>
<div style="text-align: center;">
<form method="post" action="#"
id="tesztUrlap">
<label
for="email">E-mail</label>
<input name="jelszó" id="pass"
type="text"><label
for="jelszó">Jelszó</label>
<input name="Jelszó" id="pass"
type="password"></form>
</div>
<br>
<br>
<br>
<br>
<br>
<a href="http://www.surestudio.freebase.hu/"
class="classname">Belépés</a></div>
</body>
</html>Megmondanád hova illesszem be?
Mert ha rögtön az input elé rakom akkor nem megy. -
Brown ügynök
senior tag
válasz
SureStudio #10980 üzenetére
Én fogalmaztam pontatlanul. Ellenőrzést kellett volna írnom beléptetés helyett, Nem lehetetlen, de mi lenne ha kipróbálnád?
-
SureStudio
tag
válasz
Brown ügynök #10979 üzenetére
Nincs beléptetés, most egy olyat szeretnék össze hozni, hogy adatbázis és minden hűhó helyett csak egy kód ami leellenőrzi az inputot és ha az van benne amit én megadtam akkor tovább mehet egy gombal...Vagy lehet ez lehetetlen?
-
Brown ügynök
senior tag
válasz
SureStudio #10978 üzenetére
Abba a fájlba is belerakhatod ahol ezt a beléptetést el kell végezni. Ez esetben a fájlnév .php-ra végződjön. De külön fájlba is rakhatod (.php végződéssel természetesen).
A form action-je a fájlra mutasson, ahol az ellenőrzés végbemegy!
-
SureStudio
tag
válasz
Brown ügynök #10974 üzenetére
Bocsi de ezt hogy illesszem be?, mert nem működik...
Így néz ki az oldal:
És hová kell ez a kód?
<?php
define("PSW", "jelszó");
if ( PSW === $_POST['amit_a_user_irt']) { //ha egyezik, átirányítod
header("Location:http://www.facebook.com");
exit;
} else { // ha nem egyezik meg visszairányítod
header( "refresh:2;url=http://www.surestudio.freebase.hu" );
echo "Helytelen jelszó!";
exit;
}
?> -
Forza_JUVE
aktív tag
válasz
Sk8erPeter #10831 üzenetére
Szia!
A kód azóta is működik, és ezúton is köszi!
Viszont kérnék még 1 kis segítséget ... szeretnék az "Elküldés" elé egy amolyan "írja be a képen látható karaktereket" dolgot ... ha minden igaz vmi captcha a neve.
De a Google-s reCAPTCHA dolgot mellőzném, többször is nekifutottam már, de hiába, vmiért nem akarja az igazságot.Leírom a jelenlegi működő kódot, és nagyon hálás lennék, ha tudnál ehhez/ebbe egy ilyen ellenőrzés-kódot mondani:
<form action="" method="post" class="form">
<div>
<label for="name"><b>Név:</b> </label>
<input type="text" name="name" id="name">
<br />
<br />
<label for="email"><b>E-mail:</b> </label>
<input type="text" name="email" id="email">
<br />
<br />
<?php
$link = mysql_connect('sql', 'user', 'password');
if (!$link) {
die('Adatbázis csatlakozási hiba : ' . mysql_error());
}
$db_selected = mysql_select_db('adatbázis_neve', $link);
if (!$db_selected) {
die('Adatbázis kiválasztási hiba : ' . mysql_error());
}
if (isset($_POST['name']) && isset($_POST['email'])) {
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$mysql = mysql_query("SET NAMES 'UTF8'");
$mysql = mysql_query("INSERT INTO `tábla_neve` (`name`, `email`) VALUES ('$name', '$email')");
}
?>
<input type="submit" value="Elküld">
<br />
</div>
</form>Előre is nagyon köszi!!
-
Speeedfire
félisten
válasz
[pod]Diablo #10973 üzenetére
Én yii-ben szoktam fejleszteni. Kérdezz, ha tudok segítek.
-
SureStudio
tag
válasz
Brown ügynök #10974 üzenetére
Rendben.
Köszi! -
Brown ügynök
senior tag
válasz
SureStudio #10972 üzenetére
Ha több inputot akarsz vizsgálni akkor több állandót kell deklarálnod:
define("ALLANDO_NEVE", "erteke");
majd az if feltételnél:
if (PSW === "pass" && ALLANDO_NEVE === "erteke" )
Az "&&" jel azt mutatja, hogy mindkét feltételnek teljesülnie kell.
és így tovább.
Persze ez nem alkalmas arra, hogy komplett beléptetőrendszerként funkcionáljon! Csak egy egyszerű példa.
-
[pod]Diablo
őstag
Üdv!
Van itt valaki aki esetleg jartas Yii keretrendszerben?Ha van,lehetne hozzá pár kérdésem?
Előre is köszönöm!
-
SureStudio
tag
válasz
Brown ügynök #10971 üzenetére
Nagyon köszönöm!
És ezt a példát lehet pl. több input-hoz használni, tehát több beviteli mezőt ellenőrizzen, ha igen akkor min kellene módosítani? -
Brown ügynök
senior tag
válasz
SureStudio #10970 üzenetére
Egy egyszerű példa:
define("PSW", "Ide írod a jelszót");
if ( PSW === $_POST['amit_a_user_irt']) { //ha egyezik, átirányítod
header("Location:http://ahova-akarod.com");
exit;
} else { // ha nem egyezik meg visszairányítod
header( "refresh:2;url=http://ahol_a_jelszót_kéred.com" );
echo "Helytelen jelszó! Próbáld újra";
exit;
} -
SureStudio
tag
Sziasztok!
Azt, hogy lehet megoldani?, hogy van egy beviteli mezőm és egy gombom ami egy weboldalra mutat és csak akkor lehessen arra a weboldalra tovább menni ha az előző beviteli mezőben egy általam megadott szót írt be.
Sürgős!
Előre is nagyon köszi! -
biker
nagyúr
válasz
Sk8erPeter #10933 üzenetére
kolléga, fél órája küzdök ezzel a példáddal, hogy az autocomplete a beviteli mező mellett jelenjen meg, ne a frame top right sarokban, de mintha nem is reagálna semmilyen position elemre. Mit rontok el?
széttúrtam az autocomplete manualt, nem jött be -
Speeedfire
félisten
válasz
DeltaPower #10965 üzenetére
Jaja, pedig még azt sem mondhatom, hogy fáradt vagyok már és ezért nem vettem észre.
-
DeltaPower
addikt
válasz
Speeedfire #10964 üzenetére
Valóban, a H-h csere még nekem se tűnt fel hirtelen. Akkor ezért lett a 00-ból 12 óra, a 23-ból pedig 11
-
Speeedfire
félisten
válasz
DeltaPower #10963 üzenetére
Valóban elrontottam, de még a h-t is. Az meg nagy. Most már jó.
$v_ido = $date->format('Y-m-d H:i:s');
2012-09-03 00:00:00 - 2012-09-09 23:59:59
-
DeltaPower
addikt
válasz
Speeedfire #10961 üzenetére
Y-m-d h:m:s ez nem jó, szerintem Y-m-d h:i:s-t akartál írni. "m" az a hónap 2 számjeggyel.
-
Peter Kiss
őstag
válasz
Speeedfire #10961 üzenetére
Azért, mert a DateTime gyakorlatilag valuetype-ként működik.
$date->setTime(00, 00, 00);
Ez a hívás nem módosítja a $date instance-t, hanem visszaad egy újat a módosított értékkel. PHP dokumentációja segíthet.
-
Speeedfire
félisten
Ennek, miért ez a kimenete?
Miért nem 00:00:00?
$date = new DateTime();
$date->setISODate(2012, 36);
$date->setTime(00, 00, 00);
$k_ido = $date->format('Y-m-d h:m:s');
$date->modify('+6 days');
$date->setTime(23, 59, 59);
$v_ido = $date->format('Y-m-d h:m:s');
echo $k_ido .' - '. $v_ido;2012-09-03 12:09:00 - 2012-09-09 11:09:59
-
trisztan94
őstag
Itt van egy kis secure PDO leírás / tutorial (angol), ha valaki szeretné meglesni. Nem nehéz a cucc
Bocsi az offért, gondoltam megosztom
-
akom
őstag
Sziasztok!
Tudnátok ajánlani valami file uploadert, ami a feltöltés után kiírja a feltöltött file url-jét?
Elég valami alap. -
PazsitZ
addikt
válasz
Peter Kiss #10954 üzenetére
Gondolom olyasmit akarsz, hogy feltöltesz több fájlt és már feltöltés folyamata közben már nevet is adsz nekik.
Gyakorlatilag egymulti uploader-re van szükséged pl. uploadify
Itt a server oldali válaszban visszaadod a lemetett kép id-ját url-jét, nevét.
Majd az uploadSuccess event függvényében megvalósítod, hogy a feltöltött kép esetén bepakolsz egy thumb-ot egy form inputot a név értékkel és a kép_id name-el.
Ezután az oldalon lévő formot elposztolva, már kész van a képek elnevezése, esetleg további paraméterek beállítása.Már ha ilyesmire gondoltál...
Szerk.: (#10955) Soak: úgy néz ki nem ilyenre gondoltál
-
Soak
veterán
válasz
Peter Kiss #10954 üzenetére
Hát a dolog úgy nézne ki, hogy van mondjuk egyszerre 10 kép feltöltési lehetőség, ahol mondjuk mindegyiknek van name (user_filename, user módosíthatja) és albums_id (lehet üres) , aztán a szerver hozzáteszi a user nevet,id-t sessionból (jelenleg bejelntkezésnél -> $_SESSION['username'] és ['user_id']) és az aktuális időt, egy DateTime mezőbe ebben a formátumban : ('Y-m-d H:i:s') . Bár ez szerintem szar, mert jobb lenne time()-ot tárolni és a user állíthassa a saját időzonáját vagy a szerver ip alapkán belláít egyet, de ettől most tekintsünk el.
Jelenleg Imagick-al megoldom, hogy 3 thumbnailt létrehozok (90x100,130x130,200x200).
A filenév (filname oszlop, user nem módosíthatja) jelenleg time() + 4jegyű random szám (mondjuk ha másodpercenként 10.000 képet tolnak fel akkor már gáz ez, de mire ott tartok nem így lesz
)
Szerk: Az mondjuk nem php, de nem találtam jó módszert arra, hogy szépen styleoljam az <input type="file">-t
-
Soak
veterán
válasz
Peter Kiss #10952 üzenetére
Persze, lehetne olyan, csak valamikor jo lenne ha elkészülne.
Azért nem fog senki írni (én se tudok mit jelenleg) mert még nem találkozott/gondolkodott el azokon a problémákon amiket meg tud oldani. Vagy mondjam úgy, hogy józan ésszel valamit a tudástárából összerak amit nagyobb tudsátárral nyilván jobban lehet megoldani.
U.i.: Jobban mondva van is egy olyan "problémám" (pont most álltam neki) ,hogy több file olyan szintű feltöltése, hogy minden egyesnél tudjak megadni nevet, meg ami még lehet userinput. Valami értelmes formában és nyilván egyszerre. Egy az nyilván nem probléma. Keresgélek, de eddig nem találtam olyat ami tetszene.
-
Peter Kiss
őstag
A következő újraírás lehetne már olyan, mintha tizedjére csinálnád.
A te megoldásodból akartam épp példát hegeszteni a Logout-ra, de leszavaztad.
Egyébként challenge accepted, ha valakinek nem megy valami, vagy esetleg szeretne más megoldást látni, írjon bátran (úgyse fog senki), hátha tudok valami érdekeset mutatni (saját cuccokból nehéz meríteni, mert design szempontjából tűrhető, amit csinálok, megoldásilag meg úgyis publikus lesz, amint elkészülök egy olyan verzióval, amit kb. bárki használhat).
-
Speeedfire
félisten
válasz
Speeedfire #10950 üzenetére
Ok, solved!
$date->setTime(0, 0, 0);
-
Speeedfire
félisten
Ebben a DateTime függvényben be lehet állítani valahogy, hogy amit generál timestamp az adott nap 00:00:00 órájában kezdődjön? Amit kapni szeretnék, azt valami ilyesmi:
2012-08-27 00:00:00 illetve ennek a timestamp-je
-
Soak
veterán
válasz
Peter Kiss #10948 üzenetére
És az mindenképp baj, hogy már most bonyolultabb megoldásként gondolsz a valódi OO kódokra.
Te idézeted:
Azért nem jó, mert a levegőbe lóg mindened, csak azt nehéz lehet meglátni, ha van ilyen könnyű megoldás is.
A "valódi OO" kódokra nem tekintek bonyolultként, de azért abban megegyezhetünk, hogy bonyolultabbak mint amiket én csináltam .
Jelengleg az első site-on dolgozom (hobbiként), amin effektíve megtanultam (tanulom) a PHP-t (emelett a webdesignt,html-t,js-t,seo-t és mindent ami létezik), kb 3-4szer írtam újra és mindig kb kétszer jobb lett mint előtte. Remélem a 10. körül el fogok jutni, hogy lesznek olyan problémák amiket az általad javasolt (helyesen !!!) megoldásokkal sokkal egyszerűbben, hatékonyabban meg tudok oldani, de szunyogra minek lőjek ágyúval?
Látom, hogy logouton sokat írsz. Nem tudom, hogy mi a célod vele, de ha szeretnél egy kicsit népnevelni (én örülnék neki és szerintem vannak még páran) akkor konkrét problémákat felvetve (pl az általad említett DateTime is valami problémára megoldás, mint minden kód) egy konkrét leírást készíthetnél az általad legjobbnak gondolt megoldással. Ez nyilván csak egy ötlet, de akkor esetleg azok is megmozdulnának a komment ablakba akik magukat tartják valamilyen PHP programozóknak és kialakulhatna valami amiből egy kezdő és haladó is profitálhat, akár te is, gondolom te sem tudsz mindent
.
-
Peter Kiss
őstag
Az ObjectFetcher-rel tudok egy \PDOStatement eredményhalmazából konkrét objektumokat csinálni. Az eredmény kétféle lehet: vagy egy tök semmilyen névtelen objektum lesz minden egyes sor, vagy egy sokkal combosabb variáns: egy base EntityObject-ből származó objektum, aminek ismerem minden property-jét, és mindezt felhasználva azon ColumnAttribute-ok segítségével, amelyek implementálják az IValueProviderColumn interface-t, képes vagyok a raw SQL típusból pl. PHP objektumokat készíteni, hogy csak egyet mondjak: SQL DateTime oszloptípusból PHP DateTime objektumot (alapból string-ként jön vissza). Az eredményhalmaz minden esetben \SplFixedArray lesz függetlenül attól, hogy néhány adatbázisnál kénytelen lehetek előbb siman array-t használni (ezt az aktuális IDbProvider mondja meg).
És az mindenképp baj, hogy már most bonyolultabb megoldásként gondolsz a valódi OO kódokra.
-
Soak
veterán
válasz
Brown ügynök #10945 üzenetére
Ezt nem hiszem, hogy megtalálom a manualban, konkrétan az ő megoldása érdekelt. Értem, hogy miről beszél.
Egyelőre még nem értem, hogy miért jobb most nekem a sokkal bonyolultabb/másabb megoldás, ha hibátlanul működik ez is (konkrétan ezen a siteon). Később biztos, egy sokkal komplexebb sitenál értelme lesz, esetleg ezen site későbbi fejlődésében, de már írtam a topikban, hogy minden héten újra írhatnám az egészet (tanulás közben) . Feleslegesen most biztos, hogy nem bonyolítom.
-
Speeedfire
félisten
válasz
Peter Kiss #10944 üzenetére
Ez mind okés elvileg.
-
Brown ügynök
senior tag
Az is segíthet, hogy jobban megértsd miről beszél a kolléga, ha elmélyülnél a PHP manualban (jelen esetben mondjuk az osztályok működésébe [link]) majd, ha minden világos egy keretrendszerben. Egy keretrendszer megismerése sokat segíthet a saját kódod megírásánál. Ehhez persze idő és türelem kell.
-
Peter Kiss
őstag
válasz
Speeedfire #10943 üzenetére
Megfelelő adattípusok, hasznos indexek, ilyesmi.
-
Speeedfire
félisten
válasz
Peter Kiss #10941 üzenetére
Ezzel most nem jutottam előrébb. Osztott tárhelyen vagyok. Amennyire lehetőségem volt rá optimalizáltam.
-
Soak
veterán
válasz
Peter Kiss #10940 üzenetére
Írj még egy kicsit az ObjectFetcher objektumról légyszives.
-
Peter Kiss
őstag
válasz
Speeedfire #10939 üzenetére
A kiépítés egy dolog, az optimalizálás a másik.
-
Peter Kiss
őstag
Azért nem jó, mert a levegőbe lóg mindened, csak azt nehéz lehet meglátni, ha van ilyen könnyű megoldás is, ezért lenne érdemes a saját feladatodon bemutatni (pl. nem is írnék teljes megvalósítást mindenhová).
Mutatok egy kicsi példát:
class PhotoRepository {
public function __construct(DbContext $db) {//akár egy \PDO is lehet, de még kevés lenne
}
public function FindThreeById($pictureId, $userId) {
}
}
Nem beszélve a visszatérési értékekről, sok más objektumról, pl. ahol a PDO dolgot írtam, ott nálam a teljesség igénye nélkül ilyen objektumok játszanak: DataContext, Query, ColumnAttribute, SqlParameter, ObjectFetcher, PDO
-
Speeedfire
félisten
válasz
Peter Kiss #10938 üzenetére
Külföldi a szerver a godaddy-nél, ha ez jelent bármit is. Az adatbázis szerintem elég jól van kiépítve. Lehetne még mit csiszolni rajta, de ennyire nem vagyok megfizetve...
Php-val semmi esetre sem akartam legózni, max mint írtam heti 1x lenne egy frissítés az adatbázisban, ami a sorrendet beállítja.
-
Peter Kiss
őstag
válasz
Speeedfire #10936 üzenetére
Ha szar az adatbázis és/vagy rossz az adatbázisszerver beállítása vagy agyonterhelt, akkor elképzelhető, hogy lassú lenne, egyébként kicsi időt vesz igénybe. (Sokkal nagyobb és bonyolultabb lekérdezéseink vannak cégnél, de mivel minden faja, villámgyorsak. Ez pl. egy rettentő kicsi valamit jelent, de pl. PHP-val mindent összelegózni sokkal lassabb lenne, nem ismerem, pontosan mit kell csinálni, de biztos vagyok benne, hogy egy stored procedure-t írnér rá, ami 1:1-ben kiköpné a végső adatokat.)
-
Soak
veterán
válasz
Peter Kiss #10935 üzenetére
A kód nagyobb részeit nem szeretném semmiképp nyilvánosságra hozni. Nem azt szeretném, ha meg lenne írva helyettem a kód hanem - amire a fórum való - tapasztaltabb emberekkel eszmét cserélni.
Ezért kérdeztem, hogy konkrétan ebben a példában miért nem jó a static?
-
Speeedfire
félisten
válasz
Peter Kiss #10930 üzenetére
Oké, de ez időben nem lenne sok?
1.) Lesz 100 hely kategóriánként. Még ha csak az aktuális kategóriát is nézzük. Ki kell szedni minden egyes lekérdezéskor 100 elemet, az aktuális időhöz képest és ezeket hozzárendelni a hirdetésekhez. Hirdetésekből max olyan 600 lenne csak. Viszont a látogatottság elég nagy lesz. Így attól félek, hogy lényegesen megnőnének a lekérdezések időben.
-
Peter Kiss
őstag
Elvileg OO módon akarsz programozni, de azon túl, hogy osztályokba rendezed a kódod, nem sok mindent teszel az ügy érdekében, inkább ellene dolgozol. Ha van olyan része a kódodnak, ami nem gáz, ha kimegy publicra, akkor küldd el nekem, és megmutatom (Logout bejegyzés formájában), mit hogyan lehetne szebben, értelmesebb csinálni.
-
Soak
veterán
válasz
Sk8erPeter #10933 üzenetére
A témázást nem olvastam.
Konkrétan miért nem jó itt a static?
-
Soak
veterán
válasz
Peter Kiss #10931 üzenetére
De ha leírnád, hogy konkrétan mi nem tetszik akkor még értelme is lenne a hozzászólásodnak. Már másodszor írod ugyanezt csak így a nagyvilágba. A global $db nyilván egy new PDO(); .
Hogy lehetne jobban megoldani azt, hogy ne kelljen mindig bekonfigolni az adatbázist?
A staticot is kifjethetnéd.
-
Peter Kiss
őstag
válasz
Speeedfire #10928 üzenetére
Ez egy nagyon egyszerű SQL lekérdezés, semmit több.
1. kiszeded a kiemelés táblából az érvényeseket, de nem minden oszlopot (id, user_id, hely_erteke AS sorrend, 1 AS priority)
2. UNION hirdetes_tabla-ból kiszeded azokat, amelyek ki vannak épp emelve (ha ki kell ezeket egyáltalán), minden oszlop plusz egy darab: 0 as priority
3. egy megfelelő ORDER BY a végére, és kész is. -
Soak
veterán
Újra írtam ezt, annak idején elég sokat szenvedtem vele, most jobb lett, csak azért írom ide, hátha valakinek lesz hasonló projektje:
public static function find_3_by_id($p_id,$users_id) {
global $db;
$stmt= $db->prepare("(SELECT *, 'next' FROM photographs WHERE id > :id AND users_id = :users_id ORDER BY id ASC LIMIT 1) UNION (SELECT *, 'current' FROM photographs WHERE id = :id AND users_id = :users_id LIMIT 1)UNION (SELECT *, 'previous' FROM photographs WHERE id < :id AND users_id = :users_id ORDER BY id DESC LIMIT 1)");
$result_set = $stmt->execute(array(':id' => $p_id,':users_id' => $users_id));
$object_array = array();
while ($row = $stmt->fetch($result_set)) {
$object_array[] = self::instantiate($row);
}
return $object_array;
}
$photos = Photograph::find_3_by_id($_GET['p'],$user->id);
$next_photo = array_shift($photos);
$current_photo = array_shift($photos);
$previous_photo = array_shift($photos);Így 3 helyett csak 1szer kérem le az adatbázist és utána nem foreachezek, hanem csak szétszedem az Object array-t .
-
Speeedfire
félisten
Egy kis kivitelezési kérdés, ki hogy csinálná.
Adott egy tábla ahol hirdetők vannak. Első körben itt volt egy mező ami alapján meg lett adva, hogy hányadik helyen jelenik meg.
Most viszont egy kis átalakítás van. Ezeket a mezőket meg lehet venni kiemelés néven fut a tábla. Amit heti bontásban lehet megvenni. A kiemeléseknél van egy hely értéke, ami azt mutatja, hogy melyik helyet ki vetette meg mettől meddig.Kérdésem az lenne, ki hogyan oldaná meg ezt.
hirdetes_tabla:
id | user_id | sorrendkiemeles_tabla:
id | user_id | mettol | meddig | hely_ertekeElső körben arra gondoltam, hogy amikor valaki megveszi az adott helyet, akkor frissítem a hirdetes_table sorrend értékét azzal az értékkel, ami a kiemeles_tabla hely_erteke. Majd minden hétfőn éjjel frissítem a hirdetes_tabla sorrend mezőjét. Ha a következő hétre nem vett helyet akkor lenullázom az értékét.
A kiemeles_tabla-ban valószínűleg elég sok adat lesz és minden egyes lekérdezésnél, ha megvizsgálja az időpontot, kategóriát, stb akkor elég sokáig tart majd a lekérdezés.
Vagy esetleg érdemes lenne egy másik tábla is, ahol a sorrend van? De akkor azt, hogy frissítem?
Remélem érthetően fogalmaztam. Főleg Sk8erPeter miatt is írom ezt. -
PazsitZ
addikt
válasz
SektorFlop #10924 üzenetére
Autocomplete lesz a te barátod. Mondjuk pl. a jquery-s megoldás: [link]
-
SektorFlop
aktív tag
Van arra valamilyen megoldás, hogy ha text mezőbe elkezdek gépelni valamit akkor mint ha egy select mező lenne, elkezdenének megjelenni a felhasználónevek a beírt karaktereknek megfelelően. És akár ki is lehetne választani. Lehet nem jó a topic, mert nyilván lesz már benne egy kis js-is.
-
biker
nagyúr
válasz
Sk8erPeter #10916 üzenetére
gondolni gondolom, csak nem találom...
-
SektorFlop
aktív tag
válasz
Tele von Zsinór #10920 üzenetére
Még1x köszönöm, most már tesztelve és tökéletes a megoldás. Mindig a legegyszerűbb megoldás nem jut az eszembe.
-
SektorFlop
aktív tag
válasz
Tele von Zsinór #10920 üzenetére
Ahha, köszi ez tökéletesnek tűnik.
-
Tele von Zsinór
őstag
válasz
SektorFlop #10919 üzenetére
Kell egy köztes tábla, két mezővel: felhasználó és üzenet id. Amikor küldesz egy levelet, létrehozol két rekordot ebben (feladó és címzett).
Amikor valaki törli a levelet, innen törlöd a megfelelő sort. Ha már nincs egy sem az adott üzenethez, akkor azt is törölheted.
Ez a rendszer módosítás nélkül képes majd kezelni azt is, ha több címzetted lehet.
-
SektorFlop
aktív tag
valaki segít gondolkodni? én már belegabalyodtam
mai projektem egy egyszerű belső üzenetküldő, felhasználó felhasználónak. Minden tökéletesen működik, eltekintve a törléstől... Azt szeretném megoldani hogy ha az egyik felhasználó törli akkor attól még a másiknak meglegyen. Első nekifutásra próbálkoztam olyannal hogy törlöm pl a cimzett nevét és úgy már nem kerül a fogadó üzenetei közé, de így hiányosak lesznek a levél adatai.
Második nekifutásnak próbálkoztam egy számos rendszerrel, felvettem egy új rekordot a táblába, amibe három szám változhat:
1 - mind2 felhasználó láhtja
2 - csak a feladó látja
3 - csak a címzett látjaSajnos ez a megoldás is félbemaradt, ez sem tökéletes, mert nem tudom hogy kellene eldönteni hogy mikor törölhető az üzenet végleg az adatbázisból.
Van valakinek ötlete vagy valaki tud erre működő megoldást?
-
Sk8erPeter
nagyúr
válasz
SureStudio #10917 üzenetére
Szívesen!
-
SureStudio
tag
válasz
Sk8erPeter #10914 üzenetére
Nagyon köszönöm.
Most már működik! -
Soak
veterán
válasz
Sk8erPeter #10909 üzenetére
Nyilván a profilját mindig eléri egy kattintással. Viszont ha valakit megakarsz keresni akkor tudod, hogy .com/Sk8erPeter odavisz , jobban is mutat egy siteon kitéve link-ként .
Na mindegy, meglátom még mi lesz, ez úgyis ízlés dolga.
-
Sk8erPeter
nagyúr
válasz
SureStudio #10913 üzenetére
Igen, szinte minden if után elrontottad a nyitó kapcsos zárójelet, helyette sima zárójelet írtál, ebben már nincs syntax error:
<?php
if (isset($_POST["submit"])) {
if (empty($_POST["email"])) {
$hiba[] = " Email megadása kötelező ";
}
if (empty($_POST["username"])) {
$hiba[] = "Felhasználónév üres!";
}
if (empty($_POST["pass"])) {
$hiba[] = "A jelszó nincs megadva!";
}
if (!isset($hiba)) {
$email = $_POST("email");
$username = $_POST("username");
$pass = $_POST["pass"];
} else {
echo "A következő hibák fordultak elő!<br />";
echo implode("<br />", $hiba);
}
}
$username = isset($_POST["username"]) ? $_POST["username"] : '';
$email = isset($_POST["email"]) ? $_POST["email"] : '';Egyébként ezzel csekkoltam.
-
SureStudio
tag
Sziasztok!
Épp egy belépős oldalt készítek és már eljutottam odáig, hogy a regisztrációt csinálom.
Az a helyzet, hogy egy hibát ír ki és nem jövök rá sehogysem.
A hiba: "Parse error: syntax error, unexpected T_IF in blaablaa on line blaablaa"
A php kódom(feltehetően ebben van a hiba):
<?php
if ( isset( $_POST["submit"] ) ) (
if ( empty( $_POST["email"] ) ) (
$hiba[] = " Email megadása kötelező ";
}
if ( empty( $_POST["username"] ) ) (
$hiba[]="Felhasználónév üres!";
}
if ( empty( $_POST["pass"] ) ) (
$hiba[]="A jelszó nincs megadva!";
}
if ( !isset( $hiba ) ) (
$email=$_POST("email");
$username=$_POST("username");
$pass=$_POST["pass"];
} else {
echo "A következő hibák fordultak elő!<br />";
echo implode( "<br />" , $hiba);
}
}
$username=isset($_POST["username"]) ? $_POST["username"] : '';
$email=isset($_POST["email"]) ? $_POST["email"] : '';
?>
Tudnátok segíteni? -
biker
nagyúr
válasz
Sk8erPeter #10909 üzenetére
mint írtam, konfigolva van, csak a Coda nem a telepített konfigolt pp-t használja, hanem valami saját motoron belül futtatja le
-
Speeedfire
félisten
válasz
Sk8erPeter #10910 üzenetére
Igen, így gondoltam.
Nem áll szándékomban szívatni téged. -
Sk8erPeter
nagyúr
válasz
Speeedfire #10908 üzenetére
"nem kóser"
Kifejtenéd bővebben?Vagy direkt szívatsz ezekkel a sokatmondó megjegyzésekkel?
Nálam "kóser":
$date = new DateTime();
$date->setISODate(2012, 42);
$weekFirstDay = $date->format('Y.m.d');
$weekFirstDayAsTimestamp = $date->getTimestamp();
$date->modify('+6 days');
$weekLastDay = $date->format('Y.m.d');
$weekLastDayAsTimestamp = $date->getTimestamp();
echo $weekFirstDay . ' - ' . $weekLastDay;
echo '<br /> As a timestamp: <br />';
echo $weekFirstDayAsTimestamp . ' - ' . $weekLastDayAsTimestamp;Kimenete:
2012.10.15 - 2012.10.21
As a timestamp:
1350309139 - 1350827539Itt tudod csekkolni: [link]
Ja, egyébként azt tudnod kell, hogy mivel így példányosítjuk: new Datetime()
ez alapértelmezettként a jelenlegi időt veszi alapul, tehát az óra-perc-másodperc egyezni fog azzal az időponttal, amikor épp lefut a script.De mivel itt arról van szó, melyik a hét első napja, és melyik az utolsó (eddig csak napok szerinti dátumról beszéltünk), ezért ezt itt még nem említettem meg, mert nem tűnt fontosnak.
-
Sk8erPeter
nagyúr
DeltaPowernél a pont.
Konfiguráld rendesen.================
(#10904) Soak :
de azt még a Buta Béla is megérti, hogy ha az a cím, hogy www.oldal.hu/felhasznalok/ButaBéla, akkor az az ő oldala, és még az előtte szereplő "felhasznalok" cím sem okoz remélhetőleg gondot.
Egyébként nem is kell olyan nagyon gondolkodásra serkenteni a júzert ahhoz, hogy eljusson a saját profiljához, ha nem találja meg az erre szolgáló linket, akkor már a felülettel van baj.
Úgyis ritkább az a júzer, aki a címet is értelmezgeti, megjegyzi. -
Speeedfire
félisten
válasz
Sk8erPeter #10885 üzenetére
Ki lehet ebből nyerni valahogyan timestamp-et? Nézem ezt a getTimestamp-et, de nem kóser.
-
Speeedfire
félisten
válasz
Tele von Zsinór #10903 üzenetére
Már szólved.
-
biker
nagyúr
válasz
Sk8erPeter #10885 üzenetére
ennek a kimenete localhostomon:
Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CEST/2.0/DST' instead' in -:2 Stack trace: #0 -(2): DateTime->__construct() #1 {main} thrown in - on line 2nagy serveren lefut
sorry, localhoston (xampp) jó, a Coda preview a hibás
-
Soak
veterán
válasz
Sk8erPeter #10899 üzenetére
De te nem az átlag user-t képviseled. Ők nem szeretnek gondolkodni. Csak szép legyen és működjön.
-
Tele von Zsinór
őstag
válasz
Speeedfire #10900 üzenetére
Dehogy mindegy, minden attól függ
Így érted az objektumtömböt?
$model = array(
new \stdClass(),
new \stdClass(),
new \stdClass(),
/* ... */
);Amire Sk8erPeter kollega gondol, hogy a findAll hívásod visszatérési értékét sehol nem tárolod, a $model változóra hívod, és utána ezen keresztül is próbálod elérni az eredményét, valami itt nagyon nem stimmel.
-
Speeedfire
félisten
válasz
Sk8erPeter #10901 üzenetére
Ja, jogos. Kimaradt.
Báz, pedig ezt ($myModels[123]->ertek; ) próbáltam már mióta és nem akarta kiírni...nem értem. Most meg egyből kiírja...
-
Sk8erPeter
nagyúr
válasz
Speeedfire #10900 üzenetére
Én meg azt nem értem, mi a gond.
$model[123]->ertek
Az átadásnál erre gondoltam:
$myModels = $model->findAll();
echo $myModels[123]->ertek;Tehát a $myModels-nek adtam át a findAll visszatérési értékét...
Új hozzászólás Aktív témák
Hirdetés
- Milyen légkondit a lakásba?
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Milyen egeret válasszak?
- Gaming notebook topik
- Milyen billentyűzetet vegyek?
- Ukrajnai háború
- Kínai és egyéb olcsó órák topikja
- Poco F5 - pokolian jó ajánlat
- MediaTek lapka köré épülne a Galaxy S25 FE?
- Hogy is néznek ki a gépeink?
- További aktív témák...
- LG 70UN74003LA Smart LED Televízió, 70" (177 cm) - 4K Ultra HD, HDR, webOS
- TP-Link RE650 AC2600 (RR650) WIFI hatótávbővítő
- BONTATLAN Új Iphone 16 és 16 Plus 128-512GB 1év APPLE garancia gyári független Deák AZONNAL Átvehető
- ÚJ Bontatlan iPad Air 6 - 7 gen 11 és 13 Minden szín 1 év Apple Garancia Azonnal Átvehető DEÁK Térné
- ÚJ BONTATLAN MacBook Pro 14 - 16" M4 MAGYAR Billentyűzet Azonnal átvehető DEÁK TÉRNÉL garanciával
- Bomba ár! Dell Latitude E6530 - i7-3740QM I 8GB I 320GB I HDMI I 15,6" HD+ I Cam I W10 I Garancia!
- Csere-Beszámítás! Asus Tuf Gamer laptop! R5 3550H / GTX 1650 / 8GB DDR4 / 500GB SSD
- Azonnali készpénzes GAMER / üzleti notebook felvásárlás személyesen / csomagküldéssel korrekt áron
- Lenovo Thinkpad P16 G2 - i9-13980HX, 64GB, 1TB SSD, 16" WQUXGA (3840 2400), RTX 4090
- Apple iPhone 15 Pro 128GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest