ugrás a tartalomhoz

Include-dal betöltött függvény nem megy

Fedor · 2005. Dec. 8. (Cs), 11.37
Sziasztok!

Van két function-om, amelyeket egy include fájlban helyeztem el. Az egyikben lévő parancs simán lefut, ha meghívom, a másik viszont a füle botját sem mozgatja. Nem a paranccsal van gond, mert az közvetlen elhelyezve az oldalban (nem fuction-ként meghívva) simán lefut. Találkozott már valaki ilyen problémával? Mi lehet a gond? Megcsinálhatnám, hogy közvetlenül berakom a parancsot az oldalba, de egy kicsit áttekinthetetlenné válna (elég hosszú, és sok ilyen volna még), meg egyébként is, idegesít, ha valami nem működik, aminek kéne működnie...

Üdv,
Fedor
 
1

egyre ciffrább

Fedor · 2005. Dec. 8. (Cs), 12.10
Kipróbáltam, hogy nem csinálok function-t, egyszerűen csak egy include fájlban helyezem el, hát így se működik. Az egyetlen mód a lefuttatásra az, ha közvetlenül az oldalban helyezem el. Vesszek meg, ha értem. Egy egyszerű, űrlapellenőrző rutinról van szó, amit már ezerszer csináltam. A másik parancs, ami fut function-ként is (ráadásul include-ból), az adatbáziscsatlakozás, de van ugyanebben az oldalban más, include fájlban elhelyezett php script is, ami minden gond nélkül müxik. Nemrég raktam fel az 5-ös PHP-t, lehet, hogy ezzel van összefüggésben?

Üdv,
Fedor
2

debug

zsepi · 2005. Dec. 8. (Cs), 12.21
php.ini:
error_reporting  =  E_ALL
display_errors = On
PHP-ként értelmezi az includolt fájlokat a szerver? megtörténik az include? jól hivatkozol a függvényre, meg létezik-e egyáltalán (function_exists)?
3

igen

Fedor · 2005. Dec. 8. (Cs), 12.54
A php.ini jól van beállítva.

Mint írtam, több fájlt is include-oltam, a többivel nincs is gond, tehát php-ként értelmezi őket a szerver. Ha a parancsot tartalmazó fájlt átnevezem, akkor az oldal küld hibaüzenetet, hogy nem tudja végrehajtani az include-ot, tehát az include helyes név esetén megtörténik.

Leteszteltem function_exists-el, a function lézetik (ha az az oldalban, vagy egy már korábban létrehozott include fájlban van), mégse fut le a benne lévő parancs, csak ha kiemelem a function-ból. Totál érthetetlen számomra az egész.

Üdv,
Fedor
4

Lássuk a függvényt!

Dualon · 2005. Dec. 8. (Cs), 13.12
A legegyszerűbb az lenne, ha megnézhetnénk a kérdéses függvényt.
Véletlenül nem osztály függvényéről van szó, és kilépsz "php módból", vagy include-oláskor valahogy nem "vágod el" az osztályt?
Egy osztálydefiníciót NEM szedhetsz szét több fájlra. Szintén NEM darabolhatsz egy osztálydefiníciót több PHP blokkra, hacsak nem egy metódus közepén teszed ezt valamilyen oknál fogva.

Forrás: http://hu.php.net/manual/hu/language.oop.php
(Olyannal már találkoztam, hogy függvényt működési helyén definiálva elszállt az egész script, a kód elejére helyezve meg működött, de ez új.)

Dúalon
http://e-arc.hu/
5

Nem nagyon használok osztályokat

Fedor · 2005. Dec. 8. (Cs), 14.37
Teljesen közönséges űrlapellenőrző cucc:
 
<?php
if ($page=="main") :
    if (isset($marka)) :
        if ($marka=="") : 
            $hiba1="<div class='error'>Nem adta meg, hogy milyen márkát kíván vásárolni!</div>";
            $hiba_x="x";
        else :
            $hiba1="";
            $hiba_x="";
        endif;
        if ($tipus=="") : 
            $hiba2="<div class='error'>Nem adta meg, hogy milyen típust kíván vásárolni!</div>";
            $hiba_x="x";
        else :
            $hiba2="";
            $hiba_x="";
        endif;

 //és még néhány ilyen ellenőrzés, majd végül:
        
        if ($hiba_x=="x") :
            $hiba="<tr><td colspan=2 class='error'>Nem adott meg minden szükséges adatot!</td></tr>";
            $page="main";
        else : 
            $page="main2";
            $hiba="";
        endif;
    endif;
endif;

Vagyis ha jók, akkor rögzíti az adatokat (ez még nincs benne), majd továbblép az űrlap folytatására, ha meg nem, akkor újra betölti a jelenlegi űrlapot, megjelenítve a hibaüzeneteket. Ezt így most müxik, ha közvetlenül abban az oldalban van, amely behívja (az amúgy include-okban elhelyezett) űrlapokat. De ha már az ellenőrzést is kirakom egy include-ba, vagy egy function-be, akkor meg mintha nem is lenne.

Üdv,
Fedor
6

a függvény

zsepi · 2005. Dec. 8. (Cs), 15.02
A legegyszerűbb az lenne, ha megnézhetnénk a kérdéses függvényt.
(kiemelés tőlem)
szerintem a problémád az lesz, hogy nem adod át a $marka, $tipus, $hiba1, stb. változókat a függvényednek. vagy vizsgáld őket a $_POST változótömbből, vagy add át paraméterként, vagy pedig a függvényben deklaráld a globális változókat
<?php
function check() {
 global $marka, $hiba1;
}
7

talán...

Fedor · 2005. Dec. 8. (Cs), 15.20
Ami a function-t illeti, lehet, hogy igazad van, rögtön kipróbálom, de az include problémára ez se ad felelet...

Üdv,
Fedor
8

dehogynem

zsepi · 2005. Dec. 8. (Cs), 15.29
mivel a feldolgozás úgy néz ki, hogy
<?php
function check() {
  if($page2 == 'main') {
    if(isset($marka) {
       // ...
    }
  }
}
ha a $page2 nincs definialva, mar az elso sor utan kilep a fuggvenybol...
9

dehogy..

Fedor · 2005. Dec. 8. (Cs), 15.36
Úgy értem ha nem rakom be egy function-be, hanem csak egyszerűen külön fájlba rakom, és azt include-olom, ahelyett, hogy beraknám közvetlenül az oldalba.

Üdv,
Fedor
10

hol inkludolod

zsepi · 2005. Dec. 8. (Cs), 16.25
megfelelo helyen includolod?
azaz
<?php
// mukodik
$marka = 'akarmi';
include_once('form_ellenoriz.php');
// nem mukodik
include_once('form_ellenoriz.php');
$marka = 'akarmi';
11

természetesen...

Fedor · 2005. Dec. 8. (Cs), 16.39
Nem állítom, hogy vérprofi lennék, de azért ennyire nem vagyok láma...

Pontosan oda próbálom include-olni, ahova az include tartalma bemásolva tökéletesen működik.

Üdv,
Fedor
12

megvan...

Fedor · 2005. Dec. 9. (P), 11.29
Megvan az include probléma forrása. Okulásul mindenkinek, aki hajlamos apró figyelmetlenségekre. A PHP kód kezdetén véletlenül csak annyit írtam, hogy <?, nem pedig azt, hogy <?php. Teljesen véletlenül vettem észre, mert a szerkesztőprogimnak (Homesite 5) már ez is elég volt, hogy PHP-ként színkódolja az utána következőket, így hát én értelemszerűen abban kerestem a hibát, persze hiába, hisz nem ott volt. :-(

Javítsatok ki, ha tévedek, de ha jól emlékszem a 4.* verziókban ez még nem jelentett problémát. Vagy csak azért nem vettem észre, mert amúgy mindig rendesen ki szoktam írni?

Üdv,
Fedor
13

Beállításfüggő

attlad · 2005. Dec. 9. (P), 11.50
http://www.php.net/manual/en/ini.core.php#ini.short-open-tag
14

WAMP

Fedor · 2005. Dec. 9. (P), 11.59
Ezt a PHP-t nem én állítgattam be, hanem kivételesen a gyorsaságot és kényelmet választva komplett csomagban telepítettem fel (WAMP) az Apache-PHP-MySQL hármast. Jól működik, de akkor ezek szerint még érhetnek ehhez hasonló meglepik...

Üdv,
Fedor