Jump to content
GSForum - Segélyvonal

PHP kérdésem van


Recommended Posts

Posted

Sziasztok! Van egy apró problémám, remélem tudtok segíteni.

Van egy galériám, amely úgy mûködik, hogy kilistázza a 'gallery' könyvtár tartalmát (alkönyvtárakat). Ezek a galéria albumai. A könyvtárnevek számok (001, 002, 003...), tartalmaznak egy leiras.txt filet, aminek tartalmát mögéiratom listázáskor, ez az album leírása, albumnév, ilyesmi.

Így néz ki a kód:

    $dir_handle = @opendir($path) or die("$path könyvtár megnyitása sikertelen!");
    echo "<p align=left>Galériák listája:</p><br/>";
    while ($file = readdir($dir_handle)) 
    {
       if($file!="." && $file!="..")
       {
               $myFile = $path."/".$file."/leiras.txt";
            $fh = fopen($myFile, 'r');
            $leiras = fgets($fh);
            fclose($fh);
              echo "<p align=left><a href='galeria.php?dir=$file' class=galeria>Galéria $file - $leiras</a></p>";
        }
    }
    closedir($dir_handle);

Nah és a kérdés: Hogyan tudnám a lista sorrendjét megfordítani? Tehát az albumok számai csökkenõ sorrendben legyenek?

Köszi elõre is!

Posted

Akkor ne írasd egyből ki, hanem tedd tömbbe, és azt írasd ki.

 

$dir_handle = @opendir($path) or die("$path könyvtár megnyitása sikertelen!");
    echo "<p align=left>Galériák listája:</p><br/>";
    while ($file = readdir($dir_handle))
    {
       if($file!="." && $file!="..")
       {
               $myFile = $path."/".$file."/leiras.txt";
            $fh = fopen($myFile, 'r');
            $leiras = fgets($fh);
            fclose($fh);
              $tomb[] =  "<p align=left><a href='galeria.php?dir=$file' class=galeria>Galéria $file - $leiras</a></p>";
        }
    }
    closedir($dir_handle);

//A tömbb számozása 0-tól kezdődik, így a tömb elemszáma eggyel nagyobb mint a záró elem mutatója.
//Visszafelé íratjuk ki nulláig
for($i = (count($tomb)-1); $i >= 0; $i--){
echo $tomb["$i"];
}

Posted

No igen, ez az, amikor illik elgondolkodni azon, nem éri-e meg inkább MySQL-adatbázisban tárolni az album adatait... ;)

Posted
Akkor ne írasd egybõl ki, hanem tedd tömbbe, és azt írasd ki.

Na, erre nem is gondoltam! :)

Köszi!

Posted
No igen, ez az, amikor illik elgondolkodni azon, nem éri-e meg inkább MySQL-adatbázisban tárolni az album adatait... ;)

Elgondolkodni mindig érdemes, ám ebben az esetben egyértelmûen nem.

Posted

Nem győztél meg. Én továbbra is adatbázisban tárolnám, annak minden előnyével, és szerintem nem létező hátrányával.

Posted

Hát nézzük! Az egyikhez kell egy nyúlfarknyi kód, az ott fent.

 

A másikhoz kell:

 

1. Egy működő MySQL szerver

2. Az SQL nyelv ismerete

3. A PHP adatbázis-kezelő parancsainak ismerete

 

Hátránya lehet, hogy nincs, csak egy picit túlzás.

Posted

A fájlkezelő függvények használatának is vannak hátrányai:

 

1. Használatuk platformfüggő (UNIX, Windows);

2. Ismerni kell a fájlkezelő függvényeket;

3. Az adatok módosításhoz egyenként meg kell nyitni a .txt állományokat, és feltételezni kell, hogy mindegyik struktúrája azonos;

4. Végül, amiről a érdés is szólt: "Hogyan tudnám a lista sorrendjét megfordítani?" - Hát nem egyszerűbb SQL-lel?;

5. Ha keresni szeretnél a képek között, a fenti kód csöppet sem lesz nyúlfarknyi.

 

Abban persze, hogy igazad van, hogy az SQL-t ismerni kel hozzá, de ez nem jelenti az egész módszer csődjét, vagyis azt, hogy egyértelműen szóba sem jöhet.

Posted

Nem egyszerűbb SQL-el, mert tárolni kell a file-ok neveit.

Ebben az esetben teljesen felesleges tárolni öket, kapcsolódni, lekérdezni.

8)

Master_of_Puppets
Posted

Most nem t'om hova illik inkább a kérdés, de beteszem ide.

 

Ha így probálom megnyitni az oldalt:

.../phpcodes.html

Akkor normálisan és gond nélkül behozza.

 

De ha így:

...?act=phpcodes1

Akkor viszont ezt dobja ki:

"Parse error: syntax error, unexpected T_STRING in /nfs/extra/g/ga/gaws/wwwroot/page/phpcodes.html on line 163"

 

Itt a PHP forrás is:

<?php
switch ($_GET['act']) 

case phpcodes1:
     include_once("phpcodes.html");
     break;
}
?>

Posted

A switch nincs kinyitva csak bezárva.

Master_of_Puppets
Posted

Azt csak ide gépeltem be rosszul. A switch tartalmaz több elemet is és azok működnek... Az viszont nem fér a fejembe, hogy a PHP szerver mit kötözködik egy HTML dokumentummal meg az, hogy hogyan lehet, hogy az oldalra mutató teljes linkkel behozza hibátlanul az oldalt, míg ezzel ?act=phpcodes1 nem... :huh::bizonytalan:

Posted

<?php
switch ($_GET['act'])
{

case "phpcodes1":
     include_once("phpcodes.html");
     break;
}
?>

:!: NB.: Idézőjel!

Master_of_Puppets
Posted

Eddig idézőjel nélkül használtam és ezen az egy oldalon kívül mindent megnyitott. :huh:

 

Ui.: Bepakoltam idézőjeleket is, de ettől függetlenül továbbra is ezt írja ki:

Parse error: syntax error, unexpected T_STRING in /nfs/extra/g/ga/gaws/wwwroot/page/phpcodes.html on line 163

Posted

Ha a phpcodes.html-ben <? ?> jelölõk között van valami, azt a PHP-parancsértelmezõ megpróbálja értelmezni. Nem lehet, hogy ez a gond? A hibaüzenet szerint ugyanis ebben a fájlban van a hiba. Mi a tartalma?

Master_of_Puppets
Posted

Hát az lehet :huh: De PHP-értelmezõ mért próbálja meg értelmezni a HTML-ben elmentett PHP kódokat?

Posted

Ugye ezt nem kérdezted komolyan?

 

Az include() hatása olyan, mintha a szöveges fájlt (ez esetben egy HTML-t) egy az egyben bemásolnád az adott PHP-forrásba. Ha abban <? ?> által határolt rész van, azt megpróbálja a parancsértelmező PHP-kódként értelmezni. Kivétel, ha a rövid nyitótag-ek (php.ini beállítás) tiltva vannak (ami egyébként ajánlott.) De ilyenkor meg a <?php ?> közötti kódrészt próbálja értelmezni.

 

Másrészt: a < és > jeleket nem szokás egy HTML-fájlban használni, ha az adott karaktereket meg szeretnéd jeleníteni. Ezeknek ugyanis különleges jelentésük van (PHP, XML...) Cseréld le őket a HTML-ben a megfelelő kódjukra >>itt egy magyarázat és táblázat<<, és nem okoznak többé gondot!

Kovács Dávid ( Davs )
Posted

Az include() hatása olyan, mintha a szöveges fájlt (ez esetben egy HTML-t) egy az egyben bemásolnád az adott PHP-forrásba.

 

Nem, tévedsz! Az a require() nevû dolog . ;) Ha "beinclude-olsz" egy php file-t, az olyan, mintha lefuttatnád azt a fájlt és a kimeneti HTML kódot irnád az include helyére. Már amennyire én tudom...

Posted

Nem tudod jól, de had' ne vitatkozzunk már tényeken, főként ha van egy >>jó dokumentációnk<<, melyben ez áll:

Az include() beilleszti és feldolgozza a megadott fájlt.

Az alábbiak igazak a require()-ra is. A require() és az include() megegyezik egymással a hibakezelését leszámítva. Az include() nem fatális hibát, figyelmeztetést generál, a require() viszont fatális hibát jelez.

A hibakezelésről szóló rész természetesen arra az esetre vonatkozik, ha a beilleszteni kívánt fájl nem érhető el, ami ebben az esetben ugye kizárt.

 

@Master_of_Puppets:

Tégy úgy, ahogy mondtam, és nem kapszhatsz hibát. ;)

Kovács Dávid ( Davs )
Posted

Mindig tanul vamait az ember. ;) Köszi a felvilágosítást!

 

Azt mikor, hogy a "mindig"-ben nincs í?

Silent Psycho
Posted

$result = @mysql_query($query);

 

A mysql_query elõtt lévõ @ mire jó? :upsz:

Master_of_Puppets
Posted

Ha jól tudom, azt tudja, hogy elnyom mindenféle hibát. :bizonytalan:

Kovács Dávid ( Davs )
Posted

antismap.php

<?php
header('Content-type: image/png');
$str_text=explode(" ","R 3 4 A");
$a=rand(0,1);
$font_size=12;
$os_x=20;
$os_y=23;
$img=imagecreatefrompng("elements/antispam/img".$a.".png");
$color=imagecolorallocate($img,0,0,0);

$f_r=rand(1,2);
$font="elements/antispam/".$f_r.".ttf";
$angle=rand(-15,15);
$test=imagettftext($img,$font_size,$angle,$os_x,$os_y,$color,$font,$str_text[0]);

$f_r=rand(1,2);
$font="elements/antispam/".$f_r.".ttf";
$angle=rand(-15,15);
$os_x=$os_x+($font_size*1.3);
$test=imagettftext($img,$font_size,$angle,$os_x,$os_y,$color,$font,$str_text[1]);

$f_r=rand(1,2);
$font="elements/antispam/".$f_r.".ttf";
$angle=rand(-15,15);
$os_x=$os_x+($font_size*1.3);
$test=imagettftext($img,$font_size,$angle,$os_x,$os_y,$color,$font,$str_text[2]);

$f_r=rand(1,2);
$font="elements/antispam/".$f_r.".ttf";
$angle=rand(-15,15);
$os_x=$os_x+($font_size*1.3);
$test=imagettftext($img,$font_size,$angle,$os_x,$os_y,$color,$font,$str_text[3]);


imagepng($img,"code.png");

?>

 

Ez a kód arra lenne hivatott, hogy bejelentkezésnél a neven és a jelszón kívül egy képen látható négy betûs kódot is be kelljen írni. Ha meghívom az antispam.php file-t, akkor megjelenik a kép, rajta a négy betûvel, de amint include-olom azt egy másik file-ban, akkor egy hibaüzenetet kapok, miszerint a kép nem megjeleníthetõ, mert hibát tartalmaz. Mi lehet a baj?

Posted
imagepng($img,"code.png");

Itt miért van szükség fájlnév megadására? A szabványos kimenetre menne a kép, a header()-ben pontosan megadtad a bögészőnek, mit kell megjelenítenie, nem kell fájlba menteni.

 

imagepng($img);

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...