Egy kis PHP

Sziasztok!

Ez alkalommal PHP-s kérdéssel fordulnék hozzátok, a címbe benne van minden szerintem.

(SZERINTEM NINCS, MERT KIVETTEM. NE A CÍMBE ÍRD LE A HTML KÓDOKAT, HANEM A SZÖVEGTÖRZSBE! - a szerk.

a címben szereplő szöveg ez volt:

([img_1] lecserélése mondjuk <img src=images/akarmi.jpg> -re)

)

Bármilyen megoldás érdekel, PHP legyen és működjön.

A [img_1] -ből származó szám lenne a kép azonosítója. Ez egy külön táblában van letárolva, emiatt kellene az azonosító. Az alapján kérném le a táblából a kép elérési útvonalát, és végül ezt íratnám ki.

Előre is köszi

Hozzászólások

preg_replace ?
Esetleg preg_replace_callback ???

A minta: '/\[img_([0-9]+)\]/'

Szia!
Én így szoktam volt csinálni (leegyszerűsítve):


...
$sql=mysql_query($parancs) or die('HIBA');
while ($sor=mysql_fetch_array($sql)) {
  print '<img src="images/'.$sor["kepazon"].'.jpg">';
  }
...

Persze lehet, hogy rosszul emlékszem.

Szerk:

ha van "előtagja" a fájlnak, akkor:


  print '<img src="images/img_'.$sor["kepazon"].'.jpg">';

en az ilyenekre a preg_match_all-t szoktam, es utana egy fuggvennyel vegigmegyek a tombon.
persze ebben a konkret egyszeru esetben eleg a preg_replace is.

t

Közben megértettem (remélem), hogy mit szeretnél.
lehet, hogy láma megoldás, de:


$valami="[img_45442]";
$mit=array("[img_","]");
$eredmeny=str_replace($mit,"",$valami);

Ha hülyeséget mondtam, akkor bocsi.

Hi!
Pár napja gondoltam egyet és elkezdtem "tanulgatni" a php-t. Gondoltam az lesz a legjobb ha van egy konkrét feladat, amiben elég sok minden benne lesz, és mire befejezem már menni fog valamennyire. A feladat egy olyan oldal amit a portaszolgálaton használnának. Vendégek nevét, érkezési/távozási idejét, ig.számát, kihez jött ...stb tárolná egy adatbázisban. A főoldalon - ahol van a form is - lenne az aznapi vendégek listája valamilyen szepont szerint sorban. Nem untatlak titeket tovább a tervemmel, a lényeg, hogy egyszerűen nemműködik valami amit nem értek miért.
(apache2 és php van fent)

Tehát, egy adott sort szeretnék törölni a listából:


<a href="delete.php?mit=<?=  $sor["id"] ?>">delete</a>

Lent a status sorban látom a megfelelő id-t, a baj, hogy nem adja át a delete.php-nak. Onnan tudom, hogy ez a delete.php tartalma


<?php
print $_POST["mit"];
?>

Nem tudom hogy lehet ilyesmire rákeresni google-ban, de nem taltam meg.
Forrásom: oktatóvideó + php.net doksi
Érdekes számomra, hogy így sem megy ha manulisan adom meg,


<a href="delete.php?mit=55">delete</a>

Nem tudom kiirtni a "mit" értékét. Mit szúrok el?

Szerk.: van jogom törölni, paranssorból megy

Amit url-ben küldesz az nem a $_POST ban van, hanem a $_GET-ben, $_POST-ban a formod eredményét kapod meg (ha method="post")

szerk.: Mindenkinek, aki nem hallott róla még: http://hu2.php.net/addslashes
____________________________________________________________________________________
Találkozunk majd ott, ahol nincsen sötétség. Rossz a V-gombom, bocs ha néha kimarad.

Szerintem meg inkább mysql_real_escape_string() vagy pg_escape_string(). Az addslashes() csak akkor jó, ha olyan adatbáziskezelővel van dolgod, amihez nincsen escape_string függvény. Örülök is neki, hogy az újabb PHP verziókban le van tiltva a magic_quotes_gpc() alapból, mert csak kavart okozott. Érdemes volt még a legelejére berakni ilyesmit, hogy:

if( get_magic_quotes_gpc() ){
   $arr=array( array_keys($_GET), array_keys($_POST), array_keys($_COOKIE) );
   foreach($arr as $a)
       foreach($a as $k)
           switch($a){
               case 0; $_GET[$k]=stripslashes($_GET[$k]); break;
               case 1; $_POST[$k]=stripslashes($_POST[$k]); break;
               case 2; $_COOKIE[$k]=stripslashes($_COOKIE[$k]); break;
           }
}

---------
WARNING: Linux requires you to type! After rebooted to Windows, you can safely unplug your keyboard.
szerény blogom -- új címen!

Ezektől akartam egy kezdőt megkímélni... Amúgy igazad van.

u.i: Így, hogy szerkesztetted a postod, az enyém nem engedte elküldeni, ami persze el is veszett. Úgyhogy kezdés újból...
____________________________________________________________________________________
Találkozunk majd ott, ahol nincsen sötétség. Rossz a V-gombom, bocs ha néha kimarad.

Nem szerkesztettem. Lehet valami bug.

Szerintem érdemes egy kezdőt rászoktatni arra, hogy minél hatékonyabban programozzon. ~4 éve én is úgy kezdtem, mint a kérdést felvető, hogy jó lenne programozgatni, vagy valami ilyesmi, most meg ott tartok, hogy programtervező informatikusnak megyek, mert egy végtelen kihívást (és kalandot) látok a programozásban.

---------
WARNING: Linux requires you to type! After rebooted to Windows, you can safely unplug your keyboard.
szerény blogom -- új címen!

Igaz. Én is hasonlóképpen érzem, gondolom, kezdtem:) Pacsi:)
Sajnos, én egyenlőre csak a webes témakörökben vagyok jártas (php,mysql,js/ajax stb), de már több próbálkozásom van/volt/lesz(csak most nincs időm) a java felé (egyenlőre j2me) meg valami c is kéne, csak nem tudom melyik, ilyesmi. Egyelőre érettségi:(

szerk.: a szerkesztős, az budacsikank szólt, mert őrá válaszotlam, mondjuk ez nem derült ki, de nem is az lehetett a probléma.
____________________________________________
Találkozunk majd ott, ahol nincsen sötétség.

Én is inkább csak PHP-hez értek (meg a postgres házatáján szorgoskodok) egyelőre, de tanulok Java-t is, meg C-vel is ismerkedek már egy ideje. Ha kijön a KDE4 (és stabil lesz Gentoo-n), akkor belevágok a C++-ba is. Pythonozni nagyon szeretek, mert nagyon gyorsan lehet vele haladni.

Jelenleg a programozási tanulmányaimat visszaveti az érettségi (Szegedre jössz továbbtanulni?), pont mint neked (virtuális pacsi).

---------
WARNING: Linux requires you to type! After rebooted to Windows, you can safely unplug your keyboard.
szerény blogom -- új címen!

Nem sajna. De ott születtem:)
Python alapok megvannak, de nem igazán szimpatikus ez a whitespacekre epitett cucc.
Ilyeszto milyen durva cuccokat is írnak pythonba:)
Pl nicotine, de biztos van durvabb is.
____________________________________________
Találkozunk majd ott, ahol nincsen sötétség.

És ez már jó:

$str="Blablabla[img_1]blablabla";
$str_2 = str_replace('[img_1]','',$str);
print ($str_2);

kimenet:
Blablablablablabla

ill van még egy kérdésem így az elején amíg nem késő.
A táblázatom túl dinamikusra sikerült :). Komolyan: néha a megfelelő képp jelenik meg néha meg összeugrik mintha nem lenne beállítva a width paraméter.
Esetleg idelinkeljem a forrást vagy egy tipikus hiba? Mert régebbem jártam már így.

Várj, épp válaszolok, csak agyonvágtam a teszt oldalt épp, amin az sqlinjection ra akartam felhívni a figyelmed.
____________________________________________________________________________________
Találkozunk majd ott, ahol nincsen sötétség. Rossz a V-gombom, bocs ha néha kimarad.

Azt nem tudom miért van, így rímót.
Próbáld ki hogy megadod a kép(ek) méreteit a cellá(k)nak is...
____________________________________________________________________________________
Találkozunk majd ott, ahol nincsen sötétség. Rossz a V-gombom, bocs ha néha kimarad.

na jó, egyszerűen nem megy.
10 percig szerkesztek egy postot és megint elvág. Mindjárt linkelek a forrásra

Szerk:
itt van: http://budacsik.atw.hu/php/index.hupra.txt
igyekeztem rendezni a kódot, de egyelőre mc-ben írom.
Igazából nemtudom mi a baj, ill miért nem fix a táblazatom métere

Insert nem volt, select volt.
Úgy bizony, csak értelmesen.
____________________________________________________________________________________
Találkozunk majd ott, ahol nincsen sötétség. Rossz a V-gombom, bocs ha néha kimarad.

Elég csak a legfelsőknek.
Ha az első sor minden cellájának megadod a szélességét, táblaszélesség elméletben nem is kell.
____________________________________________________________________________________
Találkozunk majd ott, ahol nincsen sötétség. Rossz a V-gombom, bocs ha néha kimarad.

Oregon: Van rá konkrét indokod, hogy minek kell a táblaszélességét is megadni, vagy csak megszokás?
Vagy csak ie?:)
Nekem eddig nem volt problémám az elhagyásból ha jólemlékszem.

____________________________________________
Találkozunk majd ott, ahol nincsen sötétség.

Nem szamonkero hangnembe kerdeztem, ha netan úgy is tűnt, hanem erdeklodve (gondolván, hogy valami okod van ra) es ez az ok erdekelt. En koromnal fogva sem csinalom ezer max 4eve, akkoriba mar a netscape igen jelentektelen volt. Úgyhogy annyira nem is erőltettem szívni vele. (A macska meg a fára mászva van a fel:))

____________________________________________
Találkozunk majd ott, ahol nincsen sötétség.

Azt egyszer ki kell probalni wine-vel:D

Egyszer az elso netscape-t probaltam ki, azthiszem meg az url->ip konverzio se ment neki, vagy valami hasonlo volt azthiszem ahol elakadt a projekt.
____________________________________________
Találkozunk majd ott, ahol nincsen sötétség.

hááth előjött a következő problémám.

Van egy lista ami kilistzza az adatb-ban lévő recordokat szépen táblázatba. Minden record mellé tettem egy delete és egy modify linket. A delete működik szépen. Amodify már nem :)
Biztos nem a megfelelő módszerrel próbálkoztam, ezt sztm tipikus eset.

Tehát a modify link az adott record mellett egy modify.php-ra visz és az adott record ID-jét küldöm neki. A modify.php oldalon egy sql lekérdezéssel a kapott id segítségével lekérem az adott recordo az adatbázisból, és minden elemet beleillesztek egy formba amiben aztán meg is lehet változtatni. Eddig jó. Akármelyik recordot akarom módosítani, mindig a megfelelő adatokat kapom meg a modify.php oldalon de
amikor ezen az oldalon megváltoztatom az adatokat (egyelőre egyel próbálkozok csak) nem megy. A hiba, hogy nem adja át a modify2.php-nak az ID-t. Pedig a modify.php-ban a form-ba direkt tette egy

<input type=hidden name=mit value="<?= $sor["id"] ?>">

sort, hogy a formal tovább menjen az id is ismét. De nem megy át, sőtt más sem. Tehát már ez a form nem ad át semmit valamiért a modify2.php-nak.

Nemtudom le tudtam e írni érthetően :) szivesen teszek fel kódot ha valaki megszánna annyira :)

<form name="valami_hulye_nev_a_formnak" method="post" action="modify2.php">
<input type="hidden" name="mit" value="<?= $sor["id"] ?>" />
<input type="submit" name="submit" value="Elküld" />
</form>

utána a $_POST['mit']-ben _kell_lennie a változónak

---------
WARNING: Linux requires you to type! After rebooted to Windows, you can safely unplug your keyboard.
szerény blogom -- új címen!

hmm, ezt nem ismertem eddig, de utánanézek hogy kell használni, köszi.

Off
Közben ezsembe jutott valami. Mivel a cégnél a grafikusok csinálják a honalpunkat, és az is html, lehet nem tesz nekem jót, ha pár hónap múlva (remélem) előállok ezzel a kis "cuccal", mert még a végén az a munka is rámmarad. És ha már kötelező nem is izgi ...

On

Tök egyszerű problémám van amire az ideiglenes megoldást is leírom, de az tuti nem jó


<?php

$ev = date(Y);
$ho = date(m);
$nap = date(d);
?>

<html>
    <head>
        <title>Lista</title>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
<body>

    <form action="lekerdezes.php" method="POST">
        Lista keszitese datum alapjan: (pl.: 2007-03-04)<br>
        <input type="text" name="ev"  value="<?= print $ev; ?>" size="4" maxlenght="4">
        <input type="text" name="ho"  value="<?= print $ho; ?>"  >
        <input type="text" name="nap" value="<?= print $nap; ?>" >
    </form>



</body>
</html>
<?

?>

Az a baj, hogy a kimenet e helyett:
|2007 | |06 | |12 |
|20071 | |061 | |121 |
Odatesz egy egyest mindegyik után. Miért vajon?
Kiiratva a változók értékét egymás után akkor 20070612. Tehát jó.
A form teszi? A tervem az, hogy a 3 változót majd valahogy egy változóba teszem és az lesz a lekérdezésben a feltétel, tehát ha pl az összes vendéget ki kell listázni aki 2007. 05. 12-én volt akkor azt kell beírni, a feldolgozó először a 3 változót egy újban eltárolja és beleillesztem a lekérdező parancsba. De nem is ez a lényeg.

Igeiglenes megoldásom:


        <input type="text" name="ev"  value="<?= print $ev; ?>"  size="4" maxlength="4">
        <input type="text" name="ho"  value="<?= print $ho; ?>"  size="2" maxlength="2">
        <input type="text" name="nap" value="<?= print $nap; ?>" size="2" maxlength="2">

Tehát fix méretek megadása, így (csúnyán szólva) nem jut hely az egyesnek. Viszont ehhez feltétel kellett legyen, hogy nem lehet 2007 2. 3. hanem 2007. 02. 03.

Szerk: végül is ez azért kell, hogy alapértelmezetten a mai dátum legyen benne. de úgysem azt akarják majd lekérni gondolom, viszont így szép.

Miért írsz

<?= print ... ?>

-ot?
Elég vagy az egyenlőségjel, vagy a print. És olyankor nem kapsz 1-est :).

Részletesebben: Ez olyan, mintha kétszer írnád ki a print-et. A belső kiírja, amit ki akarsz iratni, a külső pedig a belsőnek a visszatérési értékét, azaz az 1-et.

az 1-est azert teszi moge, mert a print visszateresi erteke true, es te ugy hivod, hogy <?= print 'akarmi';?>ahogy kene:
vagy <?=$akarmi;?>, vagy <?php print "akarmi";?>olvasgasd kicsit a php alapokat: php.net/manual

a masik egyszerusites:
$ev=.... $ho==.... $nap=... helyet

list($ev,$ho,$nap) = explode("-",date("Y-m-d"));

t

Egy költői kérdés.
Azt hogy lehet megtanulni, hogy bizonyos dolgokat, hogyan kell megoldani.
Ehhez megint le kell írjak egy példát, hogy megértessem veletek mit szerenék tudni.

pl.: van nekem a főoldalam, (fenntebb már írtam mit készítek) aminek az alsó részén egyől mutatja az aznapi vendégek nevét és pár infót (érkezett, távozott, kihez jött ...).
Ezt a listát az ember mégsem hánnya csak úgy random oda, rendezni kellene.
Alapértelmezetten úgy rendezem, hogy érkezési időrendbe fentről lefelé növekvő. De azt akarom, hogy ha rákattintok a "Vendeg neve" oszlopfeliratra akkor azonnal név szerint rendezze. (bele se megyek, hogy a.b.c. szerint milyen módon a kettőből, legyen most csak ORDER BY vendegnev, és akkor Antal Imre, Buzsóka Zsolt ... Zendvai Béla lesz / fentről lefelé)
Már működik, de hogy érdemes megoldani? Én úgy csináltam, hogy az egész alsó "kiírató" táblázat kétszer szerepel, egyik az if elágazás igaz ágában a másik a hamisban. Hogy mit vizsgál az if? A "Vendeg neve" oszlopfelirat link lett ami saját magára mutat, de átad egy paramétert (i=1), és ha i=1 akkor név szerint rendezek, ha i!=1 akkor érkezés szerint. Mivel alapból i nem létezik és nincs paramétere nem lesz egyenlő és érkezés szerint rendez, de ha rákattintok a "Vendeg neve" oszlopfeliratra akkor név szerint rendezi. Tehát működik, de lehet, mégis baromság de nem jutott jobb eszembe. Asszem épp ma egy hete, hogy elkezdtem PHP-zni, szóval én ennek is örülök, mint majom a farkának :D

Ez csak kísérletezgetés, meg más kód olvasgatása után alakul ki? Mikortól kell arra figyelni, hogy optimálisan írtam meg a kódot, vagyis legkevésbé használjon rendszererőforrásokat?

Szerk.: Csak attól félek, hogy olyan láma módon tanulok, hogy sok felesleges plusz sort alkalmazok mint jelen esetben kétszer szerepel az a táblázat.

Forbidden

You don't have permission to access /comment/reply/34944 on this server.

hm....

szerk.: pff... most meg persze megy.... :P
szerk. #2: ez hihetetlen! itt güriztem a forrás megírásával, erre azt meg nem nyalja be a fórum... hrr hrr :X tehát inkább linkelem. klikk IDE!

Hali!Egy kérdésem akadt ismét.
Keresés: Azt akarom megoldani, hogy lehessen keresni keresztnév és vezetéknév szerint is vagy akár teljes névre.

Jelenlegi tudásommal úgy tudom ezt megoldani, hogy 2 külön modulba tenném a keresztnévre és vezetéknévre való keresést és külön táblázat/select is kellene a feldolgozó oldalon.

Viszont talán úgy lenne értelmes, hogy egy modulban lenne a két keresztnév és vezetéknév mező és bármelyiket is töltöm ki működjön, vagy akár mind a két mezőt is kitölthessem.

Vagy először az ember csinálja meg úgy ahogy tudja és utána foltozgassa?

Egyelőre megoldottam így: link
Működni működik. Ez csak a feldolgozó oldal. 3 modul van.
Ha ossz értéke 1 akkor az első modul hajtódik végre.
Ha ossz értéke 0 akkor jön még egy feltétel.
Ha a vezeteknev változónak van értéke akkor a 2. modul megy végbe
Ha a nincs (hamis ág) akkor a 3. modul megy végbe

1. modul: ez kilistáz minden adatbázisban szereplő vendéget érkezési dátum szerint csökkenőben
2. modul: ez vezetéknév alapján keres és listáz
3. modul: ez keresztnév alapján keres és listáz
Ennyire futotta a tudásomból, majd esz ez jobb is biztos.

most viszont egy komolyabb kérdésem lenne:
Van egy form, vegyük az első két elemét:
vezeteknev és keresztnev.
Ezeket kötelező kitolteni ezért ezt vizsgálni akarom, így

print isset($_POST["vezeteknev"]);

Ennek akkor kellene 1-nek lennie ha beírok valamit a vezeteknev mezőbe. De ha nem írok be semmit akkor is 1 az értéke. Miért?

megoldás: print ((isset($_POST["vezeteknev"]) && $_POST["vezeteknev"]!="") ? 1 : 0);

magyarázat
-> isset: csak azt ellenőrzi, hogy definiálva van-e az argumentumként megadott változó. Ugyanis ha definiálatlan változót ellenőrzől, akkor E_WARNING szintű hibaüzenet eredmény (amit esetleg a PHP beállításai miatt nem látsz)
-> az űrlap szöveges mezőjét ha nem töltöd ki, a változó akkor is meglesz, csak értéke nem lesz. Tehát isset(...) esetén true értéket (1) ad.

text tíousú input mező esetén ha a változó létezik és üres, akkor 100%, hogy nem lett kitöltve, ha pedig a feltétel nem teljesül, akkor 100%, hogy ki lett töltve.

kiíráshoz használt összevont szerkezet értelmezése: print "blabla ". ([feltétel] ? [érték ha teljesül] : [érték ha nem teljesül]) ." tovább blabla";

Remélem jól értelmeztem a problémát.

Szió

Köszi mindkettőtöknek. Olvastam a php.net-en ezt csak figyelmetlen voltam az értelmezéskor. Valamiért azt gondoltam, hogy azt jelenti az isset, hogy ha a változónak van értéke akkor 1. No mindegy, köszönöm a felvilágosítást.

Amit írtál viszont lehet, hogy jó, de amíg nem értem addig nem használnám.
Megpróbálok végig menni rajta:
az első fele az "enyém" tehát értem. utána "és" megmondod neki hogy a vezeteknev nevű változó nem= semmivel (bocsi a szóhasználatért csak ...)
és mi az utána? (? 1 : 0)

? 1 : 0
az egész egy tömörített if szerkezet, vagyis ha a ? előtti zárójel teljesül, akkor 1, ha nem, akkor a kettőspont utáni résszel tér vissza (ezesetben 0)

definiálatlan változó ellenőrzése isset nélkül pedig csak E_NOTICE, ennek ellenére szükséges az esetleges javítása.
Amennyiben a noticok ki vannak kapcsolva, ajánlom engedélyezésüket.

hmm, ezt így lenne helyes használni?
szerk:


if (empty($_POST[vezeteknev])) == 0 {
print "vezeteknev nevu valtozonak van erteke es nem 0";
}
print "vezetek nevu valtozonak nincs erteke vagy 0";

?

Szerk: hülyeséget írtam, világos minden (ez is meg az előző is):)

print ((isset($_POST["vezeteknev"]) && $_POST["vezeteknev"]!="") ? 1 : 0);
zarojelek ugye a precedenciat jelolik.
eloszor a legbelso kifejezes hajtodik vegre, az is balrol jobbra:
isset($_POST["vezeteknev"])
ez vagy true-t, vagy false-ot ad vissza, attol fuggoen, hogy van, vagy nincs ilyen index a $_POST tombben.
ezutan jon egy ternális operátor ez ha az első parametere igaz, akkor a masodik parameterrel, ha hamis, akkor a harmadik parameterrel ter vissza.
Tehat ha a $_POST["vezeteknev"] akkor 1-el, ha nem, akkor 0-val fog visszaterni (ez amugy tok felesleges, maga az isset is true-false-szal ter vissza).
Ezt a visszateresi erteket megkapja a print fuggveny.
es ki fog irni egy 1-est ha van ilyen valtozo, es 0-t ha nincs.
rovidebben igy lehetett volna:

echo (int)isset($_POST['vezeteknev']);

Tyrael

isset nem dob notice-t nem letezo valtozora, pont arra valo, hogy megmondja, hogy letezik-e az adott valtozo, vagy sem.
viszont ha barmilyen mas kornyezetben probalsz nem letezo valtozora/indexre hivatkozni, az valoban dob notice-t.

"az űrlap szöveges mezőjét ha nem töltöd ki, a változó akkor is meglesz, csak értéke nem lesz. Tehát isset(...) esetén true értéket (1) ad."
lesz erteke, megpedig "", azaz ures string.
ossze is hasonlithatod egy ures stringgel, es latni fogod, hogy megeggyezik.

no offense

Tyrael

Nah megoldottam így link
Lehet, hogy még ez nem tökéletes, de akkor is egyharmad annyi kódból jött ki kb. Mellesleg átláthatóbb is ezáltal.
Köszönöm a segítséget mindenkinek.

Egy probléma azonban van ezzel. Az ossz==1 nem működik, mert azt az egyet egy linkről kapná meg. Azthiszem azt GET-el küldi. Ezzel mit lehet tenni?
A form-ban lehet átállítani GET-re, csak nem nagyon tudom a különbséget, és a POST-al nem volt baj. Bár itt nem sok adatról van szó, mindössze pár karakter nem egy nagy űrlap.

Szerk: erre válaszoltam (magamnak) 2007-07-19 11:26

Még egy dolog.
Ok, hogy ezt most megcsináltam valamennyire, talán hamarosan kész lesz.
De ha legközelebb kell valami ilyesmit csinálnom akkor megint újra kezdjem a nulláról, vagy ollózzam ki ebből ami kellhet és módosítsam azt?
Azért kérdem, mert más dolog megírni valamit fejből és manualokból, és más dolog (más tudás) megérteni egy kódot és módisítani.

Ki melyiket preferálja?

(Én az a fajtavagyok aki újra megírja majd legfeljebb ha nagyon nem jut eszembe belekukkatok ebbe, de nem ollózok ki semmit. Hülye felfogás?!)

ha erted is amit csinalsz, akkor lehet ujrafelhasznalni.
addig amig csak eszetlenul copy paste-elsz, addig erdemesebb ujrairni.
en anno igy vagtam neki a phpzesnek (meg ugy altalaban a gyakorlati programozasnak):
irjuk portalt, legyen user authentikacio, legyenek kulonbozo jogosultsagi szintek, tudjon admin hireket felvinni, szerkeszteni, usereket kezelni.
ezutan fogtam, letoroltem az egeszet, kezdtem elorol spagetti kod helyett fuggvenyekkel, stb.
3., 4. probalkozast mar rajtam kivul mas is atlatott volna.
Meg imho sokkal jobb, ha nem csak azert csinalod A variacioval az adott feladatot, mert minden profi ezt mondja, hanem azert, mert probaltad B-t, C-t, D-t legalabb egyszer, es tenyleg jobb az A megoldas.

Tyrael

Hi :)

Egy kis pihenő után folytatom. Jött egy kérés, hogy ha egy kötelező mezőt nem töltenek ki akkor vissza lépés esetén a kitöltött mezők tartalmai is elvesznek. Este elalvás előtt eszembe jutott egy megoldás ami megint számomra érdekes dolgot produkált.

A megoldás ez lenne:
vendegkonyv.php itt az űrlap amiről küldöm a cuccot a feldolgoz.php-nak.
Először csak a keresztnevet "felejtem" el kitölteni és a vezeték nevet szeretném ha nem "felejtené" el a program. A feldolgoz.php szól, hogy baj van, nem töltöttem ki a keresztnevet, lépjek vissza

<a href=vendegkonyv.php?vezeteknev='$_POST[vezeteknev]'>Vissza a főoldalra</a>

Azthiszem látszik a lényeg, visszaküldeném a "vissza" linkben az adatokat a főoldali form-nak, ahol a form eleve így néz ki:

<input type='text' value='<?= $_GET[vezeteknev] ?>' name='vezeteknev' size='25' maxlength='20'>

Plusz az oldal tetején kiíratom a vezeteknek értékét, hogy lássam működik e.

Eredmény: a formban egy \ jel van. Az oldal tetején meg Budacsik vezetéknév esetén:

\'Budacsik\'

A formba miért csak egy visszaper-jelet tesz, és egyébként kiíratva meg miért ezt írja ki?(

print $_GET['vezeteknev'];

)

Szerk.:

<input type='text' value=<?= $_GET[vezeteknev] ?> name='vezeteknev' size='25' maxlength='20'>

Ha nincs idézőjel a value= urán akkor a formba is azt ilelszti amit a kiíratásnál is látok: \'budacsik\'

told be session változóba/tömbbe a form mezőit a POST-nál, ha valami kötelező mező kimaradt, akkor visszairányítasz a form oldalra, (ha nem, akkor megy tovább...), a form oldal meg minden betöltésnél vizsgálja, hogy üres-e a session tömb, ha nem, akkor feltölti a benne lévő értékekkel.

(nem olvastam végig a threadet, szóval nemtudom, kilőtted-e már a session-ös megoldást)

SZVSZ a Get-es a megoldás nem túl szép...meg ugye mindenhol próbálnak lebeszélni a getes értékadásokról.

Üdv!

Egy kis helpre lenne szükségem. Van egy weboldal amit nemrégen készítettem, de iframe-el.
Ez nem jó, mert a google ezt nem szereti. Szóval egy táblázat egyik cellájában h az iframet kicserélem

<?php include 'main.html' ?>

-re akkor is megy. De a linekket nem tudom, hogy csináljam meg, mert most mind úgy néz ki, hogy

<a href="xx.html" target=main">

A main a neve az iframe-nek. Szóval a kérdés, hogy hogy csináljam, hogy továbbra is abban a cellában jelenjenek meg a linkek céloldalai.

Válozóval próbálkoztam


<?php
$main = 'main.html';
echo $main;
?>
[...]
<table width="600" border="1" cellapdding="0" cellspacing="0">
       <tr>
           <td colspan="2" height="30" align="center" valign="center">
               >> HEADER <<
           </td>
       </tr>
       <tr>
           <td height="400" width="150" valign="top" align="center">
               <b>menu</b>
               <br><br>
               <a href="<?php $main = "contact.html" ?>">Contact</a><br>
               <a href="<?php $main = "main.html" ?>">Main</a><br>
           </td>
           <td height="400" width="450">
               <?php include $main ?>
           </td>
       </tr>
</table>

De ez hülyeség, mert a main értéke midnig main.html lesz ha az van legalul, mostmár látom. De a megoldást nem sajna, és PHP-ben ilyesmit nem csináltam még. (mást se nagyon, 1-2 SQL-es dolgot csak)

Köszi a segítséget

Én kicsit máshogy csinálnám:


<?php
  if (isset($_GET['p']) {
    $p = $_GET['p'];
  } else {
    $p = "main";
  }
?>
...
<a href='index.php?p=contact'>Contact</a>
...
<?php include($p . ".html"); ?>
...

Tfh a fájl neve: index.php.

http://mod.gyengus.hu/ http://gyengus.hu
'Everybody loves LEDs'

Azt hiszem ez lesz a megoldás,kipróbálom a teszt oldalon.

Köszi, működik, csak egy zárójlet kihagytál, cska azért mondom, hogy ha másnak is kelleni fog.

if (isset($_GET['p'])<b>)</b> {

Erre vszont magamtól is rájöhettem volna, azt hittem valami bonyolultabb lesz a megoldás.
De sajna 1-2 havonta tudom elővenni a PHP-t, és lassan haladok vele.

if (isset($_GET['p'])) {
   $p = $_GET['p'];
   } else {
   $p = "main.html";
   }   

Ez a megoldás, mert p-ben tárolom a kiterjesztését is.
De csondálatosan működik köszönöm!
Annyi bajom van most csak, hogy az address bar-ban látszódnak a linkek nevei ami csúnya
pl.: http://domain.com/index.php?p=toloajtok/ec10.php&path=toloajtok/kepek/e…
Ez elég csúnya a böngészőben, de emlékszem, hogy van erre megoldás, egyszer olvastam.
(A path az semmi, csak a képek elérési útvonalait egyszerűsítem ezze, nem kell kézzel beírni)

$p = isset($_GET['p']) && file_exists($_GET['p']) ? $_GET['p'] : 'main.html';

Két apróság:
- a feltételes értékadás azért jobb, mert tömörebb, áttekinthetőbb a kód tőle, rádásul kevesebbet kell gépelni [mondjuk ez inkább kötözködés]
- érdemes leellenőrizni, hogy létezik-e a fájl, mert a PHP hibaüzenetek tartalmaznak egy elérési utat, amiből olyan információkat nyerhet a támadó, amiket nem kellene tudnia, pl.: megtudja, hogy az oldalad a /mnt/racks/teneved könyvtárba van, akkor simán be tud include-oldtatni egy konfig fájlt a /etc-ből, amennyiben tudja, hogy az adott disztró hol tárolja az általa keresett fájlt (és az admin nem rendesen lőtte be a szervert)
Még biztonságosabb:

$p = isset($_GET['p']) && file_exists($_GET['p']) && in_array($_GET['p'],file('enabled_pages.txt')) ? $_GET['p'] : 'main.html';

Ha új oldalt akarsz hozzáadni, akkor a feltöltés-szerkesztés mellett kell még egy olyan, hogy:

echo "uj_aloldal.html" >> enabled_pages.txt

Ez már nehezebben játszható ki.

---------
"Ha igazat mondasz azt végig unják, ha feldíszíted azt jól meg dugják"
szerény blogom -- új címen!

helyesebben (rájöttem, hogy bakiztam egyet):

in_array($_GET['p']."\n", file('enabled_pages.txt'))

Annyit csinál, hogy megnézi a az enabled_pages.txt-ben, hogy benne van-e a kért fájl neve, ha nincs, akkor nem engedi include-olni. Ez növeli a biztonságot, és így nem enged olyat befűzetni, amit nem akarsz. Pl.: előző verzió, még nincs kész lap stb... vagy mindenféle URL-es trükközéseket is elég jól kivéd. A \n meg azért kell a végére, mert a file() odafűzi a tömb elemei végére az újsor karaktert.

---------
"Ha igazat mondasz azt végig unják, ha feldíszíted azt jól meg dugják"
szerény blogom -- új címen!

Akkor egy kis PHP-t tovább ...
van kb 100db kép, amit ki kellene tenni egy oldalra, de a képek neve azonositoszam_nev ilyesmi.
Nem szeretném egyessével beírni. Olyasmire gondoltam, hogy egy ls -l kimenetet a képek könyvtárában elmentenék txt-ben, tehát minden sorban egy kép neve lenne. És PHP-val úgy jeleníteném meg a képeket, hogy


<?php
$thumpath = "kepek/almappa/100_150/";
$path = "kepek/almappa/800_600/";
?>
<a href="<?= $path$name ?>"<img src="<?= $thumpath$name ?>"></a>

és a path után jönnének a képnevek valahogy amit előzőleg kiolvasok a txt-ből, és beteszem pl a name változóba. Hülyeség?
Olvasgattam, és látom, hogy a fopen-el tudok megnyitni file-t, de nemtudom, hogyan tovább.

Azt mondtják, hogy érdemes profik által készített kódot nézegetni, lehet, hogy egy drupál forrást jó lenne nézegetni?!

Kukkants ide: http://www.codewalkers.com/c/a/File-Manipulation-Code/List-files-in-a-d…
ki tudod listázni a könyvtár tartalmát, limitálhatod, vagy betolhatod egy tömbbe hogy sort-tal rendezd. Elvileg thumbnailt is tudsz online generálni de az túl erőforrásigényes, inkább feltöltéskor generáld le ha jót akarsz. :)

Bár ez már OFF, de még leírom amit hallok olvasok. Azt tapasztalom, hogy táblázatokkal már "ciki" oldalszerkezetet készíteni, arra div, de persze van amire táblázat kell biztos. Neke a főszerkezet még table.

De nyissunk erre egy témát, és folytassuk ott, nekem sok kérdésem van, nemtudom ezzel kapcsolatban van e itt a hup-on már téma. Valami OFF kategóriába.

Volt itt valahol egy topic ahol összehoztunk egy egészen jó kis oldalszerkezetet. Függőlegesen átméreteződik, a lábléc az aljához igazodik, ha nem is tölti ki a tartalom a középső részt. A szélesség meg a javallt 760px körül van. Majd megkeresem. Kéne csinálni egy 800-1024 között gumis szélességű oldalt.