[php] Dziwny problem z funkcja include.

0

Mozna powiedziec ze troszke zglupialem teraz.
Kiedys mialem programik w php i jakies tam menu,strukture miala taka:

Plik main.php ze struktura:

switch($etap)
{
case '1':
          include("1.php");
          break;
case '2':
          include("2.php");
          break;
case '3':
          include("3.php");
          break;
case '4':
          include("4.php");
          break;
}

Klikalem na menu i np w menu byl link: main.php?etap=2 i wczytywala sie do main.php stronka 2.php.

teraz robie drugi program , zapodalem sobie to samo menu i mam teraz taki numer ze jak klikam to wcale ten include mi pliku nie wczytuje, jezeli wpisze nazwe pliku ktorej nie ma to wtedy mi wywala błąd, ale jak wpisze plik ktory jest to nie laduje pomimo ze w pasku adresu jest adres dobry, dopiero jak wejde w pasek adresu i klikne enter to zaladuje hmmmm co to moze byc ?

0
  1. Wytłumacz jaśniej, coś nie bardzo rozumiem z Twojego tłumaczenia
  2. Jakie błędy
  3. jeśli chcesz tego, którego nie ma żeby nie wywalało błędu, użyj default: ...
  4. nie polegaj na register_globals - switch($_GET['etap'])
0

Tłumacze inaczej :-)

Wiec w domu wszystko mi dziala, wrzucilem na serwerek dziala a na 3 kompach w pracy nie dziala teraz tlumacze co.

W menu odwoluje sie do pliku main.php przez paramtery czyli np main.php?etap=1 lub main.php?etap=2 itd.... dalej mam switcha:

switch($etap)
{
case 1:
include("jakis_tam_plik.php");
break;
case 2:
include("jakis_tam_plik_2.php");
break;

}

I nie dziala mam na mysli ze jak klikne na menu to w pasku adresu jest dobry link bo np main.php?etap=1 ale strona sie nie wczyta jest cala biala. Dopiero jak klikne odswierz to sie wczyta, i potem znowu klikam na inne menu i jest to samo, dziala dopiero po kliknieciu odswierz. O co moze chodzic? W php.ini zapewne cos moze byc ionaczej ustawione np registers.globals ustawilem tak samo jak w domu ale tez niebardzo. Nie wiem w czym moze byc problem.

teraz sprawdzalem seskcje session w pliku php.ini i jest wszystko idento jak na kompie na ktorym wszystko dziala.

0

a error_reporting na E_ALL i powiedz czy i co się wyświetla

0

Nic sie nie wyswietla , skrypt sie tak zachowyje jakby ta zmienna ktora jest przekazywana nie weszla ale dziwne bo jak dam oidswierz to zatrybi hmmmm moze rozna wersja php ? 4.4.4 dziala 4.3.9 - nie dziala , ale nie wiem czy to o to chodzi bez sensu

Przez przypadek znalazlem co powoduje "blad" ale nie wiem czemu, mianowicie linijka:

<META http-equiv="Content-Type" content="text/html; charset=iso-8859-2">

przed switchem. Jak linia jest to nie laduje sie a jak wywale to chodzi ale czemu.

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </head> <body> switch($etap) { case 1: include("jakis_tam_plik.php"); break; case 2: include("jakis_tam_plik_2.php"); break;

}

</body></html>
0

wyczyść cache bo to prawdopodobnie powód tego że widzisz różne wersje strony
a po drugie to:

switch($_GET['etap'])

jak już ktoś powiedział

0
Adamo napisał(a)

wyczyść cache bo to prawdopodobnie powód tego że widzisz różne wersje strony
a po drugie to:

switch($_GET['etap'])

jak już ktoś powiedział

Mam formularz metoda POST wiec dalem:

 switch($_POST['etap'])
 {
 ....
}

Ale tez nie trybi. Problem stanowi ta linijka z kodowaniem. Ale czemu?

Ale zaraz zaraz ja te dane nie wysylam z formy tylko z menu gdzie mam normalny link main.php?etap=lalalaa i tyle

0

No to jak masz w linku, no to GET, nie POST, czyli tak jak juz pisali wczesniej.

0
johny_bravo napisał(a)

No to jak masz w linku, no to GET, nie POST, czyli tak jak juz pisali wczesniej.

Racja :) co nie zmienia faktu ze dalej nie trybi , caly czas jest problem przez linie:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
0

pokaż więcej skryptu, może ty tą linię dałeś w znacznik <?php ;P // wyżej dałeś "więcej" skryptu ale tam w ogóle nie ma znaczników <?php ?> ...

0

na pewno przyczyna jest banalna, ale przy tak małej ilości kodu trudno powiedzieć :P

0
Adamo napisał(a)

pokaż więcej skryptu, może ty tą linię dałeś w znacznik <?php ;P // wyżej dałeś "więcej" skryptu ale tam w ogóle nie ma znaczników <?php ?> ...

Znaczniki w domysle wiadomno ze są, niew pisalbym gdyby to w ogóle nie dzialalo ale w chacie chodzi , na serwie chodzi a na innych kompach nie chodzi a przyczyna na pewno jest banalna.

0

no to miłego szukania

0

Wiem ze bez kodu nic nie poradzicie wiec zapodaje kod pliku main.php:

<?
ob_start();
session_start();
?>
<HTML>
<HEAD>
 <META http-equiv="Content-Type" content="text/html; charset=iso-8859-2">   // O TO LINIE CHODZI, JAK WYWALE TO DZIALA
  <link rel="stylesheet" href="style/style.css" type="text/css">
 </HEAD>
<BODY background=graf/tlo.jpg>
<?php
 include("functions.php");
 $link = @mysql_connect('localhost', $dbuser, $dbpass);
 @mysql_select_db($dbname);

 $id = @mysql_query("select timestampdiff(minute,time,NOW()),users.group,users_group.access_time,users.name, users.surname from users JOIN users_group ON users.group=users_group.group where users.login='$_SESSION[login]' ");
 $w = @mysql_fetch_array($id);

  if($w[group]!=0)  //wykonujemy jeżeli zalogował sie kto inny niż admin
  {
          if($w[0]>=$w[access_time])
               {
                   unset($_SESSION[login]);
               }
          else
               {
                   $ident = mysql_query("update users SET time=NOW() where login='$_SESSION[login]'");
               }
  }
if (!isset($_SESSION["login"]) ){
  header("Location: login.php");
 exit();

}

if(isset($_SESSION["log_group"]))
                   print "<SCRIPT language=JavaScript src=\"menu/menu_array_admin.js\" type=text/javascript></SCRIPT>";
else
                   print" <SCRIPT language=JavaScript src=\"menu/menu_array.js\" type=text/javascript></SCRIPT>";
?>

<SCRIPT language=JavaScript src="menu/mmenu.js" type=text/javascript></SCRIPT>
<?php


  print "<table  width=100%  bgcolor=#FFDEAF cellpadding=3 cellspacing=0>
  <tr><td style=font-size:9;color=#FFDEAF bgcolor=#C9966C height=40>Zalogowany: $w[name] $w[surname]</td></tr></table>";


 switch($etap)
 {

 case 'u_list':
                    include("admin.php");
                    break;

 case 'g_list':

                    include("logout.php") ;
                    break;
 case 'new_u':
                    include("new_u.php");
                    break;
                    
 case 'logout':
                    include("logout.php");
                    break;


 }

@mysql_close($link);
?>
</BODY>
</HTML>
<?
ob_end_flush();
?>

Oraz plik login.php z ktorego ten blad nastepuje:

<?php
include("functions.php");
if (isset($login) && isset($pass)){
  $link = @mysql_connect('localhost', $dbuser, $dbpass);
  @mysql_select_db($dbname);
  $login1 = mysql_real_escape_string($login);
  $pass1 = mysql_real_escape_string($pass);
  $ident = mysql_query("select * from users where login='$login1' AND pass=password('$pass1') AND access='1'");


  if (mysql_num_rows($ident)>0)
  {
    session_start();
    session_register("login");

    $w = mysql_fetch_array($ident);
    if($w[group]==0)
    {
    session_register("log_group");
    $_SESSION["log_group"] = $w[group];

    }
    $ident1 = mysql_query("update users SET time=NOW() where login='$_SESSION[login]'");
    mysql_close($link);
    header("Location: main.php");
    exit();
  } else
    $error = "<B>Błędny login lub hasło!</B><BR>";
} else
  $error = false;

?>
<HTML>
<HEAD>
  <TITLE>Logowanie</TITLE>
  <link rel="stylesheet" href="style/style.css" type="text/css">
</HEAD>
<BODY face=verdana>

  <table width=100% height=100% align=center ><tr><td align=center>
  <?php
  echo $error ? $error : "";
?>
  <table width=400 align=center  cellpadding=5 cellspacing=0 bgcolor=#FCC66F border='50' bordercolor='#F8DD9F' rules=none>
  <tr><td align=center><b>Logowanie do systemu</b><br>Proszę podać <b>login</b> i <b>hasło.</b></B></td></tr>
  <tr><td align=center><FORM method="POST" name=log>Login: <INPUT type="text" name="login"></td></tr>
  <tr><td align=center>Hasło: <INPUT type="password" name="pass"><BR> </td></tr>
  <tr><td align=center>  <INPUT type="submit" value="Zaloguj się"></td></tr>
  </FORM>
  </table>
  </td></tr></table>

  
 <script>document.log.login.focus();</script>

</BODY>
</HTML>

Tak to wyglada, teraz zauwazylem ze gdzies sie traca zmienne $w[name] $w[surname] po prostu sie nie wyswietlaja.
Zmiana pliku php.ini na ten z dzialajacego kompa tez nic nie daje.

0

podaj wersję php na kompie gdzie działa i gdzie nie działa
po co dajesz ob_start() ? ja nie wiem po co ale na chwilę to wywal bo ci może nie pokazywać ważnych błędów i wtedy powtórz to z error_reporting(E_ALL)

0

Stronka sie nie wladowala ale po odswierzeniu TAK i bledy:

Notice: Use of undefined constant group - assumed 'group' in c:\usr\apache\httpd\html\program\main.php on line 20

Notice: Undefined variable: etap in c:\usr\apache\httpd\html\program\main.php on line 62

Notice: Undefined variable: etap in c:\usr\apache\httpd\html\program\main.php on line 66

Notice: Undefined variable: etap in c:\usr\apache\httpd\html\program\main.php on line 70

Notice: Undefined variable: etap in c:\usr\apache\httpd\html\program\main.php on line 74

Pluje sie chyba ze nie zdefionowane pole group ale czemu constant i jak nie zdefiniowane zero tzn niezdefiniowane?.
Ponadto podczas logowania nie definiuje zmiennej etap , zaraz to naprawie i zobacze czy przez to.

0

chodzi o to $w[group], szuka stałej group, nie znajduje to wstawia w to miejsce 'group' - powinieneś ty to zrobić ale jeszcze przez chwilę php ci pozwoli tego nie robić

z tym undefined variable etap no to znowu chyba chodzi o $_GET['etap'] no ale nie wiem

0

Jak szuka stalej ?
Ja sobie ta zmienna wyciagam z bazy z zapytanie wiec hmmm nie kumam

mam przeciez: $w = mysql_fetch_array($ident);
a $ident to uchwyt do mysql_query

0

indeksy tablicy asocjacyjnej to liczba lub tekst. Tekst, nie stała. tekst w postaci ,,group`` zostanie zamieniony na wartosc stalej o tej nazwie. PHP nie znajdując stałej wstawiały jej nazwę. Dlatego do indeksów tablicy asocjacyjnej powinieneś się odwoływać przez $w['group'].

0

Dokladnie:)
Wszystko poprawione , teraz nie ma zadnych bledow.

Ale dalej problem jest , ze sie nie ładuje :-)

P.S.
Wersja php oraz mysqla idento jak na kompie na ktorym skrypt dziala prawidlowo.
Moze ustawienia IE kurcze bo juz nie wiem

1 użytkowników online, w tym zalogowanych: 0, gości: 1