- Motorola Edge 50 Neo - az egyensúly gyengesége
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Mi nincs, grafén akku van: itt a Xiaomi 11T és 11T Pro
- CMF Phone 2 Pro - a százezer forintos kérdés
- Honor 400 - és mégis mozog a kép
- Milyen okostelefont vegyek?
- Google Pixel topik
- Motorola Moto Tag - nyomom, követ
- iPhone topik
- Bemutatkozott a Poco X7 és X7 Pro
Új hozzászólás Aktív témák
-
trisztan94
őstag
válasz
PumpkinSeed #14960 üzenetére
Egy fény nélküli szénakazal.
-
trisztan94
őstag
válasz
PumpkinSeed #14952 üzenetére
-
trisztan94
őstag
válasz
PumpkinSeed #14946 üzenetére
Nem localhost.domain.hu-ra gondolt az admin? Mert már láttam olyat.
-
modder
aktív tag
válasz
PumpkinSeed #14887 üzenetére
-
modder
aktív tag
válasz
PumpkinSeed #14884 üzenetére
ha az emlékeim nem csalnak, az alábbival megkapod a $query_id-tól kisebb legnagyobb id-val rendelkező, a $query_id, és $query_id-tól nagyobb legkisebb id-val rendelkező képeket.
(SELECT * FROM ( -- ez a kulső select azert kell, hogy novekvobe rendezze
SELECT * FROM kepek WHERE id <= ".$query_id." ORDER BY id DESC LIMIT 2)
ORDER BY id ASC)
UNION
(SELECT * FROM kepek WHERE id > ".$query_id." ORDER BY id ASC LIMIT 1)Ezt azért így kell, mert, ha van öt képed, amiknek az id-ja rendre id = {1,2,3,4,5}, majd kitörlöd a 2-est, akkor azt kapod, hogy id = {1,3,4,5}. Persze azt is megcsinálhatod, hogy kódban végigmész az egész result seten, és kiválasztod a megfelelő rekordokat, de szebb, ha az egészet rábízod az adatbáziskezelőre.
Erről beszélt a kutya is itt [link]Ja, és természetesen használj a attribute binding-ot a mysqli apival, mert rohadtul nem biztonságos a query stringbe behányt get paraméter.
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14875 üzenetére
A megfogalmazásod csöppet furcsa és érthetetlen.
Nyilván nem fog működni, ha az adatbázisban a következő elem id-je nem pont a soron következő, plusz 1-gyel növelt szám, illetve az előző kép azonosítója nem épp az 1-gyel levont érték. Gyakran lesz ez a helyzet, mivel az adatbázisból töröl olykor az ember fia vagy lánya rekordokat. (Kukázol képet, ami nem kő'.)
Magyarul írj olyan query-t, amivel megkapod az előző és a következő pár képet is, meg az aktuálisat. Nálad mondjuk csak három kép jelenik meg: az előző azonosítóval ellátott, az aktuális, valamint a következő, és kész. Írj olyan query-t, ami ezt a hármat lekéri.Annak a mondatnak nem sok értelme van, hogy "ÉN azt nem értem, hogyan működik a $p változó léptetése a tag-en keresztül." A tag, amire gondolsz, egy link. Egyszerűen belinkeled a következő képazonosítót, úgy, hogy beleteszed a query stringbe (http://example.com/kepek/index.php?image_id=345, ahol 345 a következő kép azonosítója) azt az azonosítót, ami a következő kép azonosítója; ezt kaptad meg az előző bekezdésben emlegetett query-vel az adatbázisból. Az előzőre linkelés ugyanígy történik, csak az előző képhez tartozó id-vel.
Ha nem oké még mindig, kérdezz. -
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14873 üzenetére
"Hogyan tudok úgy változót deklarálni, hogy annak nem adok értéket?"
Mi a célod?Egyébként nyugodtan kérdezz vissza, ha nem tiszta a magyarázat. Ha nem érted, ne szégyellj kérdezni.
Amiről beszéltünk, hogy látsszon az URL-ben az a kép, amelyiket meg kell jeleníteni. Például http://example.com/images/index.php?image_id=65432Mint látható, itt $_GET['image_id'] == 65432, és legalább az URL könyvjelzőzhető, elküldhető másnak.
Tudsz úgy lekérést írni, hogy adatbázisból ezt a képet kérd le, és az előtte/utána lévő akárhány elemet, amelyiket mondjuk thumbnailként szeretnéd megjeleníteni.
Vágod? -
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14871 üzenetére
Ezek szerint még mindig nem jött át, mit csinálsz rosszul. A query stringben legyen megadva a kép azonosítója. Ne sessionnel szórakozz, mert jelen feladatnál nem szabadna, hogy munkamenethez kötődjön, hogy melyik képnél jársz... Hogyan linkeled be az adott képet, ha mondjuk meg akarod mutatni ismerősödnek? Hogyan könyvjelzőzöd a megfelelő URL-t? (Az URL ugyanis jelen megoldásban BÁRMELYIK képnél is jársz, http://79.121.121.12:8080/imgshit/?elem=0 vagy http://79.121.121.12:8080/imgshit/?elem=1. SEMMI nem utal ebből arra, hogy pontosan melyik képet is kellene megjeleníteni.)
Ezeket gondold végig, és ennek alapján csináld meg.Korábban említetted, hogy GYŰLÖLÖD az adatbázis-kezelést (
). Ugye ezt nem valami fájlbaírós bohóckodással oldod meg?
-
modder
aktív tag
válasz
PumpkinSeed #14868 üzenetére
adok egy hintet:
<a href="?elem=<?= $p +1; ?>"><div id="button_next"></div></a>
A <?= -re be fogtok szólni, de én szeretem.
-
modder
aktív tag
válasz
PumpkinSeed #14863 üzenetére
valami olyasmit akartál csinálni, hogy 0-ra lefelé vált, 1-re pedig fölfelé, de "valamiért" nem működik. Jobban járnál, ha az elem query param tényleg a kép sorszámát tárolná.
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14865 üzenetére
Akkor most próbáld meg végiggondolni, hogy mit és miért írt DNReNTi úgy, ahogy. Oka volt rá, hidd el.
-
DNReNTi
őstag
válasz
PumpkinSeed #14863 üzenetére
Fixen meg van adva hogy mire linkeljen
href="?elem=0" és href="?elem=1" így persze hogy csak a 0. és 1. elemek közt léptet. -
wis
tag
válasz
PumpkinSeed #14853 üzenetére
Azt az IP-t látod amelyikről elérik a szervert. A győri usernek az internetes IP-jét látod, kivéve, ha használ valami proxyt vagy vpn-t, hogy elérje az oldalad.
-
wis
tag
válasz
PumpkinSeed #14851 üzenetére
A 127.0.0.1 és a ::1 is a saját IP címed. Példa a lekérdezésre
-
Tele von Zsinór
őstag
válasz
PumpkinSeed #14849 üzenetére
Ne v6-on kérd az oldalt. Modern oprendszereken a localhost ::1-re mutat, használd a 127.0.0.1-et (vagy szerkeszd a hosts file-odat).
-
fordfairlane
veterán
válasz
PumpkinSeed #14847 üzenetére
Ez az IPv6-os localhost.
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14837 üzenetére
Mindenképpen.
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14826 üzenetére
Nem, nem jó. Ha ilyesmikkel játszadoztál eddig, nem csodálom, hogy szívásnak érezted az egészet. Részletesen felsoroltam a teendőket ahhoz, hogy az UTF-8-karakterkódolással (és így a mindenféle nyelvben megtalálható specifikus karakterekkel, ékezetekkel, és egyéb, speciális karakterekkel) ne legyen problémád.
"Na én ezt nem akarom minden egyes gyakoroló feladatnál megcsinálni.
"
Ezt remélem, csak viccnek szántad.Ne már. Legegyszerűbb módon legyen egy vagy több fájlod, amiben mindenféle ilyen lépést megcsinálsz, és ezeket egyszerűen include-old mindig az index.php-dban, és kész.
Ezen fájlok valamelyikében kiküldöd az UTF-8-as fejlécet (a header() fv. mutatott használatával), máshol megnyitod a kapcsolatot az adatbázissal (ezt is úgy, hogy már a kapcsolat elején beállítod az UTF-8-karakterkódolást, ahogy írtam; hogy singleton-mintán keresztül kommunikálsz az adatbázissal, ami esetleg nehezíti a unit testet, vagy más, az tök mindegy most ebben a fázisban még, mivel valszeg azt sem tudod, mi az a singleton vagy a unit test). Az előző step-by-step útmutató szerintem eléggé világos.A fájljaidnak alapértelmezetten amúgy is UTF-8 without BOM-kódolásúnak kellene lenniük, egyszerűen az általad használt fejlesztőeszközben állítsd be (bár a fejlesztőkörnyezeteknél ez az alap, csak az egyszerűbb, Notepad++-szerű szövegszerkesztőknél szokott default lenni az ANSI, mármint Windows-on), hogy mindig UTF-8 without BOM-kódolású fájlokat hozzon létre.
Az adatbázisban is érdemes (szerintem) alapértelmezettre állítani valamelyik utf8_ kezdetű collationt.
Nem hiszem, hogy ezek olyan bonyolult lépések lennének. Hidd el, hogy az összhaszon nagyobb lesz vele, mintha lusta vagy egyszer ezt az utat végigjárni. Például akkor megtanulsz adatbázist kezelni, és nem bohóckodsz fájlokba írogatással és azokból olvasással olyan műveletek esetén, amiket illene adatbázissal elvégezni.
Adatbázis-kezelési ismeretek nélkül manapság egy fejlesztő akár éhen is halhat.
-
Tele von Zsinór
őstag
válasz
PumpkinSeed #14821 üzenetére
Pici fogalmi hiba: a superglobalok a $_GET, $_POST, $_REQUEST, $_SERVER, stb. tömbök. Azért superglobalok, mert nem kell importálnod őket függvényekbe, mindenütt elérhetőek korlátozás nélkül.
Amire te gondolsz (és amit használsz) az a sima global változó, ezt minden egyes függvénybe külön kell behúznod.
-
fordfairlane
veterán
válasz
PumpkinSeed #14826 üzenetére
Nem jó. Le lett írva, mi a jó.
Adatbázis: Legyen minden UTF8.
Alkalmazás kiszolgáló: Nincs teendő, csak a mysql kapcsolat inicializálásnál legyen beállítva SET NAMES UTF8.
Kliens: meta tag charset=UTF8Ez a konvertálgatás csak hibákat szül.
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14824 üzenetére
"Lusta vagyok adatbázissal szenvedni (létrehozni, szenvedni az undorító karakterkódolással (amit nagyon gyűlölök))"
Ha a karakterkódolás szenvedés, akkor valamit eddig rosszul csináltál. Leírhatnád, hogy csinálod, és biztos kiszúrjuk a hibát.- PDO-val adatbázishoz kapcsolódás, meg a többi alapvető dolog itt van, Tele von Zsinór kolléga cikkében: http://maerlyn.eu/2011/12/03/pdo.html.
Ott van egyből az elején, már a kapcsolódás után:
SET NAMES UTF8
Magyarul itt a kapcsolat kódolását egyből UTF-8-ra állítod.
- A fájljaid karakterkódolása is legyen UTF-8 without BOM, ezt Notepad++-ban nagyon könnyen tudod ellenőrizni.
- A meta tagek is lehetőleg így legyenek beállítva a <head>-részben.
- A HTTP headert pedig módosítsd PHP-vel így még mindenféle kimenet előtt:
header('Content-Type: text/html; charset=utf-8');
- Ezenkívül az adattábláid is legyenek UTF-8-as karakterkódolásúak (collation), valamelyik utf8_ kezdetű ezek közül, amelyik kell.Igazából ennyinek elégnek kellene lennie, ha valamit nem felejtettem ki a listából.
-
fordfairlane
veterán
válasz
PumpkinSeed #14821 üzenetére
Az első kérdést nem nagyon tudtam értelmezni, de úgy van ha lépteti akkor azonnal menti a fájlba, őszintén nem tudok rá válaszolni.
Ez világos, de a kiíratás miért ide került? A számlálót akár többször is megjelenítheted az oldalon, vagy változhat a mérési metódus, pl. azáltal, hogy nem letöltést számoltatsz, hanem munkamenet indítást.
Vagy, ahogy az általában lenni szokott, a számlálót nem a látogatónak kell megjeleníteni, hanem az oldal adminisztrátorának, hiszen neki kell ismerni a forgalmi adatokat. Tehát a számláló léptetést, és a számláló állapotának megjelenítését érdemes különválasztani.
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14821 üzenetére
Fogalmam sincs, meddig tárolják. Eddig ritkán láttam ott 404-et, az valszeg amiatt volt, mert a szerző eltávolította. De lehet, hogy írják a honlapon a max. tárolási időt, keresd meg.
Amúgy már akartam kérdezni, miért játszadozol mindig fájlba írogatásokkal, abból olvasással? Ez a látogatószámlálósdi csak játék, még mindig a fájlba írogatást, olvasást gyakorolgatod? Vagy mi a célod vele? -
fordfairlane
veterán
válasz
PumpkinSeed #14817 üzenetére
Miért raktad egy fájlba a számláló léptetést a kiíratással? Miért globális változót használsz a beolvasáskor? Mi az a bonyolult osztás a kiíratásnál? És akkor már azt a "main()" függvény szerű kódrészt is függvénybe rakhatod. Akár lehet main a függvény neve.
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14817 üzenetére
Szívesen, de azért úgy rakd fel ideone.com-ra, hogy az működjön is.
Például kezdd a szokásos <?php nyitótaggal, meg nyilván helyi fájlokat ne próbálj megnyitogatni vagy írogatni (fopen, fwrite és társai felejtős), mert nem fog menni.
(Ahogy jsFiddle-nél is hiába hivatkozol képforrásként helyi fájlra, nem fog menni (hacsak nem a jsFiddle szerverén valóban ott lévő fájlt include-olod).) Ott például helyettesítheted valami példakimenettel az adott függvényt.
-
biker
nagyúr
válasz
PumpkinSeed #14817 üzenetére
A vegen a bohockodassal rontod el, amikor osztod millioval, kerekited, felszorzod
Bullshit
Beirod 1 2 45 akarmi, aztan ezzel szamolsz, majd ha kisebb mint sza 5 nullat irsz ele, ha kisebb mint ezer negyet stbEz nem elég?
a switch is egy felesleg, hiszen már megvan, az is, hogy előbb átadod az egyik változót, majd hozzárendeled másikhoz, majd azt növeled.$ertek = fopen("szamlalo.txt", "r") or die("nem sikerült");
while (!feof($ertek))
{
$karakter = fgetc($ertek);
if ($karakter == "")
{
//semmi
}
else
{
echo "<img src=images/";
echo $karakter;
echo ".gif border=0>";
$szam .= $karakter;
}
}
fclose($ertek);
$ertek = fopen("szamlalo.txt", "w") or die("nem sikerült");
$szam += 1;
fputs ($ertek, $szam);
fclose($ertek); -
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14814 üzenetére
"nincs valami jsfiddle oldalhoz hasonló ahova php-t lehet feltenni?"
Olyasmi:
http://ideone.com/ -
biker
nagyúr
válasz
PumpkinSeed #14814 üzenetére
az egészet felejtsd el, ha egyszerre ketten akarnak majd bele írni, már gond lesz
+ nekem volt ilyen számlálóm, állandóan nullázódott random időnként, gondolom valami fread hiba miatt, és akkor 0áról indult, gagyi ez a file írogatós számláló -
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14785 üzenetére
Mármint az angol nyelvet nem szereted? Hát az kellemetlen, mert infósként nagyjából lehetetlen az angol nyelv értése és használata nélkül létezni.
-
fordfairlane
veterán
válasz
PumpkinSeed #14776 üzenetére
A readfile-t így kell használni:
<?php
readfile("fajlnev");
?>Se fopen nem kell, sem a visszatérési értékkel nem kell foglalkozni.
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14781 üzenetére
És ebben a mondatban hol szerepel az, hogy a visszatérési értékét kellene felhasználni?
Angol amúgy megy? Mert nem meglepő módon a php.net az elsődleges dokumentációs forrás.
-
wis
tag
válasz
PumpkinSeed #14781 üzenetére
Igen, a readfile kíirja a tartalmat a kimenetre. A probléma ott volt, hogy a visszatérési értéket is kiírtad.
-
wis
tag
válasz
PumpkinSeed #14776 üzenetére
A readfile() a fájl méretét adja vissza, nem a tartalmát
echo helyett használd a var_dump()-t és egyből látod, hogy a visszatérési értéke int és nem string.
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14776 üzenetére
Biztos azért, mert 125 van a fájlban.
(#14775) Tamoo :
öröm -
DeltaPower
addikt
válasz
PumpkinSeed #14744 üzenetére
Ami még így hirtelen feltűnt:
$kapcsolat = new mysqli('localhost','root','usbw','news');
A classnév alapján itt mysqli kapcsolat van. Itt viszont sima mysql, nem mysqli:
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");Valszeg egyszerűbb lenne ide is $kapcsolat->query()-t használni, akkor nem lenne keveredés.
-
DeltaPower
addikt
válasz
PumpkinSeed #14738 üzenetére
Ez ránézésre utf8-utf8 konverzió... próbáld meg úgy hogy ezt szedd ki:
$title = utf8_encode(trim($title));
$content = utf8_encode(trim($content)); -
Dave-11
tag
válasz
PumpkinSeed #14740 üzenetére
Még esetleg annyi, hogy én Notepad++ -ban csinálom a PHP fájlokat, és ott mindig UTF-8 BOM nélkülire állítom a karakterkódolást.
-
Dave-11
tag
válasz
PumpkinSeed #14738 üzenetére
De ha kiíratod egy PHP fájlba az adott rekordot, akkor is így írja ki?
Esetleg még annyit tehetsz, hogy a PHP részeknél beírsz egy ilyen sort:
header("Content-Type: text/html; charset=utf-8"); -
DNReNTi
őstag
válasz
PumpkinSeed #14730 üzenetére
Gyóó.
Ettől ez sokkal egyszerűbb.
Ha jól értem a title és content mezők utolsó két rekordját szeretnéd megjeleníteni a news táblából. Na most ha jól értem akkor ez egész egyszerűen így fog kinézni:
$sql_lekerdezes = "SELECT title, content FROM news ORDER BY id DESC LIMIT 2;"; -
DeltaPower
addikt
válasz
PumpkinSeed #14662 üzenetére
Ne a $fp file pointert explode-old, hanem a $beolvas stringet.
-
DeltaPower
addikt
válasz
PumpkinSeed #14660 üzenetére
Tömböt ad vissza, ezért gondoltam egyértelmű, hogy $arak[0], $arak[1] stb. mivel a sorból egydimenziós tömb lesz.
-
DeltaPower
addikt
válasz
PumpkinSeed #14658 üzenetére
fgetcsv egyszerre egy sort olvas
-
trisztan94
őstag
válasz
PumpkinSeed #14652 üzenetére
Szebb úgy, ha a string összefűzést egy külön változóban csinálod, majd azt adod meg, mint index
for($i=0;$i<7;$i++)
{
$index = "input_".$i;
$input = $_POST[$index];
echo $input;
}Később sokkal átláthatóbb lesz.
-
PumpkinSeed
addikt
válasz
PumpkinSeed #14651 üzenetére
$input = $_POST['input_'.$i];
-
DeltaPower
addikt
válasz
PumpkinSeed #14648 üzenetére
usort ha pozitív számot kap visszatérésnek akkor az első nagyobb mint a második, ha negatívot akkor a második nagyobb mint az első, ha nullát akkor egyenlőek
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14614 üzenetére
Az előbb amúgy azt nem írtam, hogy az eddigi tömbös megoldás folytatható, DE felesleges az összes eddig érkezett karaktert eltárolni, gondolj bele, mi van, ha óriásfájllal van dolgod, akkor ott csücsül a memóriában az a sok immár feleslegessé vált adat. Szóval egyszerűen felülcsaphatod a tömböt az új adatokkal, amikor nem szükséges már tárolni az adott karaktereket.
De engem továbbra is érdekelne, miért ezt a fájlos megoldást választjátok
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14612 üzenetére
"Egyszerre 2 karaktert vizsgálok, és ha két azonos karakter van egymás mellett akkor az számít egy gyémántnak, viszont ha a két karakter előtt van egy l (L) betű akkor az nem gyémánt, viszont ha I (i) van akkor pedig bankba kell helyezni és csak a felét éri. Ha a két karakter mögött szám áll akkor az a szám értékének megfelelő gyémántot jelenti."
Erre Athlon64+ múltkor jól sikerült hozzászólását tudnám idézni:
http://prohardver.hu/tema/php_kerdesek_2/hsz_14593-14593.html
"Úúú, valami nagy tákolás van készülőben!"
Viccet félretéve nem értem, mi indokolja egy online játék esetén ilyen borzalom választását?Már eleve a fájlbaírás kényszerét nem értem (adatbázis, felhasználók tábla, gyémántjaik és egyéb pontjaik kigyűjtésére szolgáló táblák?), de ha már fájl, akkor is lehetne ennél ezerszer értelmesebb megoldásokat alkalmazni.
Vagy épp az eddigi tákolmány megoldásból szeretnél kinyerni értelmes adatot, hogy átalakítsd valami értelmesre? Remélem, utóbbi.
Amúgy ezek sima feltételvizsgálgatások, az eddigi tömbös kódrészleted folytatásával is megoldható."Ilyen dolgokról még nem is halottam, de akkor ezek alapján érdemesebb pointerekkel végezni ezt a munkát ahelyett, hogy beindexelem az egészet."
Hogy mi van?Milyen pointerekről beszélsz? Én állapotgépről beszéltem neked, ami leegyszerűsítheti a tervezésedet (meghatározod az állapotokat, elvárt bemenetektől függővé teszed őket, tervezel, hogy ne legyen belőle tákolás). Nem került szóba semmilyen pointer, főleg, hogy PHP esetén a klasszikus értelemben vett (pl. C, C++) pointerekről nincs is értelme beszélni, mivel ilyen nincs, legfeljebb referenciáról.
Valami nagy-nagy félreértés van itt. -
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14606 üzenetére
Igen, azért lépi túl a memóriakorlátot, mert rossz módban nyitod meg a fájlt, de ezt már írtam korábban:
"Aztán: 'ab' módban nyitod meg a fájlt, ebből az 'a': "Open for writing only; place the file pointer at the end of the file. If the file does not exist, attempt to create it.", 'b' a binary mode. Az 'a' itt esetedben nem igazán indokolt, mivel egyszerű olvasást hajtasz végre. A binary mode biztos kell neked?"
tehát
$fp = fopen('$DOCUMENT_ROOT/../gem.txt','ab');
HELYETT például próbáld meg így:
$fp = fopen($DOCUMENT_ROOT.'/../gem.txt','r');
binary mód attól függően kell, hogy van eltárolva...Pont azért idéztem neked a dokumentációt, mert az 'a'-val a fájlpointert a fájl végére teszi. Neked pont nem ez kell...
(#14608) PumpkinSeed :
"a karaktereket az alapján kell kiszedni, hogy mi van a környezetében. Például van egy karakter akkor ha előtte egy bizonyos karakter van akkor az off, ha pedig mögötte kettővel egy másik van akkor megint off. Ez most le van egyszerűsítve de minimum 10 index távolságba mindkét irányba vizsgálni kellene a környezetét."
Ezt a legegyszerűbb egy állapotgépes modellel megvalósítani, egy Móricka-rajzon leírhatnád papírra, mik az állapotok, aztán összekötögetve készülne egy egyszerű állapotdiagram. Vagy készíthetsz állapottáblát is. (Utóbbinak előnye, hogy ott ordít, ha valamilyen állapotnál kimaradt a kitöltés, míg az állapotdiagramnál a nyilacskázást valahol könnyen el lehet felejteni véletlenül.)
Nem tudom, csináltál-e már ilyet. Más nyelvekben szokás enum típust szokás használni erre a célra, jelezve az állapotokat, PHP-ben kerülő megoldás vagy SplEnum van. Az állapotgépes modell egyébként elég egyszerű, switch-case-es szerkezettel megvalósítható.Kérdés, hány állapotod lehet. Mit keresel, egy szót? Számokat? Mi a feladat? Azért is kérdezem, mert lehet, hogy egyszerűbben is megvalósítható, mint ahogy próbálkozol.
-
DeltaPower
addikt
válasz
PumpkinSeed #14608 üzenetére
Nem tudom pontosan hogy és milyen szempontok szerint válogatsz, de egy közepesen bonyolult programozási mintafeladatra emlékeztet, szerintem ez egy 21 elemű fifo tároló.
Tegnap találkoztam egy hasonlóan bonyolultnak tűnő, de valójában egyszerű problémával: véletlen számú és sorrendű, 2x2, 1x2 vagy 1x1 méretű cellákból szabályos, 4 oszlopos html táblázatot összerakni. Először valami rekurzív rendezési megoldásban gondolkodtam, aztán rájöttem hogy 1 db for ciklussal megoldható
-
DNReNTi
őstag
válasz
PumpkinSeed #14608 üzenetére
Nem csináltam még hasonlót szóval csak elméletben:
Mi lenne ha a fájlból mindig csak 10 karaktert olvasnál be és azt vizsgálnád? Ha az megvan akkor jönne a következő karaktert követő 10-es sorozat. Beolvasáskor vizsgálni kellene h van e egyáltalán még 10 karakter, ha nincs akkor ennyi. Így végülis mindig egy 10 elemű tömbbel dolgoznál, és egy változóban csak azt kellene tárolni hányadik karakternél jársz a fájlban.Sőt akár azt is lehet hogy csak első alkalommal olvasol be 10 karaktert, aztán csak egy index-el lentebb "sorolod" a meglévő elemeket, és az utolsó helyre egy új karaktert szúrsz be.
Remélem sikerült érthetően vázolni az elméletemet
-
DeltaPower
addikt
válasz
PumpkinSeed #14606 üzenetére
Ha csak bizonyos karaktereket kell kiszedned, akkor miért olvasod be az egészet? Stream módszerrel is meg lehetne oldani: fgetc, karakter vizsgálata, ha megfelel a feltételeknek akkor egyből fwrite egy másik fájlba, ha nem akkor jöhet a következő karakter beolvasása.
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14599 üzenetére
A kódod több szempontból is rossz:
$fp = fopen('$DOCUMENT_ROOT/../gem.txt','ab');
Mivel sima aposztrófot használsz, a $DOCUMENT_ROOT nem fog behelyettesítődni, tehát vagy konkatenáld, vagy használd az idézőjelet (de inkább előbbi a kód jobb olvashatósága érdekében).
Aztán: 'ab' módban nyitod meg a fájlt, ebből az 'a': "Open for writing only; place the file pointer at the end of the file. If the file does not exist, attempt to create it.", 'b' a binary mode. Az 'a' itt esetedben nem igazán indokolt, mivel egyszerű olvasást hajtasz végre. A binary mode biztos kell neked?Ezenkívül ezt csinálod:
$i = 0;
while (!feof($fp)) {
$szoveg[$i] = fgetc($fp);
$i++;
echo $szoveg[$i];
}itt az $i változót megnöveled, és AZUTÁN íratod ki a $szoveg tömb i-vel indexelt tartalmát. Magyarul az echo-nak nyilván még az $i++ előtt kéne szerepelnie.
Meg ellenőrizni kéne, hogy a megnyitás sikeres volt-e (elég egyszerű: a while-t és fclose-t egyszerűen berakod egy if($fp) blokkba), sikertelen megnyitás utáni fclose warningot okoz. Igaz, sikertelen fopen is azt okoz, ezért azt speciel érdemes lehet elnyomni @ karakterrel, VAGY még a megnyitási kísérlet előtt vizsgálni, hogy létezik-e egyáltalán a fájl (file_exists()).
Ez egyébként csak gyakorlás? Mi a konkrét célod?
==================================================
(#14600) Athlon64+ :
"Karaktert nem lehet indexelni."
+ (#14602) Athlon64+ :
"Akor ne indexeld a beolvasott karaktert?!"
Mi az, hogy karaktert nem lehet indexelni? A kódja teljesen jól működne, ha jól használná. Sehol nem is indexeli a karaktereket, egyszerűen a karaktereket egy külön tömbbe rakja, aminek az indexét az $i adja. -
sztanozs
veterán
válasz
PumpkinSeed #14601 üzenetére
Vagy miért nem a beolvasás során vizsgálod meg a karaktert? úgy nem kellene eltárolnod egy bazinagy tömbben...
-
biker
nagyúr
válasz
PumpkinSeed #14601 üzenetére
de csak én érzem hülyeségnek???
milyen szöveg? betűk és számok? akkor lesz 45-90 elemű tömböd, aminél a tömb indexe a betű, és kell egy leíró tömb, melyikből hány darab van benne.
ennek értelme is lenne, bár kevés, de több, mint te akarszmert nem lehet egy többen $t['a']-ból kettő, igaz?
$t['a'] = 123db
$t['b'] = 432db
stb
egyáltalán mit akarsz? jó a megközelítésed? -
Peter Kiss
őstag
válasz
PumpkinSeed #14601 üzenetére
Akor ne indexeld a beolvasott karaktert?!
-
Peter Kiss
őstag
válasz
PumpkinSeed #14599 üzenetére
Karaktert olvasos, és nem sort/karakterláncot. Karaktert nem lehet indexelni. Ha kell a fájl egész tartalma:
<?php
echo file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/../gem.txt');Ez string-ként beolvassa az egészet, azt pedig már lehet indexelni.
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14595 üzenetére
Még jó, hogy ilyen sok részletet megosztottál a megoldásodról...
-
Tele von Zsinór
őstag
válasz
PumpkinSeed #14595 üzenetére
Mi az, hogy "jegyzettömb"?
-
DeltaPower
addikt
válasz
PumpkinSeed #14575 üzenetére
alapértelmezésben kiveszi, vagy beírod így, ha csak a newline-t akarod kiszedni (spacet, tabot nem):
trim($str, "\n\r");
ha pedig csak a sor végéről, akkor rtrim-et használsz -
DeltaPower
addikt
válasz
PumpkinSeed #14573 üzenetére
beolvasás után trim-eled?
-
CSorBA
őstag
válasz
PumpkinSeed #14563 üzenetére
Nem tudtam, hogy ennyire analfabéta a Windowsos jegyzettömb.
A hangsúly nem az analfabétaságon, hanem a windowsoson van. Máshogy van kódolva, más a sortörés. Notepad++ ezt tudja érzékelni, de attól még neked rossz a sortörésed windows alatt.
Ajánlom: [link] -
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14561 üzenetére
Nálad betegség ez a </br>?
Itt is (meg más topicban is már) ugyanezt használtad, akkor is írtam, hogy csak <br /> vagy <br/> vagy <br> van.
Egyébként csak egyszer gondold már végig, hogy itt milyen "megnyitott" taget akarnál lezárni, ami miatt az elejére teszed a perjelet? Semmilyet, mivel ez self-closing tag, ergo egyből a végére kell (HTML5-nél nem kell, de lehet) tenni a perjelet, szóval egyből lezárni az elemet.
Az érdemi problémára: azt sem írtad, hogy milyen platformon tesztelsz (először azt sem írtad, hogy nem böngészőbe írt kimenetről van szó, hanem txt-fájlról), de feltételezem, Windows-on, és azt sem írtad, azonbelül milyen szövegszerkesztőben nézed meg az eredményt, feltételezem, olyanban, ami a UNIX-os sorvégződéseket (\n, LF) nem "támogatja" (pl. sima Notepad, míg Notepad++ támogatja), csak a Windows-osat, ami CRLF, vagyis \r\n, vagy PHP_EOL Windows-on (a PHP_EOL Unixon az említett \n-t adja), magyarul a megoldás lehet, hogy \n helyett \r\n-et írsz, vagy például használsz egy normális szövegszerkesztőt, és abban nézed meg...
-
whYz
őstag
válasz
PumpkinSeed #14559 üzenetére
Ez se nagyon php kerdes amugy, de ha jol tudom \n-hez <pre> tag kell. Amugy hasznalj <br />-t vagy <div>-et vagy akarmi mast.
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14398 üzenetére
Még mindig nincs olyan, hogy </br>, csak olyan van, hogy <br /> vagy <br>...
(Pedig szerintem ez már lett neked említve korábban.)
"mi az a konkatenalás?"
Most komolyan, ne csináld már... próbáltad már azt, hogy visszakérdezések helyett előbb beírod Google-be az ilyen szavakat?
De most segítek: összefűzés...A kódbeli részére:
echo 'empty($abroncs): '.empty($abroncs).'</br>';
HELYETT:
echo 'empty($abroncs): '.var_export( empty($abroncs), TRUE ) .'<br />';
PHP 5.5.0 felett pedig használhatod ezt is:
http://www.php.net/manual/en/function.boolval.phpVagy castolod int típusúvá:
echo 'empty($abroncs): '.(int)empty($abroncs).'<br />';Annak a sorodnak meg semmi értelme, hogy
echo 'isset($fos): '.isset($abroncs).'</br>';
mivel a stringbe a fantáziadús $fos nevű változót akarod tenni, de a KONKATENÁLÁS során pedig az $abroncs változót használod...Szerk.:
jé, úgy látszik, egy órák óta betöltött változatot láttam, mert azóta kaptál válaszokat.(#14404) PumpkinSeed :
"0-át"
Akarod mondani 0-t. Próbáld kimondani azt, hogy "0-át", az jön ki belőle, hogy "nullá-át". Így szoktad kimondani?Vagy pedig úgy, hogy "nullát"?
http://debuggable.com/posts/false-0-or-not:480f4dd6-b2f8-49ac-97fd-493acbdd56cb
http://stackoverflow.com/questions/137487/null-vs-false-vs-0-in-php
-
trisztan94
őstag
válasz
PumpkinSeed #14406 üzenetére
mert a 0 az semmi. a boolean true értéke 1, a false értéke semmi. Most lehet, hogy hülyeséget mondok, de ha jól tudom a false értéke az igazi "NULL", ami viszont nincs PHP-ban, ezért nem ír semmit.
-
trisztan94
őstag
válasz
PumpkinSeed #14404 üzenetére
-
fordfairlane
veterán
válasz
PumpkinSeed #14398 üzenetére
Pont a lényeget nem írtad le, hogy mi van a változóban. Egyébként mind a négy sorban az $abroncs változó szerepel. isset 1-et, azaz true-t ad vissza, tehát létező változó, empy meg gondolom false-t ad vissza.
-
Soak
veterán
válasz
PumpkinSeed #14400 üzenetére
String összefűzés. Miért nem használsz valami rendes IDE-t ? Pl Netbeans vagy Eclipse. Be van kapcsolva a syntax highlight? Amúgy szánékosan van ugyanaz a változó minden 2. tagban?
-
Soak
veterán
válasz
PumpkinSeed #14398 üzenetére
De ezt kellene latnod mivel az elsoket nem konkatenalod. Miben fejlesztesz, hogy nem tunik fel a mas szin?
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14241 üzenetére
Az hogyan lehetséges, hogy egy PHP+MySQL-es könyvet HÁROMSZOR elolvastál, állítólag mindent tudsz belőle, és ilyenek gondot okoznak, például az, hogy rájöjj, hogy itt valami "pusztító alpáriság" történik?
Javaslom, inkább könyvolvasás helyett vagy MELLETT GYAKOROLJ rengeteget, önmagában az, hogy olvasgatsz, nem fog rávezetni a probléma-megoldásra. Saját tapasztalatok, saját hibázások kellenek, hogy tanulj is belőle. Persze mindezt a kísérletezést localhoston tedd.
-
alfa20
senior tag
válasz
PumpkinSeed #14252 üzenetére
Esetleg hátha még EZ is érdekel, én itt szoktam próbálkozni, ezt bárhonnan elérem szerkesztés céljából, egyszerű, de azért használható. FTP-re is lehet csatlakozni, de ATW-re sajnos nem sikerült még, azt szerintem nem szereti.
-
alfa20
senior tag
válasz
PumpkinSeed #14250 üzenetére
Mit szóltok ehhez az oldalhoz?
-
cucka
addikt
válasz
PumpkinSeed #14248 üzenetére
Oreilly PHP The good parts elég jónak tűnt. Meg van egy Expert PHP And MYSQL a Wroxtól, szintén nem rossz, meg ha jól rémlik, valami nagyon hasonló cucc az Apress-től is. PHP Fekete könyv szintén nem volt rossz, de nem tudom, van-e belőle friss kiadás.
Magyar nyelven a jó könyvek töredéke jelenik meg, szóval ez nagyon rontja az esélyeidet. Amire még érdemes odafigyelni, hogy friss php verzióval foglalkozzon a könyv. 5.x verziókban elég sok újítás volt, amikkel érdemes tisztában lenni, szóval 2010-2011 előtti könyvre én nem pazarolnám az időmet. A "24 óra alatt" könyveket felejtsd el.
-
fordfairlane
veterán
válasz
PumpkinSeed #14246 üzenetére
Értem, ezt nem tudtam, így már világos. Sajnos nem ismerem a friss könyvválasztékot, de az fontos, hogy ne elavult legyen, mivel sokminden változik a PHP fronton is néhány év alatt. Ezért javasolják többen, hogy lehetőleg friss kiadásút válassz. Ugyanakkor az is fontos, hogy didaktikailag jó legyen a könyv, és sajnos ez sem általános jellemzője, főleg nem a szegényes hazai kínálatnak.
-
fordfairlane
veterán
válasz
PumpkinSeed #14241 üzenetére
Szinte mindent tudsz belőle, és nem tudsz megoldani egy kétmezős form adatainak feldolgozását?
Hát akkor tényleg borzasztóan rossz könyv lehet.
-
wis
tag
válasz
PumpkinSeed #14228 üzenetére
Ezt szúrd be a kódod elejére és akkor kiírja a hibákat (persze majd élesben szedd ki):
error_reporting(E_ALL);
ini_set('display_errors', 1);(#14242) PumpkinSeed
Ez a könyv 2005-ös... -
fordfairlane
veterán
válasz
PumpkinSeed #14236 üzenetére
Rég nem foglalkoztam már kezdőknek való könyvekkel, de ha kezdő lennék, talán egy ilyet kipróbálnék. [link] Nem drága, és elég friss, 2011-es kiadású, így nagy valószínűséggel nem elavultak a példakódok.
-
DNReNTi
őstag
válasz
PumpkinSeed #14233 üzenetére
Én nem könyvből tanultam, hanem az interneten. Ha megy az angol, akkor szinte minden kérdésedre választ kapsz a StackOverflow-on, a php.net-en. Én ezt ajánlom.
-
cucka
addikt
válasz
PumpkinSeed #14230 üzenetére
Ha jót akarsz, akkor tényleg kidobod ezt a könyvet, pl. tisztán látszik, hogy register_globals használatára tanít, ami annyira rossz elképzelés volt, hogy az újabb verziókban már a bekapcsolása is fatal error-t ad.
(Amúgy mi az, PHP4 24 óra alatt? Abban voltak ilyen kódok) -
válasz
PumpkinSeed #14228 üzenetére
Először is postázz:
<form action="szamol.php" method="POST">
Másodszor (szamol.php):
Ezt szúrd be a legelejére:
<?php
$szam12 = $_POST['szam12'];
$hatvany12 = $_POST['hatvany12'];?>
Harmadszor: dobd ki a könyvet az ablakon
-
Peter Kiss
őstag
válasz
PumpkinSeed #14228 üzenetére
Ezt a könyvet dobd ki a picsába.
-
PumpkinSeed
addikt
válasz
PumpkinSeed #14227 üzenetére
Lekéstem a szerkesztésről.
Találtam én is párat, de nekem valami olyasmi kellene ahol megmondják mit csináljak és azt nekem kell megcsinálni, mert a legtöbb olyan volt, hogy egészítsd ki meg ilyen baromságok.
Viszont van egy kis probléma is amit nem tudok, még nem tartok ott a könyvben amiből tanulok, de kicsit előre haladtam mert akartam csinálni egy ilyet:
HTML:
<body>
<form action="szamol.php" method="GET">
Adja meg a számot:
<input type="text" name="szam12"/></br>
Adja meg a hatványt:
<input type="text" name="hatvany12"/></br>
<input type="submit" value="Küldés" /></br>
</form>
</body>PHP:
<body>
<?php
print $szam12;
$szam = $szam12;
$hatvany = $hatvany12;
$szamok = $szamok12;
for($ciklus = 1;$ciklus < $hatvany+1; $ciklus++)
{
$szamok=$szam*$szamok;
}
print $szamok;
?>
</body>A hiba pedig annyi, hogy mikor a submit-el tovább lépek üres oldalt add be.
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14224 üzenetére
Ilyen durva önkritikát nem tudom, olvastam-e már, jót röhögtem, de azért ennyire ne légy szigorú önmagadhoz
-
DS39
nagyúr
válasz
PumpkinSeed #14222 üzenetére
többesszám
-
cucka
addikt
válasz
PumpkinSeed #14214 üzenetére
Ha a continue lefut, akkor nem fogja megnövelni a $asd-t, tehát végtelen ciklusba kerül.
Írd át for ciklusra és jó lesz. -
Dave-11
tag
válasz
PumpkinSeed #14214 üzenetére
Nem azért mert a continue átugorja a ciklus többi részét és úgy kezdi elölről? Tehát megvan hogy a szám osztható kettővel, belép az if-be, de ott ott a continue, az átugorja az összes többi sort a ciklusmagon belül és kezdődik elölről az egész.
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #14175 üzenetére
A kiíratásnál a FALSE érték castolódik empty stringre.
Két lehetőséged van: castolod kiíratás előtt integerre, vagy var_exportot használsz a boolean-érték kiíratására, igénytől függően.Példa a te kódodhoz igazodva:
print (int)$er1;
ekkor 0-t fog kiírni.
VAGY:
print var_export($er1, TRUE);
ekkor 'false'-t fog kiírni (mint string).
-
DNReNTi
őstag
válasz
PumpkinSeed #14173 üzenetére
Közben észrevettem hogy gyökérséget írtam... Kevés volt a napi kv.
Az "echo $eredmeny1 . '<br>';" így ebben a formában csak egy sortörést írna ki...
Sorry a rossz példáért.
-
DNReNTi
őstag
válasz
PumpkinSeed #14169 üzenetére
Hű
Van egy kis káosz.
Először is, mivel valamilyen feltétel teljesülését vizsgálod feltételre van szükség.Lássuk:
$eredmeny1 = NULL;
if ($elso == $masodik) {
echo $eredmeny1 . '<br>';
}Így megnézed hogy a két változód egyenlő e egymással, ha igen akkor kiíratod és egy sortörést is teszel mögé, ha nem teljesül a feltétel, tehát nem egyenlőek, akkor nem történik semmi. Másrészt szerintem ilyen feltételeknél nem célszerű a '===' használata mert például ha ez a helyzet:
$elso = 6;
$masodik = '6';Akkor ez egyenlőtlenség lesz, mivel a $masodik egy string típusú változó, hiába 6 az is, de szöveg nem szám. Ezt megelőzendő perfekt a sima == kifejezés.
A többi feltétel ennek mintájára megy, csak a relációk változnak. Ha szeretnél kiíratni valamit akkor is ha a feltétel nem teljesül:
$eredmeny1 = NULL;
if ($elso == $masodik) {
echo $eredmeny1 . '<br>';
} else {
echo 'A feltétel nem teljesült.<br>';
}Remélem segítettem.
-
Peter Kiss
őstag
válasz
PumpkinSeed #14169 üzenetére
Mi van a változókban?
-
trisztan94
őstag
válasz
PumpkinSeed #14169 üzenetére
1: ket egyenloseg jel eleg, ha három van, akkor azonos típusra megy a logikai vizsgálat
pl:
"1" == 1 -> true
"1" === 1 -> false
1 === 1 -> true2: azert kaptal 1-est, mert a boolean true erteke 1. Azt vizsgaltad, hogy egyenloek-e, egyenloek lettek, ezert kaptad vissza az egyet.
szval ha igaz/hamist vizsgalsz akkor 1 = true, 0= false
bővítés:
$elso = 1;
$masodik = 4;
$eredmeny1 = $elso === $masodik;
-> hamis (0)
$eredmeny2 = $elso < $masodik;
-> igaz (1)
$eredmeny3 = $elso > $masodik;
-> hamis (0)
$eredmeny4 = $elso <= $masodik;
-> igaz (1) -
19.Norbika
tag
válasz
PumpkinSeed #14002 üzenetére
Szerintem ezzel zárható is ez a téma
Új hozzászólás Aktív témák
Hirdetés
- Bomba ár! HP ProBook 430 G8 - i5-1135G7 I 16GB I 256GB SSD I HDMI I 13,3" FHD I Cam I W11 I Gari!
- BESZÁMÍTÁS! 1TB Western Digital SN850X NVMe SSD meghajtó garanciával hibátlan működéssel
- Eladó ÚJ BONTATLAN Honor Magic6 Lite 8/256GB fekete / 12 hónap jótállással!
- BESZÁMÍTÁS! MSI Z77 MPOWER Z77 chipset alaplap garanciával hibátlan működéssel
- Apple iPhone 14 Pro Max 128GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Liszt Ferenc Zeneművészeti Egyetem
Város: Budapest