• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błędy na stronie :c

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
646 wizyt
pytanie zadane 6 sierpnia 2015 w PHP przez Wiiiciu Obywatel (1,110 p.)

Hej!

Na stronie wywala mi błędy:

Notice: Undefined index: action in /Applications/XAMPP/xamppfiles/htdocs/strona/sklep/index.php on line 78

Notice: Undefined index: buy in /Applications/XAMPP/xamppfiles/htdocs/strona/sklep/index.php on line 79

Notice: Undefined index: data in /Applications/XAMPP/xamppfiles/htdocs/strona/sklep/index.php on line 80

index.php (2,3,4 linijka to 78,79,80 w kodzie)

<?php 
						$action = $_GET['action'];
						$buy = $_GET['buy'];
						$data = $_GET['data'];
			
						if(!empty($action)) {
							if(!empty($buy)) {
								if(is_file("uslugi/$buy.php")) include "uslugi/$buy.php";
								else echo "<br />Nie odnaleziono takiej strony!";
							} elseif(!empty($data)) {
								if(is_file("admin/$data.php")) include "admin/$data.php";
								else echo "<br />Nie odnaleziono takiej strony!";
							} elseif(!empty($action)) {
								if(is_file("page/$action.php")) include "page/$action.php";
								else echo "<br />Nie odnaleziono takiej strony!";
							}
						} else include "include/shop.php";
					?>

 

Dodam że pracuje na xampp na macu. Jak usunąc lub ukryć te błędy bo przeszkadzają mi w pracy :)

2 odpowiedzi

+1 głos
odpowiedź 6 sierpnia 2015 przez Arkadiusz Waluk Ekspert (290,250 p.)
wybrane 7 sierpnia 2015 przez Wiiiciu
 
Najlepsza

lub ukryć te błędy

Lepiej błędów nie ukrywać a zobaczyć i naprawić ;) 

Tutaj akurat nie jest to nic poważnego, jakbyś ukrył to też nic by się nie stało bo to tylko ostrzeżenia. Ale i tak uważam że należy je poprawić więc do rzeczy - oznaczają one że takie indeksy tablicy $_GET jak action, buy i data nie istnieją. Czyli prościej mówiąc odbierasz jakieś parametry przez GET (z linka) a teraz pewnie ich nie podałeś i stąd ten błąd. Aby temu zaradzić proponuję najpierw sprawdzić czy te indeksy istnieją i jeśli tak to pobrać ich wartości a jeśli nie to ustawić wartość tych zmiennych na nic.

if(isset($_GET['action'])) $action = $_GET['action']; else $action='';
if(isset($_GET['buy'])) $buy = $_GET['buy']; else $buy='';
if(isset($_GET['data'])) $data = $_GET['data']; else $data='';
komentarz 6 sierpnia 2015 przez efiku Szeryf (75,160 p.)

@Arkadiusz. 
Popraw może na wyrażenie warunkowe to będzie czytelniej ;) niż te ify.. 
Na produkcji lepiej błędy wyłączyć, ale logować do pliku IMHO.
A co mi tam, opakuj $_GET w ArrayObject! Ha! :D

Notice to błąd o którym jeszcze nie wiesz, że istnieje ( ͡° ͜ʖ ͡°)

komentarz 6 sierpnia 2015 przez Wiiiciu Obywatel (1,110 p.)

jesteś wielki! nie zauważyłem że jest jeszcze jeden:

Notice: Undefined index: svr_id in /Applications/XAMPP/xamppfiles/htdocs/Strona/sklep/include/shop.php on line 24
<?php

	require("include/config.php");
	//Połączenie z mysql i wybranie bazy
	$link = mysql_connect("$dbhost", "$dbuser", "$dbpassword");
	mysql_query("SET NAMES utf8");
	mysql_select_db("$baza", $link);
	
	

	$sql     = "Select * from sms_shop ORDER BY id ASC";

	//Pobranie odpowieniej paczki
	
	$result = mysql_query($sql, $link);

	while ($row = mysql_fetch_array($result)) {  
		$id     	= $row['id'];
		$bgcol  	= $row['color'];
		$nazwa    	= $row['name'];
		$opis		= $row['description'];
		$cena 		= $row['sms_price'];
		$cur 		= "PLN";
		$svr_id		= $row['svr_id'];
		$znizka		= $row['discount'];
		$nrsms		= $row['sms_numer'];
		$trescsms   = $row['sms_tresc'];
		$csms		= $row['sms_price'];

?> 

 

komentarz 6 sierpnia 2015 przez Arkadiusz Waluk Ekspert (290,250 p.)
@efik Już Comenadeer mnie uzupełnił więc daruję sobie poprawianie ;)

Ja pracując na localhoście (a kolega pytający właśnie tak pracuje) błędów nie wyłączam bo po co? Jeśli coś jest to niech mi sypnie od razu, to i od razu poprawiam i problem z głowy.

@Wiiiciu o matko... Zapomnij o funkcjach z mysql_*, zmień je chociaż na mysqli a najlepiej na PDO. A ten błąd to jak rozumiem przy przypisaniu wartości pobranych z bazy? Jeśli tak to pewnie nie jest pobierana wartość tej kolumny (może wcale takiej nie masz w bazie?) i dlatego daje znać że nie ma takiego indeksu w tablicy.
komentarz 6 sierpnia 2015 przez Wiiiciu Obywatel (1,110 p.)
wielkie dzięki za pomoc tobie jak i wszystkim udzielającym się w tym poście :)
komentarz 6 sierpnia 2015 przez efiku Szeryf (75,160 p.)
Tak, na dev błędy on, myślałem, że to gdzieś później wysyła na prod. :)
Arkadiusz, TDD powinno Ci powiedzieć czy coś Ci sypnie czy nie :>
Tak PDO to byłoby najlepsze wyjście.
Hmm ale czy jest sens robić tyle zmiennych? nie lepiej już tablicę wyciagać?
komentarz 6 sierpnia 2015 przez Arkadiusz Waluk Ekspert (290,250 p.)
@Wiiiciu no nie ma sprawy, ale funkcje z mysql_ radzę na prawdę porzucić jeśli jeszcze tego nie zrobiłeś ;)

@efik No nie wiem, z tego co wnioskuję to kolega pisze tylko na localhoście więc wtedy nie widzę problemu. Mi pisząc na localhoście tak jest dobrze, że jak piszę to dostaję od razu wszystkie ewentualne błędy na ekran, od razu poprawiam i dalej do przodu ;) Myślę że tablica była by w zupełności wystarczająca, skoro i tak już mamy te dane raz w pamięci w tablicy to nie widzę sensu żeby przepisywać je do zmiennych no ale nie wiem, niech Wiiiciu powie Ci co o tym sądzi :)
komentarz 6 sierpnia 2015 przez Wiiiciu Obywatel (1,110 p.)

jeszcze jeden, no tym razem to już chyba błąd :o

Fatal error: Call to a member function fetch_assoc() on boolean in /Applications/XAMPP/xamppfiles/htdocs/Strona/strony/bany.php on line 41
<?php while($row = $retval->fetch_assoc()) {
    if($row['banner'] == null) {
        $row['banner'] = 'Console';
    }
    // <<-----------------Ban Date Converter------------>> //
    $timeEpoch = $row['time'];
    $timeConvert = $timeEpoch / 1000;
    $timeResult = date('F j, Y, g:i a', $timeConvert);
    // <<-----------------Expiration Time Converter------------>> //
    $expiresEpoch = $row['expires'];
    $expiresConvert = $expiresEpoch / 1000;
    $expiresResult = date('F j, Y, g:i a', $expiresConvert);
    ?>

linijka 1 to 41 w kodzie

komentarz 7 sierpnia 2015 przez Arkadiusz Waluk Ekspert (290,250 p.)
Tak, tym razem to już poważny error. Prawdopodobnie masz jakiś błąd w zapytaniu, które nic nie zwraca, przez co fetch_assoc nie ma co robić, przez co wywala błąd :) Sprawdź czy w zapytaniu nie ma żadnej literówki, czy wszystkie kolumny w bazie są itd.
komentarz 7 sierpnia 2015 przez Wiiiciu Obywatel (1,110 p.)
jak to rozwiązać?
komentarz 7 sierpnia 2015 przez Arkadiusz Waluk Ekspert (290,250 p.)
Tak jak napisałem w komentarzu powyżej:

Sprawdź czy w zapytaniu nie ma żadnej literówki, czy wszystkie kolumny w bazie są itd.
0 głosów
odpowiedź 6 sierpnia 2015 przez Comandeer Guru (607,060 p.)

Zacznijmy od tego, że notice to nie błąd. To uwaga, że piszesz kod, który nie jest tak dobry, jak mógłby być

$action = $_GET['action'];

Czemu rzuca błędem? Bo z góry zakładasz, że ktoś coś posłał przez $_GET. A jak nie posłał, to kod próbuje operować na wartości, która nie istnieje. Bardziej rygorystyczne języki już by wywaliły wyjątek. PHP jedynie kulturalnie informuje, że coś prawdopodobnie jest nie w porządku.

Więc wypada zmienić to na porządny kod:

$action = isset($_GET['action']) ? $_GET['action'] : null;

//lub
if(isset($_GET['action']))
    $action = $_GET['action'];
else
    $action = null;

BTW wkładanie tak nieprzefiltrowanych zmiennych do kodu naraża Cię na atak LFI: https://en.wikipedia.org/wiki/File_inclusion_vulnerability#Local_File_Inclusion

komentarz 6 sierpnia 2015 przez Wiiiciu Obywatel (1,110 p.)
wielkie dzięki za ostrzeżenie, lecz użyłem już sposobu wyżej :)

Podobne pytania

0 głosów
1 odpowiedź 358 wizyt
pytanie zadane 23 lipca 2016 w PHP przez mus Użytkownik (700 p.)
0 głosów
1 odpowiedź 699 wizyt
pytanie zadane 27 kwietnia 2016 w PHP przez GaCeL Dyskutant (7,500 p.)
0 głosów
1 odpowiedź 321 wizyt
pytanie zadane 5 lutego 2020 w Systemy operacyjne, programy przez Marjoood Nowicjusz (120 p.)

93,443 zapytań

142,434 odpowiedzi

322,691 komentarzy

62,805 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...