1 (edited by Donatas 2011-03-03 23:32:18)

Topic: Fatal error

Sveiki.

<form action="procesasdr.php" method="post">

formoje po submit gaunu duomenis

$_POST['elps'], $_POST['vardas'], $_POST['gyvunas'], $_POST['veisle'], $_POST['klausimas'], $_POST['saugumas']

ir einu i procesasdr.php

ten turiu koda

include ('./apdorojimai/klaidos.php');
include ('./apdorojimai/tikrinimas.php');


$procesas = new Procesas;
$tikrinimas = new DuomenuTikrinimas;
$klaida     = new KlaiduApdorojimas;



class Procesas {
    
    function Procesas() {
        if ($_POST['drirasas']) {
        $this->KlausimoIrasymas($_POST['elps'], $_POST['vardas'], $_POST['gyvunas'], $_POST['veisle'], $_POST['klausimas'], $_POST['saugumas']);
        }
    }

    function KlausimoIrasymas ($elps, $vardas, $gyvunas, $veisle, $klausimas, $saugumas) {
        global $tikrinimas, $klaida;
        $post = $tikrinimas->registracija($elps, $vardas, $gyvunas, $veisle, $klausimas, $saugumas);
        if ($post == 1) {
            $_SESSION['klaidu_array'] = $klaida->KlaiduArray();
            header("Location: ./askdr.php");    
        }
    }
}

ivygdzius tai gaunu errora

Fatal error: Call to a member function registracija() on a non-object /home/... line 24
24 eilute yra

 $post = $tikrinimas->registracija($elps, $vardas, $gyvunas, $veisle, $klausimas, $saugumas);

jei koda iskeliu is klases

if ($_POST['drirasas']) {
    $procesas->KlausimoIrasymas($_POST['elps'], $_POST['vardas'], $_POST['gyvunas'], $_POST['veisle'], $_POST['klausimas'], $_POST['saugumas']);
        }
class Procesas { ...

kodas suveikia kuo puikiausiai.

O kodel nesuveikia klases viduje?

Re: Fatal error

Donatas wrote:

kodas suveikia kuo puikiausiai.

O kodel nesuveikia klases viduje?

Pirmiausia klases aprašyk PRIEš jų naudojimą.

Antras dalykas, kad tuo metu, kai yra kuriamas objektas $procesas ($procesas = new Procesas;),
ir vykdomas tavo kodas su klaida, dar neegzistuoja objektas $tikrinimas (nes jis sukuriamas vėliau). Todėl problema čia ta, kad tu kreipiesi į objektą, kurio dar nesukūrei.

3 (edited by md5 2011-03-03 23:45:43)

Re: Fatal error

tai pateik visas klases tas paminetas, tada tau nuosekliai daug dalyku paaiskinsiu.
o pats duomenu varikliukas turetu buti biski kitaip parasytas.

Kiek maigyklių sudėvėjai ?

4 (edited by Donatas 2011-03-04 21:21:15)

Re: Fatal error

ok pateikiu klases nes kolkas is manualo skaitymo man cia tamsus miskas tame konstravime :)

pirmas faile askdr.php yra forma anksciau mineta kad butu nuosekliau sudesiu viska i viena zinute.

 
<? include ('./procesasdr.php'); ?>
<form action="procesasdr.php" method="post">

is formos gaunu duomenis $_POST['elps'], $_POST['vardas'], $_POST['gyvunas'], $_POST['veisle'], $_POST['klausimas'], $_POST['saugumas']
jei buvo submitas ir rastos klaidos jas atvaizduoju per stai toki koda

 <? echo $klaida->klaida("elps"); ?>

po submite einu i procesas.php faila ten kodas

<?php

include ('./apdorojimai/klaidos.php');
include ('./apdorojimai/tikrinimas.php');
include ('../function.php');

$procesas = new Procesas;
$tikrinimas = new DuomenuTikrinimas;
$klaida     = new KlaiduApdorojimas;



class Procesas {
    
    function Procesas() {
        if ($_POST['drirasas']) {
        $this->KlausimoIrasymas($_POST['elps'], $_POST['vardas'], $_POST['gyvunas'], $_POST['veisle'], $_POST['klausimas'], $_POST['saugumas']);
        }
    }

    function KlausimoIrasymas ($elps, $vardas, $gyvunas, $veisle, $klausimas, $saugumas) {
        global $tikrinimas, $klaida;
        $post = $tikrinimas->registracija($elps, $vardas, $gyvunas, $veisle, $klausimas, $saugumas);
        if ($post == 1) {
            $_SESSION['klaidu_array'] = $klaida->KlaiduArray();
            header("Location: ./askdr.php");    
        }
    }
}

?>

sitam faile man ivyksta klaida Fatal error: Call to a member function registracija() on a non-object /home/... line 24
24 eilute yra

  $post = $tikrinimas->registracija($elps, $vardas, $gyvunas, $veisle, $klausimas, $saugumas);

jei klaidos nemestu turetu eiti i faila include ('./apdorojimai/tikrinimas.php');

ir ten yra stai toks kodas

class DuomenuTikrinimas {
    
    function registracija($kelp, $kvardas, $kgyvunas, $kveisle, $kklausimas, $ksaugumas) {
        global $klaida;
        $laukas = "elps";
        if (!$kelp) {
            $klaida->KlaiduNustatymas($laukas, "* Neivestas El. pašto adresas");
        }
        else { 
            if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $kelp)) { 
            $klaida->KlaiduNustatymas($laukas, "* Neteisingai įvestas Elektroninis paštas");            
            }
        }
    
        $laukas = "vardas";
        if (!$kvardas) {
            $klaida->KlaiduNustatymas($laukas, "* Neįvestas vardas");
        }
        else {
            if (!isValid("User",$kvardas)) { 
            $klaida->KlaiduNustatymas($laukas, "* Vardą gali sudaryti raidės nuo a-A iki z-Z ir/arba skaičiai nuo 0 iki 9");
            }
        }

ir taip toliau panasiai toks pat kodas kol sutikrinu visus laukus.

kai sutikrininau paskaiciuoju kiek yra klaidu

        if ($klaida->yraklaida > 0) {
            return 1;
        }
}

klaidos apdorojamos klaidos.php faile

ten kodas

class KlaiduApdorojimas {
    var $klaidos = array();
    var $yraklaida; 
    
    function KlaiduApdorojimas () {
        if (isset($_SESSION['klaidu_array'])) {
            $this->klaidos = $_SESSION['klaidu_array'];
        }
    }
    
    function KlaiduNustatymas($laukas, $zinute) {
        $this->klaidos[$laukas] = $zinute;
        $this->yraklaida       = count($this->klaidos);
    }    

    function klaida($laukas) {
        if (array_key_exists($laukas,$this->klaidos)) {
            return "<br><font size=\"2\" color=\"#ff0000\">".$this->klaidos[$laukas]."</font>";
        } else {
            return "";
        }        
    }
    function KlaiduArray() {
        return $this->klaidos;
    }
}

function.php ten sudetos mano pagrindines funkcijos. naudoju tikrinimui stai sita funkcija

function isValid($type,$var) { 
 $valid = false; 
 switch ($type) { 
  case "IP": 
   if (ereg('^([0-9]{1,3}\.){3}[0-9]{1,3}$',$var)) { 
    $valid = true; 
   } 
   break; 
  case "URL": 
   if (ereg("^[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu)$",$var)) { 
    $valid = true; 
   } 
   break; 
  case "User": 
   if (ereg("^[a-žA-ž0-9_ ]{2,30}$",$var)) { 
    $valid = true; 
   } 
   break;  
  case "telnr": 
   if (ereg("^[+]{1}[0-9]{3,12}$", $var)) { 
    $valid = true; 
   } 
   break;
  case "kaina": 
   if (preg_match("/^([0-9]){1,10}$/", $var)) { 
    $valid = true; 
   } 
   break;
 } 
 return $valid; 
}

visas kodas cia

dabar daugmas jei turit kokiu patarimu kad uzvest ant kelio kaip daryt maloniai laukiu :)
jei kas neaisku klauskit bandysiu isaiskint kaip ka noriu padaryt

Re: Fatal error

Paskaityk mano žinutę.

6 (edited by Donatas 2011-03-04 21:35:53)

Re: Fatal error

minde wrote:
Donatas wrote:

kodas suveikia kuo puikiausiai.

O kodel nesuveikia klases viduje?

Pirmiausia klases aprašyk PRIEš jų naudojimą.

Antras dalykas, kad tuo metu, kai yra kuriamas objektas $procesas ($procesas = new Procesas;),
ir vykdomas tavo kodas su klaida, dar neegzistuoja objektas $tikrinimas (nes jis sukuriamas vėliau). Todėl problema čia ta, kad tu kreipiesi į objektą, kurio dar nesukūrei.

tai jeigu teisingai supratau class aprasau stai siuo sakiniu
$tikrinimas = new DuomenuTikrinimas;

tai kad jis butu aprasytas pries ivygdyma idesiu ji i includinama faila?

Re: Fatal error

man dar reikia priprast prie to kaip vadina angliskai ir kur kaip ka vadinate lietuviskai :)

Re: Fatal error

dabar jau vienas dalykas aiskiau jei teisingai supratau visada klase aprasau po jos sukonstravimo t.y.
$tikrinimas = new DuomenuTikrinimas; daleiskim dedu po

class DuomenuTikrinimas {

kodas

}
$tikrinimas = new DuomenuTikrinimas;

Re: Fatal error

Nežinau kas tau neaišku - pas tave kai kuriamas objektas

$procesas = new Procesas;

tai iš karto yra vykdomas jo konstruktorius:

function Procesas() {

Vykdant šį kontruktorių pas tave yra kviečiamas toks metodas:

$this->KlausimoIrasymas(...

kurio kode yra tokios eilutės:

global $tikrinimas, $klaida;
$post = $tikrinimas->registracija($elps, $vardas, $gyvunas, $veisle, $klausimas, $saugumas);

O tos eilutės daro štai ką - vykdo globalaus objekto $tikrinimas, metodą registracija()

... bet kaip mes jau žinom realiai tas objektas $tikrinimas dar nesukurtas... Tai va čia ir bėda - tu kvieti nesukurto (tuščias kintamasis) objekto metodą (-;

O dėl kalbos tai tiek anglų tiek lietuvių kalbose viskas tas pats:
klasė -> class
objektas -> object
metodas -> method

10 (edited by Donatas 2011-03-04 23:11:01)

Re: Fatal error

perkelus viska kur reikia viskas suveikia kuo puikiausiai.
bet dabar dar vienas klausima

viskas suplanuota daugmas taip
veliau i sita visa reikala noresiu deti ir kukiu apdorojima todel po submit darau

<form action="procesasdr.php" method="post">

t.y. po submit persikeliu i procesasdr.php faila ten apdoroju duomenis ir per header("Location: ./askdr.php"); gryztu atgal klases jokiu echo nedaro kad galeciau apdorot kukius kada noriu.

jeigu visus failus dar suincliudinu i askdr.php ir isimu header("Location: ./askdr.php"); kodas suveikia ir jei pildant forma buvo ivesta kazkas ne taip padaro echo ir apraso klaidas.

bet jeigu keliuosi i procesasdr.php tada iskyla nesklandumai

kazkodel neuzregistruoja sesijos. t.y.

        if ($post == 1) {
            $_SESSION['klaidu_array'] = $klaida->KlaiduArray();
            header("Location: ./askdr.php");    
        }

koda pakeiciu i

        if ($post == 1) {
            $_SESSION['klaidu_array'] = $klaida->KlaiduArray();
            echo  $_SESSION['klaidu_array']['elps'];
        }

gaunu atsakyma '* Neivestas El. pašto adresas' reiskesi array pasima

bet jeigu grazinu header atgal tai yra po submito apdoroje duomenis ir nustato klaidas faile procesasdr.php ir per  header("Location: ./askdr.php");  gryzta atgal i askdr.php

askdr.php faile padarius

 <?  echo  $_SESSION['klaidu_array']['elps']; ?>

negaunu jokio atsakymo

tarsi clase is savo ribu neisleidzia uzregistruotos sesijos.

Re: Fatal error

minde wrote:

O dėl kalbos tai tiek anglų tiek lietuvių kalbose viskas tas pats:
klasė -> class
objektas -> object
metodas -> method

nu pas mane kitaip yra kazkaip dirbdamas anglijoje kad geriau ismokciau anglu kalba isigudrinau ir galvot angliskai :)
tai siek tiek padejo :)
tai dabar grizus i lietuva jei skaitau angliskai kad geriau suprasciau ir galvoju angliskai :)
ir visumoje gaunasi man toks barjeras tarp tos gimtosios lietuviu ir anglu :)

Re: Fatal error

Donatas wrote:

nu pas mane kitaip yra

Kaip dar kitaip? Negali būt kitaip.

Re: Fatal error

minde wrote:
Donatas wrote:

nu pas mane kitaip yra

Kaip dar kitaip? Negali būt kitaip.

nu man taip gaunasi kad pereinant is anglisko zargono prie lietuvisko zargono reikia angliska zargona pritapatint lietuviskam :)
ir kol neisisavinu katras lietuviskas kintamsis pritapatinamas angliskajam tol gaunasi barjeras :)
nu vienu zodziu nenukrypstam nuo temos...

Re: Fatal error

Donatas wrote:

nu man taip gaunasi kad pereinant is anglisko zargono prie lietuvisko zargono reikia angliska zargona pritapatint lietuviskam :)
ir kol neisisavinu katras lietuviskas kintamsis pritapatinamas angliskajam tol gaunasi barjeras :)

Nepyk, bet nieko nesuprantu - koks žargonas? Nėr čia jokio žargono. Yra specifiniai pavadinimai ir jie verčiami be jokių barjerų....

Donatas wrote:

nu vienu zodziu nenukrypstam nuo temos...

Sunku nenukrypt, tau jau 2x tiksliai paaiškinta kur pas tave klaida. Tema praktiškai išsemta (-; Klupinėji lygioje vietoje..

Re: Fatal error

na gal but ir du kart atsakyta bet sesijos registravimu atveju nepadejo :)

t.y. sesija tarsi uzregistruojama kaip paprastas kintamasis po redirekto su header`iu padarius echo atsakymo is sesijos negaunu.

16

Re: Fatal error

gal nenaudojai redirectintame faile session_start() ?

Kodo prasme baisiai ir sudėtingai aprašei visą veiksmą. Tau klasės čia nereikalingos. Visą tai gali 5x sutrumpinti visom prasmėm.
viena f-ja turi atlikti tik vieną veiksmą, o pas tave isValid atlieka 5 veiksmus, IP, kaina.
klasėse "global" griežtai draudžiama naudoti, kitaip kam tas klases kurti.
Klasės tarpusavyje nesusietos, "global" nesiskaito.
php versijos irgi tobulėja, tad laikas atsinaujinti
http://php.net/manual/en/language.oop5.php
Jeigu jau lietuviškai kodini, tai prie ko tas isValid() ?
Nekodink lietuviškai, kitaip tavo rašto niekas nesupras.

Pradėk nuo paprastesnių dalykų.

Kiek maigyklių sudėvėjai ?

17 (edited by Donatas 2011-03-05 23:37:18)

Re: Fatal error

md5 wrote:

gal nenaudojai redirectintame faile session_start() ?

Kodo prasme baisiai ir sudėtingai aprašei visą veiksmą. Tau klasės čia nereikalingos. Visą tai gali 5x sutrumpinti visom prasmėm.
viena f-ja turi atlikti tik vieną veiksmą, o pas tave isValid atlieka 5 veiksmus, IP, kaina.
klasėse "global" griežtai draudžiama naudoti, kitaip kam tas klases kurti.
Klasės tarpusavyje nesusietos, "global" nesiskaito.
php versijos irgi tobulėja, tad laikas atsinaujinti
http://php.net/manual/en/language.oop5.php
Jeigu jau lietuviškai kodini, tai prie ko tas isValid() ?
Nekodink lietuviškai, kitaip tavo rašto niekas nesupras.

Pradėk nuo paprastesnių dalykų.

nu jo ieskau po "sikna smegenu" kada atsakymas toks paprastas 'session_start()' :)
isValid tai mano viena is dazniausiu naudojamu funkciju kad supaprastinciau sau darba i ja idejau switch.
  na reiks pasiaiskint kodel jau tas global uzdraustas.
   gal galima koki pavyzdi kaip yra teisingai susiejamos klases?
    Pradėk nuo paprastesnių dalykų.
     Visa sita reikala turiu pasirases be klasiu. Kuris man atrodo paprastesnis ir trumpesnis. Bet visada norejau ismokti bent jau minimaliai dirbti su klasemis, todel paciam buna paprasciau viska suvest i viena taska aprasant f-cijas ir clases lietuviskai.

Re: Fatal error

+ dar prie atsinaujimo :) klasese man nera kur naujintis... jos man ir taip vis dar naujos :)