- Az USA vizsgálja a RISC-V kínai terjedésének kockázatát
- Kicsit extrémre sikerült a Hyte belépője a készre szerelt vízhűtések világába
- Egészen nagy teljesítményspektrumon fedné le a mobil piacot az AMD
- Kihívás a középkategóriában: teszten a Radeon RX 7600 XT
- Már a Sparkle is jegyezhet fehérbe öltöztetett videokártyákat
- Milyen TV-t vegyek?
- A Samsung hazánkban is piacra dob idén egy friss Micro LED tévét
- RAM topik
- Milyen egeret válasszak?
- Steam Deck
- Házi barkács, gányolás, tákolás, megdöbbentő gépek!
- Videós, mozgóképes topik
- OLED TV topic
- Amlogic S905, S912 processzoros készülékek
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
Hirdetés
-
Egészen nagy teljesítményspektrumon fedné le a mobil piacot az AMD
ph A vállalat kétféle Strix Point dizájt tervez idénre, ezek közül a nagyobbik a dedikált GPU-k jó részét is kiválthatja.
-
Samsung Univerzum: Az S23-at is megbabonázta a Galaxy AI
ma Rengeteg Samsung megkapja az AI alapú nyelvi, képi és keresőfunkciókat.
-
Konzolokra is megjelenik a Fera: The Sundered Tribe
gp A kooperatív szörnyvadászós játékhoz a minap egy friss trailert kaptunk.
Új hozzászólás Aktív témák
-
modder
aktív tag
ezt a kérdést pontosabban is megfogalmazhattad volna, főleg stackoverflow-on
Mit jelent a jó és mit jelent a rossz bemenet?
Egyébként a modelledben a keresés csak akkor fog false-szal visszatérni, ha hiba van az adatbázis lekérdezésben (nem éred el az adatbázist, vagy szintaktikailag helytelen lesz a generált sql)
De ezek csak tippek, számomra nem nyilvánvaló a kérdés
-
modder
aktív tag
válasz Speeedfire #8902 üzenetére
nem ott szeretted volna! Gondolom tisztában vagy vele, hogy amikor a modelledhez hozzáadod a napot, a belső ciklusnak csak az utolsó iterációja fog megjelenni a $nap változóban
-
Speeedfire
nagyúr
Ohh, nem értem mit mondasz. De valóban, egy ciklussal kijjebb tettem és most okés.
'nap_1' => string '9:45-6:30' (length=9)
'nap_2' => string '7:15-5:30' (length=9)Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
modder
aktív tag
válasz Speeedfire #8904 üzenetére
akkor gondold át
-
MODERÁTOR
Akkor megválaszoltad. Pont ez a gond, hogy itt, így egy üres objektumot kapok vissza. Megfogalmazás, jobban nem tudtam, mint hogy semmi az amit kapok. Mit kéne akkor tennem, hogy keresés esetén false, legyen a visszatérés?
Lol. Megszámolom a sorokat
[ Szerkesztve ]
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
MODERÁTOR
Köszi a segítséget! Megoldódott.
$query->count() ezt rányomtam az objektumomra, majd megvizsgáltam ha igaz volt akkor visszadobtam, ha nem akkor elküldtem a false -t.
mobal,
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
cAby
tag
Hali!
Egy olyat szeretnék csinálni, hogy a kilistázott elemek közül (index.php) be lehessen jelölni azt az elemet kedvencnek amelyiket akarjuk. Ekkor annak az elemnek a neve megjelenik egy fav.php oldalon.Megcsináltam és működik ahogyan kell, de ha jól gondolom nem ez a legjobb/legoptimálisabb megoldás. Valakinek esetleg van egy kis tanácsa, hogy lehetne ezt jobban/szebben megcsinálni?
Index.php:
if ( $_SESSION['fav_' . $row['id']] == '' )
{
$_SESSION['fav_' . $row['id']] = 'false';
}
if ( $_POST['add'] )
{
$_SESSION['fav_' . $row['id']] = 'true';
}
if ( $_POST['del'] )
{
$_SESSION['fav_' . $row['id']] = 'false';
}
if ( $_SESSION['fav_' . $row['id']] == 'false' )
{
echo "<form action='index.php' method='post'>
<input type='submit' name='add' value='add' />
</form>";
}
elseif ( $_SESSION['fav_' . $row['id']] == 'true' )
{
echo "<form action='index.php' method='post'>
<input type='submit' name='del' value='del' />
</form>";
}fav.php:
for ($i = 1; $i <= $sum_items; $i++)
{
if ( $_SESSION['fav_' . $i] == 'true' )
{
$sql = "SELECT * FROM items WHERE id='" . $i . "'";
$sql_v = mysql_query($sql);
while($row = mysql_fetch_assoc($sql_v))
{
echo $row['item_name'];
echo "<br />";
}
}
}Köszi.
-
Nem tudom, hogy jól értem-e. Csak az a lényeg, hogy valamit akkor csinálsz meg, ha ad vissza valamit egy query? Mert akkor limitálni kellene a result set méretét 1 darabra, ne adjon vissza X darabot (ami akár lehetne X is). Nem tudom, hogy a count() mit csinál a háttérben, de érdemes lenne megfontolni a limitálást (MySQL: LIMIT, MSSQL: TOP).
Ilyen módon, ha visszajön 1 darab, akkor true, ha nem, akkor false.
-
Sk8erPeter
nagyúr
válasz Peter Kiss #8910 üzenetére
Nem igazán értem, miért kellene feltétlenül limitálni. Sehol nem írta, hogy az example.com/archive/2011/01/27 oldal megnyitására csak egyetlen darab postnak kellene megjelenni - na meg miért is feltételezzük, hogy aznap csak egyetlen cikk íródott...
"Nem tudom, hogy a count() mit csinál a háttérben"
Nem Kohanáztam soha, de nem nehéz kitalálni, hogy a count a query által visszaadott vagy érintett sorok számát jelenti...
És ja, kb. 5 másodperces Guglizás alapján ki is derül: [link].A lényeg: mivel egy napon nem feltétlenül csak egy cikk készülhetett, ezért nem hiszem, hogy korlátozni kellene a lekérdezés eredményét (legalábbis eddig erről nem volt szó), így a count teljesen jó annak eldöntésére, hogy van-e egyáltalán eredménye a lekérdezésnek...
===
(#8909) cAby : finoman szólva ocsmány a kód (Te kérdezted meg a publikumot ), és azt sem értem, mitől működik nálad úgy, ahogy akarod (sanszos, hogy nem is úgy működik, ahogy kellene), amikor teljesen indefinit, hogy a form elküldésével melyik valamit akarod a kedvencek közé tenni.
Az index.php-dben meg vidáman használod a $row['id']] változót, ami számomra teljesen ismeretlen, hogy honnan kéne, hogy valami valós értéket kapjon. (A fav.php-dben van egy $row az adatbázis-lekérés eredményét megjelenítő cikluson belül, de annak ehhez köze nincs.)[ Szerkesztve ]
Sk8erPeter
-
cAby
tag
válasz Sk8erPeter #8911 üzenetére
Tudom, hogy ocsmány. Még nem csináltam ilyet, tehát most próbálkozom összehozni valamit.
Ezért is érdekel más véleménye/tanácsa.Index.php-n a $row['id'] visszaadja az adott elem azonosítóját. Mert ugye listázva vannak az elemek ab-ból, tehát így simán visszaadja az azonosítót, majd csinál egy pl. fav_1 session változót.
fav.php-ban meg megvizsgálja változókat és ha van egyező, tehát van fav_1 és true-n van akkor kiírja."(A fav.php-dben van egy $row az adatbázis-lekérés eredményét megjelenítő cikluson belül, de annak ehhez köze nincs.)"
Index.php-ben is nyilván van ilyen ciklus, csak az kimaradt a kódból és onnan jön a $row['id']Így működik ahogy akarom, felveszi a listába és onnan el lehet küldeni e-mail-ben.
De akkor egy ilyet, hogyan/milyen technikával lenne célszerű megoldani?
-
Sk8erPeter
nagyúr
"Index.php-ben is nyilván van ilyen ciklus"
Szerintem ez a kódod alapján nem annyira nyilvánvaló."Így működik ahogy akarom, felveszi a listába és onnan el lehet küldeni e-mail-ben."
Honnan fogod tudni, MELYIKET kell felvenni a listába?
Hadd "idézzek" a kódodból:if ( $_SESSION['fav_' . $row['id']] == 'false' )
{
echo "<form action='index.php' method='post'>
<input type='submit' name='add' value='add' />
</form>";
}
elseif ( $_SESSION['fav_' . $row['id']] == 'true' )
{
echo "<form action='index.php' method='post'>
<input type='submit' name='del' value='del' />
</form>";
}Itt kiraksz egy formot, de magában a formban egy darab azonosítót nem rejtesz el (mondjuk egy hidden inputtal, vagy másképp), így nem tudom, honnan szeded, hogy mondjuk épp az 5-ös azonosítójút szeretném eltárolni a kedvencek közé.
Egyébként itt az if-elseif vizsgálat nem túl ésszerű - inkább azt kéne vizsgálnod, hogy mondjuk true értéke van-e, ha igen, kirakod a törlőformot, KÜLÖNBEN (simán else) a hozzáadó formot.Amúgy ha mutatsz egy hasonló kódot, akkor nem ártana a teljeset, hogy el tudjuk dönteni, valamilyen kód indokolt-e egyáltalán.
Az például nem túl szép megoldás, hogy az ismeretlen eredetű $sum_items mennyiségig végigmész az elemeken, és egyesével, cikluslépésenként kéred le adatbázisból a különböző azonosítójú elemeket.További tipp: ha azt szeretnéd, hogy egy form ugyanoda legyen elküldve, ahol ki is van írva, akkor érdemes az action attribútumot inkább üresen hagyni a formnál (action=""), ez egy valid megoldás, és könnyebben "költöztethető" - tehát ha az index.php helyett megváltoztatod a fájl nevét asdasdasd.php-re, akkor is működni fog.
[ Szerkesztve ]
Sk8erPeter
-
MODERÁTOR
válasz Sk8erPeter #8911 üzenetére
Igen! Így sikerült is megoldani, reggel már fel is töltöttem
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
cAby
tag
válasz Sk8erPeter #8913 üzenetére
Így fogom megtudni, hogy melyiket, mert így csinál egy egyedi session változót, amit true/false-ra állít, és ezt vizsgálja a fav.php oldalon.
if ( $_POST['add'] )
{
$_SESSION['fav_' . $row['id']] = 'true';
}if ( $_POST['del'] )
{
$_SESSION['fav_' . $row['id']] = 'false';
}Először lekérem, hogy mennyi elem van az ab-ban és azt kapja meg a $sum_items.
Nemsokára berakom az erre vonatkozó egész kódot, hogy normálisan látni lehessen.
[ Szerkesztve ]
-
modder
aktív tag
Itt kiraksz egy formot, de magában a formban egy darab azonosítót nem rejtesz el (mondjuk egy hidden inputtal, vagy másképp), így nem tudom, honnan szeded, hogy mondjuk épp az 5-ös azonosítójút szeretném eltárolni a kedvencek közé.
De ebből még mindig nem tudod szerver oldalon, hogy melyik form lett elküldve, melyik azonosítójú elemet akarod betenni favoritba. Az eddigi kódrészletek alapján így néz ki
//pszeudo
for( $row in $rows){
if( $_POST['add'])
$_SESSION['fav_' . $row['id']] = 'true';
}mivel nincsen semmilyen más favorit azonosító, amit elküldesz a formból a szervernek, nem tudom, honnan kéne tudni szerver oldalon, hogy arra az egy bizonyos favorit elemre vonatkozik a hozzáadás
-
cAby
tag
Ez a teljes kód, ami ide tartozik:
index.php
<?php
session_start();
?>
<?php
$sql = "SELECT * FROM items WHERE sitelink = '" . $site_link . "'"; /* $site_link = lekérem az oldal címét, majd olyan formában ahogy nekem kell átadom ennek a változónak*/
$sql_v = mysql_query($sql);
while($row = mysql_fetch_assoc($sql_v))
{
if ( $_SESSION['fav' . $row['id']] == '' )
{
$_SESSION['fav' . $row['id']] = 'false';
}
if ( $_POST['add'] )
{
$_SESSION['fav' . $row['id']] = 'true';
}
if ( $_POST['del'] )
{
$_SESSION['fav' . $row['id']] = 'false';
}
if ( $_SESSION['fav' . $row['id']] == 'false' )
{
echo "<form action='' method='post'>
<input class='fav_false' type='submit' name='add' value=' ' />" . " " . $row['item_name'] . "
</form>";
}
elseif ( $_SESSION['fav' . $row['id']] == 'true' )
{
echo "<form action='' method='post'>
<input class='fav_true' type='submit' name='del' value=' ' />" . " " . $row['item_name'] . "
</form>";
}
}
?>fav.php
<?php
session_start();
?>
<?php
include('sql_connect.php');
$sql_count = "SELECT count(id) FROM items";
$sql_count_result = mysql_query($sql_count);
$row_count_items = mysql_fetch_row($sql_count_result);
$sum_items = $row_count_items[0];
for ($i = 1; $i <= $osszes_szallas; $i++)
{
if ( $_SESSION['fav_' . $i] == 'true' )
{
$sql = "SELECT * FROM items WHERE id='" . $i . "'";
$sql_v = mysql_query($sql);
while($row = mysql_fetch_assoc($sql_v))
{
echo $row['item_name'];
}
}
}
?>Nekem ezzel működik. De már kezdem azt hinni, hogy csak vmi csoda miatt...
-
-
válasz Sk8erPeter #8911 üzenetére
Keress egy nagy adatbázist, és számoltasd meg valamilyen feltétel után, hány darab rekord van benne. Utáne tedd meg ugyanezt EXISTS-cel. Na, látod?!
Nyilván, ha kell neki minden post, és nem csak az, hogy van-e benne, akkor okés, csak nem nyálaztam vissza, mi volt a lényeg, csak odáig láttam, hogy true / false jön ki belőle.
Egyébként, ha én ORM-et fejlesztek, akkor akár azt ics megcsinálhatom, hogy módosítom on-the-fly a query-t, hogy az adatbázis számolja össze az összes sort, ne pedig a memóriában történjen meg ugyanez. Tetszik érteni?
-
Sk8erPeter
nagyúr
Basszus, adj már egy értelmezhető nevet is a kedvenceidnek... Pl. az adattábládban a különböző azonosítók mellé vegyél fel még egy mezőt, aminek az a neve, hogy mondjuk "fav_name", vagy hasonló, és aztán lekéréskor pedig írasd ki, hogy melyik azonosítót is adtad hozzá a kedvencekhez. Akkor meglátod, hogy valóban jól működik-e.
Nézd is meg, mit csinálsz, ne csak azt csekkold, hogy egy azonosító a sok közül kedvencek közé lett mentve.
Pl. ha a hozzáadható kedvencek a következők: alma, béka, cékla, dió, eke, és én épp a békát szeretném kedvencek közé menteni, akkor nem szeretném, ha helyette ekét kapnék az arcomba.Az index.php-det egyébként így kezded:
<?php
session_start();
?>
<?php
$sql = ......
ahelyett, hogy a tökéletesen felesleges záró- és nyitótaget kiszednéd:
<?php
session_start();
$sql = ......Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Peter Kiss #8921 üzenetére
"Keress egy nagy adatbázist, és számoltasd meg valamilyen feltétel után, hány darab rekord van benne. Utáne tedd meg ugyanezt EXISTS-cel. Na, látod?! "
Ez nem tudom, hogy jön ide.
Ha van egy archívum, amiből csak az adott napra eső bejegyzéseket szeretnéd megjeleníttetni, ráküldesz egy SELECT-et. Akkor már megvan, hány bejegyzést is sikerült lekérni, ezt megtudni pedig nem egy erőforrásigényes feladat a lekérés után."Nyilván, ha kell neki minden post, és nem csak az, hogy van-e benne, akkor okés, csak nem nyálaztam vissza, mi volt a lényeg, csak odáig láttam, hogy true / false jön ki belőle."
Akkor indokolatlan a kötekedés."Egyébként, ha én ORM-et fejlesztek, akkor akár azt ics megcsinálhatom, hogy módosítom on-the-fly a query-t, hogy az adatbázis számolja össze az összes sort, ne pedig a memóriában történjen meg ugyanez."
Ezt kifejthetnéd bővebben is.[ Szerkesztve ]
Sk8erPeter
-
cAby
tag
válasz Sk8erPeter #8922 üzenetére
(#8919) mobal: Mit kell néznem?
Van sok változó, pl:
fav1 = true; // 1-es azonosítójú kedvenc
fav12 = false; //12-es azonosítójú nem kedvenc
fav3 = true; // 3-as azonosítójú kedvencNekem ez még mindig egyértelműen azonosítja. :\
(#8922) Sk8erPeter:
Ha kiíratom az elem id-ját az is egyértelműen meghatározza. (Plusz több adat is ki van írva, csak, hogy egyszerűbb példa legyen, kivettem a felesleget.)Záró- és nyitó tag azért maradt úgy ott, mert a teljes index.php-ban a 2 rész között szerepel még más is és ezt már külön nem töröltem ki.
-
válasz Sk8erPeter #8923 üzenetére
Query machinálás query() metódusban:
SELECT COUNT(*) AS resultSetCount
FROM IDE_JÖN_AZ_EREDETI_QUERY AS t0Ebben az esetben 1 darab mző jön le az adatbázisból, és emiatt jóval gyorsabb lehet, ha tényleg csak a rekordok száma érdekel.
---
Én pl. csináltam magamnak Any()-t, ami hasonló a fentihez, de nem csinál sub query-t, hanem berak egy LIMIT-et a végére. Ha jön vissza valami, true, ha nem, false. De van még egy pár ilyen, a teljesség igénye nélkül így oldottam meg a Max(), Min(), Average() hívásokat is.
-
Sk8erPeter
nagyúr
válasz Peter Kiss #8925 üzenetére
Minél lehet gyorsabb?
Annál kétlem, hogy gyorsabb, mintha ráküldesz egy COUNT(*)-ot az eredeti táblára, az eredeti WHERE feltételekkel, mint az, ha subquery-be teszed az eredeti query-t, max. egyszerűbb megírni.
De ez a számolgatásra történő optimalizálás továbbra sem értem, hogy jön ide.
Ha ráküldesz egy SELECT-et a bejegyzésekre, és lószart sem ad vissza, akkor abból elég egyértelmű, hogy nincs egy darab bejegyzés sem. A megadott dátumok meg eleve korlátozást jelentenek a bejegyzésekre, így nem mindent kérünk le egyszerre, és csak utána szűrünk. A szűrt feltételeknek megfelelő bejegyzéseket lekérjük, és ezután már tudni fogjuk, hogy van-e eredménye a lekérdezésnek.
Azt is lehetne csinálni, hogy először szépen lekérdezed, hogy van-e egyáltalán a feltételeknek megfelelő bejegyzés, majd ha van, akkor egy újabb query-vel ismét lekéred a feltételeknek megfelelő bejegyzéseket, de ekkor már pl. ki is íratod őket, de szerintem teljesen felesleges kétszeri query-t ráküldeni, ha a feladat úgyis csak az, hogy jelenítsük meg az adott dátumhoz tartozó postokat. Ha nincs ilyen, akkor azt jelezzük.Sk8erPeter
-
modder
aktív tag
Lehet, hogy én vagyok a figyelmetlen, és nem veszek észre valamit a kódban, amiből kiderülhetne az, amire kíváncsi vagyok.
menjünk sorba:index.php:
1) végigiterálsz az adatbázisból szedett favoritokon, mindegyikhez tartozik egy session változó, aminek az értéke true vagy false OK
1.1) kiíratod mindegyik favorithoz, hogy
"<form action='' method='post'>
<input class='fav_false' type='submit' name='add' value=' ' />" . " " . $row['item_name'] . "
</form>
...illetve a del párjátattól függően, hogy a sessionváltozóban true vagy false van-e OK
1.2) mindegyik favoritnál megnézed, hogy $_POST['add'] vagy $_POST['del'] kérés jött-e a fönti formból. NEM OK --> Honnan látod szerver oldalon, hogy az add vagy a del melyik favorit elemre vonatkozik? Hogy jobban megértsd, és nekem is választ tudj adni a kérdésemre, elmondom, hogy szerintem a következőképpen működik az index.php: add vagy del változó megjelenése esetén az összes favorit elemre beállítja a true-t vagy false-t. -
Sk8erPeter
nagyúr
Na, akkor most kezdd elölről, egy másik sessionnel. Küldj rá egy session_destroy-t, majd kezdd elölről a folyamatot.
Nagyon nagy csoda lenne valóban, ha a PHP csak úgy magától kitalálná, hogy te melyik azonosítójú elemet is szeretted volna kedvencek közé menteni, mivel szerveroldalon a form elküldése után csak annyi látszik, hogy létezik mondjuk a $_POST['add'], vagy épp a $_POST['del'], tehát megnyomtad a hozzáadó gombot, vagy megnyomtad a törlő gombot, de annak SEMMI nyoma nincs, hogy te most melyik azonosítóhoz tartozó hozzáadó-törlő gombot nyomtad meg. Mégis honnan a büdös francból kellene látnia a szerveroldalnak, hogy mi a szándékod?A CIKLUSON BELÜL van egy ilyen részed:
if ( $_POST['add'] )
{
$_SESSION['fav' . $row['id']] = 'true';
}
if ( $_POST['del'] )
{
$_SESSION['fav' . $row['id']] = 'false';
}Ergo az $sql = "SELECT * FROM items WHERE sitelink = '" . $site_link . "'"; query-d összes eredményén végigrohangászol, majd ha épp létezik szerveroldalon a $_POST['add'] vagy a $_POST['del'], akkor az aktuális cikluslépés sorazonosítójához tartozó sessionváltozóba eltárolod a "true" értéket.
Így ha egyszer megnyomtad azt a szaros gombot, akkor elméletben mindegyik adatbázisban megtalált azonosítóhoz tartozó session-változónál true lesz az érték.De lassan kifogyunk a magyarázat-kombinációkból.
Szerk.:
... és ahogy látom, modder nagyjából ugyanazt írta le közel egyidőben, mint én, más szavakkal.Egyébként könnyebb lenne látnod az egész eredményét, ha mondjuk adott felhasználóhoz nemcsak sessionbe mentenéd a kedvenceit, hanem úgy, ahogy van is értelme, adatbázisba. Mert így csak a munkamenet erejéig fognak élni a kedvencek.
[ Szerkesztve ]
Sk8erPeter
-
cAby
tag
válasz Sk8erPeter #8929 üzenetére
(#8928) modder és (#8929) Sk8erPeter:
Áááh, nagy nehezen leesett már, hogy mi is ezzel az egésszel a probléma!
(Pedig tök egyértelmű a hiba.)Átgondolom mégegyszer/kétszer az egészet és már menni fog szerintem.
Köszi szépen nektek!
-
modder
aktív tag
Hála a jó istennek
Annyit kell csinálnod, hgoy a formba teszel egy hidden mezőt aminek a neve pl. fav_id, értéke értelemszerűen a favoritod id-ja.
Amikor pedig megnézed, hogy van-e del vagy add, akkor azt is megvizsgálod a ciklusban, hogy a fav_id megegyezik-e az aktuális iterációban vizsgált favoritoddal.Egyébként nem is értem, hogy ez a hiba nálad miért nem jelentkezett. Gondolom volt egyetlen favoritod, és örültél, hogy arra megy
-
-
válasz Sk8erPeter #8927 üzenetére
Mint mondtam: ha kellenek a bejegyzések, akkor semmi értelme. De én csak odáig jutottam, hogy nem kellenek, és csak az kell, van-e. Arra írtam ezt. És nem, az eredeti query-t nem szabadna módosítani COUNT(*)-gal.
-
CSorBA
őstag
Ha már ilyen jól pörög a topik, eszembe jutott nekem is valami. (bár igazából sql-es kérdéseim is lennének, de szépen sorban )
Tegyük fel vannak bannerjeim. Adatbázisban tárolom az adatokat hozzá. A megjelenítés pedig random. No de, szeretnék prioritást.
Mondjuk van egy oszlopom, priortiy, és benne 1-2-3 értékek. Azt szeretném, hogy az 1es mondjuk kétszer olyan sűrűn jelenjen meg, mint a kettes, a hármasnál pedig 4szer. (ugye kb 8ból 4szer (1es prioritás), 2szer (2es prioritás), 1szer (3as prioritás), vagy ahogy tetszik).Hogy tudnám ezt megoldani egy gyors lekéréssel. Lehet-e esetleg pusztán sql-el?
Én arra gondoltam, hogy csinálok egy tömböt, amiben vannak számok, előfordulás szerint. pl. $elofordulasok = array ('1', '1', '1', '1', '2, '2', '3') és innen választok random egy számot, majd az sql lekérdezésben berakom feltételnek ezt (WHERE priority=$elofordulasok[rand(0,7)]). Ennél jobb ötlet?[ Szerkesztve ]
-
MODERÁTOR
Egy lehetséges megoldás. Kiveszed a bannaereket, belerakod egy tömbbe, mindegyikhez hozzárendelsz egy értéket - hogy mennyi az esélye mojduk, hogy ő lesz a következő banner, majd hozzáadsz egy bónuszt. Mondjuk + 10, és a prioritás értékével megszorzod. Pl.:
$banner = array(
'1' => '10',
'2' => '15',
'3' => '20',
...
);és akkor a végén így fog kinézni:
- első: 10 + 4 * 10
- második: 15 + 1 * 10
- harmadik: 20 + 2 * 10egyenlőség esetén, meg megint random döntesz remélem érthető voltam
[ Szerkesztve ]
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
cAby
tag
Sikerült megcsinálni, mostmár normálisan működik!
Mostmár csak annyi bajom lenne, hogyha olyan elemet akarok betenni kedvencnek, amihez görgetni kell lefelé az oldalon, akkor miután megnyomom, hogy kedvenc az oldal tetejére ugrik.Meg lehet azt csinálni, hogy az oldal állása ugyan az legyen, mint kattintás előtt?
-
Sk8erPeter
nagyúr
Igen, AJAX-szal.
Persze lehet gányolni is, pl. úgy, hogy egyes bekezdéseknek id-t adsz, majd megoldod, hogy odaugorjon a feldolgozást követően a böngésző, ahogy itt ebben a példában ugrabugrál a linkekre kattintva: [link], formhoz úgy lehet megoldani, ha pl. ha a hash-sel kiegészített cím van az action attribútumban.
Pl. action="test_jump.php?#blabla"Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Sk8erPeter #8938 üzenetére
Kifejtem kicsit, miért írtam, hogy picit "gányolás" a második megoldás. Önmagában természetesen a különböző azonosítóval ellátott id-khoz ugrálás egyáltalán nem gány, sőt, gyakran alkalmazott módszer, gondolom ezzel nem mondtam újat (lásd akár Wikipédia, stb.).
Az említett módszer viszont nem minden esetben működik. Vegyük azt az esetet, hogy a formot egy teljesen más feldolgozó fájlba irányítjuk, majd a feldolgozó fájlból PHP segítségével (header fv.-nyel) visszairányítjuk, a visszairányítás után a megfelelő üzeneteket kiírjuk, stb... Ebben az esetben hiába rakjuk a feldolgozó fájl neve mögé a hashmarkos fragmentet, azt a szerveroldal nem fogja megkapni, tehát nem is tudjuk beállítani a visszairányítós részhez.
Erre is van azonban kerülő megoldás: ha a formba beleteszünk pl. egy hidden mezőt, amiben eltároljuk annak a div-nek (vagy más HTML-elemnek) az azonosítóját, amihez majd ugrani szeretnénk a form feldolgozása után, és így állítjuk össze a címet, amihez szeretnénk átirányítani a felhasználót:
(legegyszerűbb példával)// visszairányítás
$filepath = 'test_jump.php';
$id_of_div = $_POST['id_of_div'];
header('Location: '.$filepath.'?#'.$id_of_div);
die();Ebben az esetben (ha már nem AJAX-szal küldjük el a formot) viszont figyelni kell arra is, hogy a form validálása/feldolgozása után kiírt üzenetek (ez vagy az a mező hiányzott, stb.) is a meghatározott id-jű div-be kerüljenek. Persze az is megoldható, hogy csakis hiba esetén írjon ki valamit, és akkor viszont annak megfelelően módosítjuk a fragmentet...
Na, ezek miatt írtam, hogy alaposan megbonyolítja a kódot, és innentől akár már nevezhető gányolásnak is. Bár lehet, hogy erős szó rá.Sk8erPeter
-
Jim-Y
veterán
Na hali, van egy rövid kódom, és nem akar működni kérlek nézzetek rá, nagyon alap, úgyhogy nem lesz nehéz válaszolni, de én süket vagyok most ehhez:/
Először is: fastruktúra
[root]
---[css]
------mystyle.css
---[html]
------popup.html
---[js]
------apns.js
manifest.json
apn.phppopup.html:
<html>
<head>
<link rel="stylesheet" type="text/css" href="../css/mystyle.css" />
<script type="text/javascript" src="../js/apns.js"></script>
</head>
<body>
<div id="popup_container">
<p id="apn_result">APN result here...</p>
</div>
<button type="button" onclick="loadXMLDoc()">Change Content</button>
</body>
</html>apns.js:
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp=new XMLHttpRequest();
} else {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("apn_result").innerHTML=xmlhttp.responseText;
}
}
alert(xmlhttp.responseText);
xmlhttp.open("GET","apn.php?q=checkapn",true);
xmlhttp.send();
}apn.php:
<?php
$q=$_GET["q"];
if ($q == "checkapn")
{
$response="Your APN is ...";
}
else
{
$response="No APN-s found";
}
echo $response;
?>Megj: ugye ez azt csinálná, hogy ha rákattintok a gombra, akkor az felvenné a kapcsolatot a php kóddal, url-hez hozzácsapná, hogy "checkapn".
A PHP leelenőrzi, és ha url-ben "checkapn" jött, akkor response-ban tök minden, hogy mit, de visszaküld valamit, amit a javascript hozzácsap az egyik HTML taghez.De nem megy:/
megj2: az apn.php-t az összes mappába bemásoltam, hátha az utvonal nem megfelelő, de még mindig semmi..
[ Módosította: 7 ]
-
Speeedfire
nagyúr
Hogy lehet egy adott adatbázis modellbe több ugyan olyan tartalmat beilleszteni?
Egy fájlfeltöltést szeretnék, ahol több képet és több videót is lehet feltölteni. A fájlokat szépen fel is tölti ellenben, az adatoknál csak egy-et tölt fel az adatbázisba. Megnéztem a modell-t és hát, csak egy bejegyzés van benne. Így nem is csodálom, hogy csak 1x van ott.public function myFileHandler($model, $imgFieldNameArr){
foreach($imgFieldNameArr as $attribute){
$instances = CUploadedFile::getInstances($model, $attribute);
$i=0;
foreach ($instances as $instance) {
if($instance){
$fullImgName = md5(time().$i).'.'.$instance->getExtensionName();
if($attribute=='image') { $type = 1; $tipus = 'kepek'; }
if($attribute=='video') { $type = 2; $tipus = 'videok'; }
$fullImgSource = Yii::getPathOfAlias('webroot').'/assets/'.$tipus.'/'.$fullImgName;
$model->name = $fullImgName;
$model->size = $instance->size;
$model->type = $type;
/*if($model->save()) {
$instance->saveAs($fullImgSource);
}*/
}
$i++;
}
}
var_dump($model); exit;
return true;
}public function actionCreate()
{
$model=new Items;
// Uncomment the following line if AJAX validation is needed
//$this->performAjaxValidation($model);
if(isset($_POST['Items']))
{
$model->attributes=$_POST['Items'];
if($model->validate(array('image','video'))) {
if($this->myFileHandler($model, array('image','video'))) {
$this->redirect(array(Yii::app()->baseUrl));
}
}
}
$this->render('create', array('model'=>$model));
}Próbáltam már, hogy csak a végén mentem a modell-t, úgy is hogy minden egyes fájl után, de valami nem stimmel nála.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
spammer
veterán
Van egy megrendelőlapom, textarea, textfield stb.. ezeket szépen elküldi mailben, eddig oké. Viszont van egy checkbox, aminek az értékét el kellene küldeni. Pl. ha vásároló bepipálja, akkor mondjuk elküldi az igen szót, ha nem pipálja be, akkor elküldi a nem szót.
Hogy lehet ezt rohadt egyszerűen megoldani? Mert $_POST dolgokkal próbáltam, textfieldnél működik, de checkboxnál nem.
„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."
-
Speeedfire
nagyúr
válasz spammer #8942 üzenetére
Van egy checkboxod, pl ez:
<input type="checkbox" name="hirlevel" value="igen" />Amikor feldobozod akkor meg:
isset($_POST['hirlevel']) ? $hirlevel = 'igen' : $hirlevel = 'nem';
//vagy
if(isset($_POST['hirlevel'])) { $hirlevel = 'igen';} else { $hirlevel='nem';}Majd a "nagyok" megmondják, hogy melyik a jobb.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
spammer
veterán
válasz Speeedfire #8943 üzenetére
A 2. módszerrel csináltam, működik! Nagyon szépen köszönöm!
„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."
-
modder
aktív tag
ez számtalan helyen elromolhat. kezdve attól, hogy nem jó a javascript XMLHTTPRequest küldés, nem jó a feldolgozó php (bár ezt kétlem), nem jól nyered ki a requestből az adatot.
Szóval lehetnél specifikusabb, hogy mi nem jó.
Egybként ami feltűnik, hogy relatív útvonalat használsz az XMLHttpRequestben, a HTML fájlod pedig a html mappában van, tehát a request az a hostnev/html/apn.php -ra fog irányulni, első meglátásra.
tegyél az url elé egy per jelet, hogy a hostod gyökerétől mérje az url útvonalát: "/apn.php?blabla"
Azt pedig, hogy hogy kell a problémát megkeresni, hagy ne kelljen elmondani mind chrome-ból vagy firefoxból nyomon tudod követni a javascripted futását, és kiírja a hibákat, érdemes nézni a böngészőből a request-responseokat is, mert ott látod, hogy egyáltalán elment-e a kérés és milyen válasz jött rá
[ Szerkesztve ]
-
modder
aktív tag
válasz Speeedfire #8941 üzenetére
úgy tűnik, yii-t használsz, úgyhogy elég speckó a kérdésed. én azzal még nem foglalkoztam. kéne tudni, hogy működik az new Items nevű modelled.
Ami amúgy egyből feltűnik a fileHandler függvényedben, hogy itt
$model->name = $fullImgName;
$model->size = $instance->size;
$model->type = $type;ugyanarra az objektumra állítod be mindig az értékeket, és utána elmented. Ha ez egy ORM-es cucc, akkor az első mentés után generál egy id-t a PRIMARY KEY-hez, majd ugyanazt a rekordot módosítja újra és újra minden iterációban. (Nem tudom, mi az az $instance, meg ezek, de nem látom, hogy a modellben lenne valami belső léptetés az új elemeknek).
Remélem elég sugallatot adtam
-
Speeedfire
nagyúr
Aha, minden egyes ciklus lefutásnál meglestem és hát valóban, ő beállította magának, hogy ha ilyen sok van akkor ez biza update lesz.
A fene a p*ofáját, hogy ennyire okos.
Már csak meg kell neki mondani, hogy ez nem update, hanem insert lesz. Keresgélek, de szerintem menni fog.
Nem igazán tudom, hogy lehetne hozzáadni a modellhez, szóval...Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
modder
aktív tag
válasz Speeedfire #8947 üzenetére
Beállította magának, hogy update lesz? Te lehet, hogy jobban vágod a YII működését, de nem hiszem, hogy intuíció alapján csinál dolgokat
Szerintem ha újat akarsz hozzáadni, minden iterációban példányosíts egy új Items-t.
(Én Kohanával dolgoztam, és ott úgy van az ORM modell, hogy egy példány<-->egy rekord az adatbázisban, persze komplexebb modelleknél, ahol több táblába akarsz egyszerre menteni meg blabla, felül lehet definiálni a működést, de alapból így van)
[ Szerkesztve ]
-
Speeedfire
nagyúr
Márpedig elég intelligens állat a yii.
Ha csak 1 fájlt akartam feltölteni akkor a model scenario értéke insert volt, ha többet akkor pedig update.
Most, hogy minden egyes ciklusban példányosítottam, jó lett.
Rá nem jöttem volna.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
PazsitZ
addikt
válasz Speeedfire #8949 üzenetére
A modelleknek CActiveRecord van egy isNewRecord property-je, ami alapján meg tudja állapítani insert vagy update művelet szükséges.
Bár ez a property állítható, de ebben az esetben még a primaryKey hibás értékre mutat.
Tehát a setPrimaryKey-vel az elsődleges kulcsot is állítanod kell a helyes működéshez.A fent említett módszer helyett viszont sokkal inkább ajánlott a költségesebb, de helyes működést garantáló new Model(); létrehozás, minden új sor beszúrásánál.
[ Szerkesztve ]
- http://pazsitz.hu -
Új hozzászólás Aktív témák
- Milyen TV-t vegyek?
- A Samsung hazánkban is piacra dob idén egy friss Micro LED tévét
- Futott egy Geekbench kört egy új HTC készülék
- HBO Max & OD topic
- Autós topik látogatók beszélgetős, offolós topikja
- RAM topik
- A személyre szabott reklám lehet a streaming következő slágere
- PlayStation 5
- Synology NAS
- Microsoft Office és Office 365 topic
- További aktív témák...
- AirPods Pro, hibátlan
- HP Zbook Firefly 16 G10 (865S8EA) Mobile Workstation - ÚJ - 16" notebook - i7-1360P, 32GB
- Asus TUF FX505GE - 15,6"FHD IPS - i7-8750H - 16GB - 512GB SSD - GTX 1050 Ti - Win11 - Magyar
- ASUS ROG STRIX Z370-H GAMING + Intel Core i5-8600K + SK Hynix 16GB DDR4 2666MHz - Számla + Garancia
- VADIÚJ, BONTATLAN! Mac Mini M2 8GB 256GB
- Xbox 360 hdd-vel + kontroller + tapegyeseg, mindez 4 szer, kinect 3db egyben elado
- Ryzen 5 5600G, RX 6700XT , 500gb SSD , 32gb ddr4 2666 - GARANCIA
- iMAC21.5 4K. i7, 16gb ram, 500gb ssd. 2015 vége.
- Creative Sound Blaster X-Fi Surround 5.1 PRO V3
- Inno3D GeForce RTX 4090 X3 OC 24GB GDDR6X - Beszámítás: OK