Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Poprawa zawiadonień 'Notice'
Forum PHP.pl > Forum > PHP
r3pilc3
Witam.
Mam frameworka 5.0
Otwierając go w XAMPP 1.8.0, który posiada php 5.4.4 nie wyświetlają się błędy (Warning).
Jak w głównym pliku index.php dodam pełne raportowanie błędów:
  1. error_reporting(E_ALL | E_STRICT);

To wyświetlają mi się zawiaomienia.
Prosze o pomoc w ich rozwiazaniu.

1) W pliku template.php wyświetla mi się 1 zawiadomienie:
-Notice: Use of undefined constant end - assumed 'end' in C:\xampp\htdocs\Sklep_jubilerski\core\classes\router.php on line 88
Oto linia 88:

i to jak dobrze rozumiem, muszę zamienić na:
  1. 'end'

Błąd się nie wyświetla więc myślę, że dobrze poprawiłem. "Jeśli się omylę to mnie poprawcie" -JPII.

Teraz reszta co nie umię poprawić:

2) W pliku sesion.php wyświetla mi się 1 zaiwadomienie:
-Notice: Undefined index: flash in C:\xampp\htdocs\Sklep_jubilerski\core\classes\session.php on line 15
Oto linia 15:
  1. $_SESSION[$key]=$GLOBALS[$key];


ps. Najpierw miałem w tej linii (jako framework5.0):

Wraz z nowszą wersją php 5.4.4 zgonie z wymogami zastapiłem właśnie na:
  1. $_SESSION[$key]=$GLOBALS[$key];

Czyli jak poprawiłem to już mi się Warning nie wyświetla -ale jest jakieś zawiadomienie, które nierozumie.

3)plik kolejny ma 1 zawiadomienie:
Notice: Undefined variable: args in C:\xampp\htdocs\Sklep_jubilerski\app\models\admin.php on line 27
Oto linia 27:
  1. return $args;



4) Plik catalog.php - 1 zawiadomienie się wyświetla:
-Notice: Undefined property: Registry::$addon in C:\xampp\htdocs\Sklep_jubilerski\app\models\catalog.php on line 10
Oto linia 10:
  1. $this->addon=$registry->addon;

co tu muszę poprawić?


4)plik kolejny ma 1 zawiadomienie:
Notice: Undefined variable: args in C:\xampp\htdocs\Sklep_jubilerski\app\models\admin.php on line 27
Oto linia 27:
  1. return $args;



5)W pliku admin.php wyświetlaja się reszta zawiadomień:

-Notice: Undefined index: sid in C:\xampp\htdocs\Sklep_jubilerski\app\controllers\admin.php on line 179
  1. if($_GET['sid']!='')

-Notice: Undefined index: Admin_login_details in C:\xampp\htdocs\Sklep_jubilerski\app\controllers\admin.php on line 187
  1. $this->template->set('login_details', $_SESSION['Admin_login_details']);

-Notice: Undefined index: Admin_login_details in C:\xampp\htdocs\Sklep_jubilerski\app\controllers\admin.php on line 188
  1. $this->template->set('availableLanguages', $this->model->admin->getAdminLanguages($_SESSION['Admin_login_details']['id']));

-Notice: Undefined variable: message in C:\xampp\htdocs\Sklep_jubilerski\app\controllers\admin.php on line 203
  1. $this->__checklogin($action,$controller,$args,$post,$message);

-Notice: Undefined index: activeon in C:\xampp\htdocs\Sklep_jubilerski\app\controllers\admin.php on line 240
  1. if($option['activeon'])

-Notice: Undefined index: submenu in C:\xampp\htdocs\Sklep_jubilerski\app\controllers\admin.php on line 247
  1. if($option['submenu'])

-Notice: Undefined index: active in C:\xampp\htdocs\Sklep_jubilerski\app\controllers\admin.php on line 259
-Notice: Undefined index: submenu in C:\xampp\htdocs\Sklep_jubilerski\app\controllers\admin.php on line 259
  1. array_push($menu,array('name'=>$option['name'],'url'=>$option['url'],'active'=>$option['active'], 'submenu'=>$option['submenu']));

-Notice: Undefined index: Admin in C:\xampp\htdocs\Sklep_jubilerski\app\controllers\admin.php on line 267
  1. if($_COOKIE['Admin']

-Notice: Undefined index: Admin in C:\xampp\htdocs\Sklep_jubilerski\app\controllers\admin.php on line 305
  1. $doLogin = $this->model->admin->check_cookie($_COOKIE['Admin']);


Bradzo proszę o pomoc.
rzymek01
A po angielsku umiesz czytać?
jeśli nie to pozostaje słownik i/lub translator.

Sorry, ale przy błędach typu "Undefined variable: args" nie ma czego tłumaczyć ...
rzymek01
pozwól, że zapytam czy kiedykolwiek pisałeś coś w php?
r3pilc3
Jestem początkujący.
Dokładniej tłumacząc to 1sza klasa 1sza lekcja.

Natomiast co mam zrobić z zawiadomieniem:?
Notice: Undefined index: NAZWA in C\...
rzymek01
'Undefined index "
to znaczy niezdefiniowany indeks ...
... czyli nie ma takiego indeksu ...

co możesz z tym zrobić?
- zobaczyć czy tworzysz kiedykolwiek taki indeks, czy nie jest to błąd logiczny, może literówka ...
r3pilc3
Czyli w ['...'] jest index?
  1. ['index']

W jakim sęsie mam sprawdzić czy był tworzony?

rzymek01
wybacz, nie mam ochoty o tym pisać,
weź do ręki kurs/książkę o php i przeczytaj ze zrozumieniem ...

PS. dobra, napiszę

- tak, w każdym języku programowania jak masz tablicę, to w nawiasach kwadratowych jest indeks
- jeśli wcześniej nie było przypisania $tablica['index'] = 'jakaś wartość'; to chyba logiczne, że nie ma takiego indeksu, bo niby skąd miałby się wziąć?
r3pilc3
Czyli jak mam index: Admin bez wartości to musze wpisać:
  1. $doLogin = $this->model->admin->check_cookie($_COOKIE['Admin']=1);

czy nie w tej linii ale 1linie wyżej:
  1. $_COOKIE['Admin']=1


Ja się ucze php ale nie chcę od podstaw samych. Patrzę filmiku na YT czytam coś tam w Gugl .. ale początki dopiero.
I se zdobylem frameworka, ktorego chce badać

---
---------------
Jeszcze ostatnie zostało:
A jeśli chodzi o:
-Notice: Undefined property: Registry::$addon in C:\xampp\htdocs\Sklep_jubilerski\app\models\catalog.php on line 10
  1. this->addon=$registry->addon;

To znaczy niezindentyfikowana właściwość? co mam tu wymęczyć?
rzymek01
nie ma takiej składowej klasy,
nie ucz się z filmików z YT, masakra smile.gif

naprawdę weź do ręki porządną lekturę,
może zacznij od innego języka niż php, życie będzie bardziej kolorowe tongue.gif
r3pilc3
Tylko PHP. Nie odpuszczam. Naumie sie kiedys.

Z około 6 zawiadomieniami sobie poradziłem.
Jest taka funkcja isset

  1. if(file_exists($path))

Poprawić na:
  1. if(file_exists(isset($path)))


Ale połowa zawiadomień jeszcze mi została ;] Proszę o pomoc.
sazian
szczerze ? wyłącz raportowanie "na poziomie notatek" bo oszalejesz
Mephistofeles
Bzdura. Dobry kod nie powinien generować błędów.
r3pilc3
Sprawa tak się ma, ze nabyłem frameworka wersję 5.0 i uczę się PHP - jestem początkującym.
Sprawa się tak ma, że skończyłem inż grafika i nie uczyłem się PHP. Teraz chodzę na mgr sieci. I chce mieć prace mgr związaną z grafiką.
Mam pół roku aby zrobić/przerobić frameworka (nazwy folderów czy zmienny itd) i zrozumieć o co w nim chodzi. Ten framework jest połączony z plikiem Flash w których są np przyciski logi itp. Flash umiem.

Chciałbym mieć w swoim kodzie pełne raportowanie błędów w swojej pracy.
Pracę zrobię w XAMPP 1.8.0, który posiada PHP 5.4.4 czyli jak za 2miesiące wyjdzie nowszy XAMPP z nowsza wersją PHP to nie będę już zamieniał i na nowo poprawiał nowe błędy, które się pojawią wraz z nowszą wersją PHP.

______________________________________

Zacznę temat od nowa. Oto zawiadomienie, które chyba jest najtrudniejsze do poprawy:
Najpierw wytłumaczę pewną kwestię. W framweorku php 5.0 miałem:
session_unregister($key);
W nowszej wersji php był Warning. Więc poprawiłem zgonie z wymogami na:
$_SESSION[$key]=$GLOBALS[$key];
  1. http://php.net/manual/pl/function.session-register.php

Już Warning nie ma. Ale jak włączę pełne raportowanie błędów to jest zawiadomienie:
- Notice: Undefined index: $key in C:\xampp\htdocs\sklep_jubilerski\core\classes\session.php on line 13
ps. jak to mam rozumieć skoro na stronie MANUAL PHP jest w nawiasach kwadratowych np. $key bez cudzysłowów. To mam pisać [$key] czy ['$key']? Czyli w całym frameworku muszę poprawić każdy: [index] na: ['index']?

Oto plik session.php:
  1. <?php
  2. Class Session {
  3. private $registry;
  4. function __construct($registry) {
  5. $this->registry = $registry;
  6. }
  7.  
  8. function set($key, $var) {
  9. $_SESSION[$key]=$var;
  10. return true;
  11. }
  12. function delete($key){
  13. $_SESSION[$key]=$GLOBALS[$key];
  14. return true;
  15. }
  16. }
  17. ?>


ps. Jeśli dobrze rozumiem to zawiadomienie to muszę przypisać:
  1. $table['$key']='a'

I to muszę w tym pliku zrobić?
Wyskakuje mi komunikat:
-Parse error: syntax error, unexpected '$table' (T_VARIABLE), expecting function (T_FUNCTION) in C:\xampp\htdocs\sklep_jubilerski\core\classes\session.php on line 7
Co robię źle?
mls
Polecam, choć to naprawdę ostateczna opcja, zakup jakiejkolwiek dobrej książki dot. programowania w PHP5. Serio.
Ogólnie, polecam zdobycie jakichkolwiek materiałów o programowaniu. W sumie w czymkolwiek...

Cytat(r3pilc3 @ 2.08.2012, 13:34:04 ) *
Najpierw wytłumaczę pewną kwestię. W framweorku php 5.0 miałem:
session_unregister($key);
W nowszej wersji php był Warning. Więc poprawiłem zgonie z wymogami na:
$_SESSION[$key]=$GLOBALS[$key];


Nie ma takich wymogów. Co więcej, powyższy zapis jest kompletnie bez sensu. Należy zrozumieć najpierw co robi funkcja session_unregister. Manual istnieje nawet po polsku!
Prawidłowy zapis powyższego to
  1. unset($_SESSION[$key]);


Cytat(r3pilc3)
- Notice: Undefined index: $key in C:\xampp\htdocs\sklep_jubilerski\core\classes\session.php on line 13
ps. jak to mam rozumieć skoro na stronie MANUAL PHP jest w nawiasach kwadratowych np. $key bez cudzysłowów. To mam pisać [$key] czy ['$key']? Czyli w całym frameworku muszę poprawić każdy: [index] na: ['index']?


Pozostawię to właściwie bez komentarza - polecam spojrzeć na pierwszą linijkę mojego posta. A później polecam odwiedzić http://php.net/manual/pl/language.variables.php.

Cytat(r3pilc3)
ps. Jeśli dobrze rozumiem to zawiadomienie to muszę przypisać:
  1. $table['$key']='a'

I to muszę w tym pliku zrobić?


Absolutnie nie.
  1. Class Session
  2. {
  3. private $registry;
  4.  
  5. function __construct ($registry)
  6. {
  7. $this->registry = $registry;
  8. }
  9.  
  10. function set ($key, $var)
  11. {
  12. $_SESSION[$key] = $var;
  13. return true;
  14. }
  15.  
  16. function delete ($key)
  17. {
  18. if (isset($_SESSION[$key]))
  19. unset($_SESSION[$key]);
  20. return true;
  21. }
  22. }


Temat nadaje się zdecydowanie do podforum Przedszkole.
r3pilc3
Dziękuję za poprawną poprawę. Już nie ma tego zawiadomienia.
Ale wystąpiło w następie tej poprawy inne zawiadomienie, które jest w innym pliku:

-Notice: Undefined index: MBeforeLoginTempM in C:\xampp\htdocs\sklep_jubilerski\app\controllers\admin.php on line 314

Oto część kodu z tego pliku: (linia 314 w //komentarzu)
  1. if(isset($_COOKIE['Admin'])){
  2. $doLogin = $this->model->admin->check_cookie($_COOKIE['Admin']);
  3. if($doLogin==true){ $this->router->redirect('admin/index'); }
  4. }
  5.  
  6. $_SESSION["key"]=md5(uniqid(rand(), true));
  7.  
  8. $this->template->set('token', $this->addon->token->token('set'));
  9.  
  10. $this->template->set('message', $_SESSION['MBeforeLoginTempM']); //linia 314
  11.  
  12.  
  13. $this->template->set('loginform',$this->template->element('admin/login',array('token'=>$this->addon->token->token('set'))), true);
  14. $this->template->set('pageTitle', 'Login');
  15. $this->template->show('admin/login');
  16. }
rzymek01
proszę nie karmić trolla...

ciagle z tym samym pytaniem,
rusz swe cztery litery i do roboty
r3pilc3
Dzieki za mobilizację. Pisałeś już o tym. Jestem roztargniony..
Dopisałem ='1'
  1. $this->template->set('message', $_SESSION['MBeforeLoginTempM']='1');

Już komunikat zniknął.
Dobrze zrobiłem czy tak nie powinienem tylko inaczej?
rzymek01
przeczytaj co pisał mls oraz moje wypowiedzi i jak dojdzesz, co robisz źle, to pochwal się tongue.gif
r3pilc3
Proszę o wytłumaczenie jak mam przypisać tablicę['index']='wartość'.
d3ut3r
Undefined index oznacza tyle, że klucz tablicy do której się odwołujesz nie został zdefiniowany innymi słowy zanim użyjesz $tablica['klucz'] musisz sprawdzić czy on istnieje lub zdefiniować go wcześniej w sposób jawny. Sprawdzenia dokonasz tak:

  1. if (isset($tablica['klucz'])){
  2. $tablica['klucz']='aaa';
  3. }


w niektórych przypadkach lepiej po prostu zadeklarować pustą tablicę niż cały czas sprawdzać obecność kluczy:

  1. $tablica=array('klucz'=>'','klucz2'=>'');
  2.  
  3. $tablica['klucz']='nowa wartość klucza'; //tutaj nie wystąpi notice biggrin.gif


r3pilc3
Mam ostatni plik.php w którym mam zawiadomienia.
(To nie jest cały kod PHP tego pliku, tylko część kodu dotycząca logowania do panelu administracyjnego. Pozmieniałem w komunikatach poniżej - ..on line "NR" aby pasował nr komunikatu do linii kodu poniżej - aby nie trzeba było szukać.)

1)Notice: Undefined index: sid in C:\xampp\htdocs\sklep_jubilerski\app\controllers\admin.php on line 3
2)Notice: Undefined index: Admin_login_details in C:\xampp\htdocs\sklep_jubilerski\app\controllers\admin.php on line 11
3)Notice: Undefined index: Admin_login_details in C:\xampp\htdocs\sklep_jubilerski\app\controllers\admin.php on line 12
4)Notice: Undefined index: flash in C:\xampp\htdocs\sklep_jubilerski\app\controllers\admin.php on line 14
5)Notice: Undefined index: active in C:\xampp\htdocs\sklep_jubilerski\app\controllers\admin.php on line 83
6)Notice: Undefined index: submenu in C:\xampp\htdocs\sklep_jubilerski\app\controllers\admin.php on line 83
7)Notice: Undefined index: active in C:\xampp\htdocs\sklep_jubilerski\app\controllers\admin.php on line 83
8)Notice: Undefined index: active in C:\xampp\htdocs\sklep_jubilerski\app\controllers\admin.php on line 83
9)Notice: Undefined index: submenu in C:\xampp\htdocs\sklep_jubilerski\app\controllers\admin.php on line 83
10)Notice: Undefined index: active in C:\xampp\htdocs\sklep_jubilerski\app\controllers\admin.php on line 83
11)Notice: Undefined index: submenu in C:\xampp\htdocs\sklep_jubilerski\app\controllers\admin.php on line 83

  1. function BeforeFilter($action,$controller,$args=null,$post=null){
  2.  
  3. if($_GET['sid']!=''){
  4. //session_destroy();
  5. session_id($_GET['sid']);
  6. }
  7.  
  8.  
  9. $this->template->set('login_details', $_SESSION['Admin_login_details']);
  10. $this->template->set('availableLanguages', $this->model->admin->getAdminLanguages($_SESSION['Admin_login_details']['id']));
  11. $this->template->set('mainmenu', $this->__MainMenu($action));
  12. $this->template->set('flash', $_SESSION['flash']);
  13. $this->session->delete('flash');
  14.  
  15. if(strtolower($action)=='login' and !$post){
  16. $this->session->delete('MBeforeLoginTempA');
  17. $this->session->delete('MBeforeLoginTempM');
  18. }else{
  19. $args = '/'.$this->model->admin->make_args($args);
  20. }
  21.  
  22.  
  23. $released=array('login','passwordremind', 'passwordremindsent');
  24. if(!in_array(strtolower($action), $released)){
  25. $this->__checklogin($action,$controller,$args,$post,$message='1');
  26.  
  27. if(empty($_SESSION['Admin_login_details']['lang'])==true and $action!='Lang'){
  28. $this->__ChooseLanguage();
  29. if($action!='index') $this->router->redirect('admin/index');
  30. }
  31. }
  32.  
  33. }
  34.  
  35. function __ChooseLanguage($args=null,$post=null){
  36. $this->template->popup('prompt',$this->template->element('admin/flashLanguageSelection', array('languages' => $this->model->admin->getAdminLanguages($_SESSION['Admin_login_details']['id']))));
  37. }
  38.  
  39. function Lang($args=null,$post=null){
  40. $this->model->admin->changeAdminLanguage($args[0]);
  41.  
  42. $this->router->redirect('admin/index');
  43. }
  44.  
  45. function __MainMenu($action){
  46. $menus=array(
  47. 1=>array('name'=>'Zamówienia','url'=>'Orders','activeon'=>array('orders')),
  48. 2=>array('name'=>'Produkty','url'=>'Products','activeon'=>array('products','products_add','products_edit','products_categories'),
  49. 'submenu'=>array(
  50. 0=>array('name'=>'Nowy produkt','url'=>'Products_add','activeon'=>array('Products_add')),
  51. 1=>array('name'=>'Kategorie','url'=>'Products_categories','activeon'=>array('Products_categories'))
  52. )
  53. ),
  54. 3=>array('name'=>'Ustawienia','url'=>'Settings','activeon'=>array('settings')),
  55. 4=>array('name'=>'Wyloguj','url'=>'Logout')
  56. );
  57.  
  58. $menu=array();
  59.  
  60. foreach($menus as $option){
  61.  
  62. if(isset($option['activeon']))
  63. foreach($option['activeon'] as $activeon){
  64. if(preg_match("/{$action}/i", $activeon)){
  65. $option['active']=true;
  66. }
  67. }
  68. $i=0;
  69. if(isset($option['submenu']))
  70. foreach($option['submenu'] as $submenu){
  71. foreach($submenu['activeon'] as $active){
  72.  
  73. if(strtolower($action)==strtolower($active)){
  74. $option['submenu'][$i]['active']=true;
  75.  
  76. }
  77. }
  78. $i++;
  79. }
  80.  
  81. array_push($menu,array('name'=>$option['name'],'url'=>$option['url'],'active'=>$option['active'], 'submenu'=>$option['submenu']));
  82. }
  83.  
  84.  


Więc jak muszę wpisać aby przypisać wartości?
Podajcie proszę chociaż 1 przykład.
______________________________________________

W mojej głowie narodziły się pewne domysły:
-Kod był pisany pod XAMPP 1.7.1, który posiada PHP 5.2.9
-Ważne: Pod tą wersją PHP również po dodaniu pełnego raportowania błędów pokaują się te same zawiadomienia.

WIĘC zadaję sobie pytania:
- dlaczego autor olał te zawiadomienia
- co autor kodu miał na myśli pisząc go? - 'nie wiadomo na jaką wartość poprawić'
- czy jak dodam definicję własności np. addon, to czy nie zepsuję tego kodu jeszcze bardziej?
- do czego ma służyć np. addon, jakiego ma być typu?
- czy ma mieć jakąś wartość domyślną?
______________________________________

Nasuwa mi się nowe pytanie. Proszę abyście pomogli mi na nie odpowiedzieć?
-Jak sądzicie, czy jest sens zmieniać zawiadomienia czy po prostu mieć projekt bez pełnego raportowania błędów skoro jest tak wiele w zasadzie bardzo istotnych niewiadomych?

---------------------------------------------------------
---------------------------------------------------------

Poradziłem sobie z zawiadomieniami smile.gif
Oto przykłady jak by było źle proszę o poprawę:

2)Zawiadomienie nr 2 z początku posta, które wymieniałem. Poprawilem na:
  1. $this->template->set('login_details', (isset($_SESSION['Admin_login_details'])?$_SESSION['Admin_login_details']:""));

Już zawiadomienie się nie wyświetla.

4)
  1. $this->template->set('flash', (isset( $_SESSION['flash'])? $_SESSION['flash']:""));


5) 6) 7) 8) 9) 10) 11) Analogicznie:
Dodałem linię wcześniej:
  1. if(isset($option['active']))


____
____

Zostały mi 2 zawiadomienia:

1) jak zamienię na:
  1. if($_GET['sid']!='' && isset($_GET['sid']))

To zawiadomienie nie znika. Prosze o pomoc co jest nie tak;

3) nie wiem jak zamienić, poniewaz jak zamienię na:
  1. $this->template->set('flash', (isset( $_SESSION['flash'])? $_SESSION['flash']:""));

to wyskakują 3 inne zawiadomienia i 1 błąd. To może tak być faktycznie i poprawić te 4 nowe komunikaty. Czy coś nie tak z tą poprawą?

Wyskakujące nowe komunikaty:
Notice: Uninitialized string offset: 0 in C:\xampp\htdocs\Sklep_jubilerski\app\views\layouts\default\admin.php on line 146
-Notice: Undefined variable: ftitle in C:\xampp\htdocs\Sklep_jubilerski\app\views\layouts\default\admin.php on line 146
-Warning: Illegal string offset 'content' in C:\xampp\htdocs\Sklep_jubilerski\app\views\layouts\default\admin.php on line 147
-Notice: Uninitialized string offset: 0 in C:\xampp\htdocs\Sklep_jubilerski\app\views\layouts\default\admin.php on line 147

  1. [/php]
  2. .....// tu kod nie tyczący się tego'
  3. <?php
  4.  
  5. if($flash){
  6. $ftitle['success']="Operacja zakończona powodzeniem";
  7. $ftitle['error']="Wystąpiły błędy";
  8.  
  9. echo '<script type="text/javascript">
  10. $(function() {
  11. $("#dialog").dialog({
  12. bgiframe: true,
  13. modal: true,
  14. autoOpen: true,
  15. width: 400,
  16. buttons: { "Ok": function() { $(this).dialog("close"); } }
  17. });
  18. });
  19. </script>
  20. ';
  21.  
  22. }
  23.  
  24. <div id="dialog" title="'.$ftitle[$flash['type']].'"> // linia 146
  25. '.$flash['content'].'
  26. </div>
  27. ';
  28.  
  29.  
  30. ?>
  31. </body>
  32. </html>


Jeszcze pod strona jak przesunę scrool w dół to jest 1 zawiaomienie, którego wcześniej nie widziałem:
Notice: Undefined variable: ftitle in C:\xampp\htdocs\Sklep_jubilerski\app\views\layouts\default\admin.php on line 146
Tyczy się kou PHP powyżej.

Proszę o pomoc
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.