PHP - if

Programovacie jazyky, rady, poradňa...
Nosferatu
Medium Expert
Medium Expert
Príspevky: 127
Registrovaný: 24 máj 2005, 8:50

Príspevok od používateľa Nosferatu »

ppt napísal:Neexistuje nejaka funkcia, ktora otvori nejaku stranku?
Potrebujem nieco take:
if ($a==$b){otvorenie stranky index.php};
header("Location: www.stranka.sk");
ppt
Darca
Darca
Používateľov profilový obrázok
Príspevky: 1920
Registrovaný: 27 máj 2006, 11:24
Kontaktovať používateľa:

Príspevok od používateľa ppt »

Nosferatu napísal:header("Location: www.stranka.sk");
Ano, diky. Len ja potrebujem nejaku inu funkciu. Pretoze tuto mozem pouzit len na zaciatku scriptu (v hlavicke). Ja mam tento if niekde v strede zdrojaku...
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

ppt napísal:Ano, diky. Len ja potrebujem nejaku inu funkciu. Pretoze tuto mozem pouzit len na zaciatku scriptu (v hlavicke). Ja mam tento if niekde v strede zdrojaku...
no skus sem dat ten zdrojak ci by sa to nedalo dat niekde na zaciatok.
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

ppt napísal:Ano, diky. Len ja potrebujem nejaku inu funkciu. Pretoze tuto mozem pouzit len na zaciatku scriptu (v hlavicke). Ja mam tento if niekde v strede zdrojaku...
tak puozi Output buffer ...

na zaciatku stranky zavolaj

Kód: Vybrať všetko

ob_start();
a na konci

Kód: Vybrať všetko

ob_end_flush();
to ti pozdrzi vystup (kym nezavolas ob_end_flush() ) ... ale hlavicky odosle ....
ppt
Darca
Darca
Používateľov profilový obrázok
Príspevky: 1920
Registrovaný: 27 máj 2006, 11:24
Kontaktovať používateľa:

Príspevok od používateľa ppt »

mastermind napísal:no skus sem dat ten zdrojak ci by sa to nedalo dat niekde na zaciatok.
<html>
<head><title>Prihlásiť</title>
<body>
<?
$login = ((IsSet($_POST["login"]))?$_POST["login"]:0 );
$pass = ((IsSet($_POST["pass"]))?$_POST["pass"]:0 );

mysql_connect("localhost","login","heslo");
$result=mysql("databaza","select * from users");
mysql_close();

$pocet=mysql_NumRows($result);
$i=0;
while ($i<$pocet):
if (mysql_result($result,$i,"login")==$login){
if (mysql_result($result,$i,"heslo")==$pass): echo "Správne meno aj heslo...";
else: echo "Nesprávne heslo!";
endif;

$i=$pocet;

$i++;
endwhile;
?>
</body>
</html>
Takze namiesto: echo "Správne meno aj heslo..."; potrebujem dat ten odkaz na druhu stranku. Vlastne ono by sa to aj mohlo urobit tak, aby to bolo na zaciatku (predpokladam), ale do buducnosti by som sa chcel naucit aj iny sposob. S tym output buffer-om sa to da ako presnejsie pouzit? Co mam kde napisat? Dakujem
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

po prve .... chyba ti tam zatvorka } (k tej {)
po druhe ... $i=$pocet; je akoze co???

po tretie .... ten vypis ti je na dve veci .... pretoze ked pouzijes Header() tak ta presmeruje okamzite a nic neuvidis .... teda tam nedavaj ziadne html (ziadne <html><head><body> atd), cisto len php a pri spravnom mene+hesle to presmeruj tam kam chces a pri zlom na nejaku error page kde mu napises ze "zle udaje"


po stvrte .... ten output buffer sa pouziva presne tak ako som napisal
ppt
Darca
Darca
Používateľov profilový obrázok
Príspevky: 1920
Registrovaný: 27 máj 2006, 11:24
Kontaktovať používateľa:

Príspevok od používateľa ppt »

gwixt napísal:po prve .... chyba ti tam zatvorka } (k tej {)
po druhe ... $i=$pocet; je akoze co???

po tretie .... ten vypis ti je na dve veci .... pretoze ked pouzijes Header() tak ta presmeruje okamzite a nic neuvidis .... teda tam nedavaj ziadne html (ziadne <html><head><body> atd), cisto len php a pri spravnom mene+hesle to presmeruj tam kam chces a pri zlom na nejaku error page kde mu napises ze "zle udaje"


po stvrte .... ten output buffer sa pouziva presne tak ako som napisal
1. ta zatvorka-} neviem, ako sa mi to mohlo stat, ale mi pri prekopirovani nejako zmizla. Asi, ked som upravoval mysql_connect() (aby tam neboli vsetky hesla).

2. Kedze som zaciatocnik v php (v c som nerobil vobec), tak $i=$pocet som tam dal preto, aby sa cyklus while skoncil hned, ked sa najde v databaze premenna login. Neviem ako sa to dalo spravit inac, tak ma napadlo toto.

3. OK, html tagy tam nedam. Zase ale nestaci mi tam dat miesto toho hrubo vypisaneho echa Header? Vtedy by ma pri spravnom zadani preplo na tu stranku a pri zlom(ci uz heslo alebo login) by sa mi vypisala chyba.

4. Nevedel som presne, kde to treba napisat, ale zatial to netreba. Ak by trebalo, tak to napisem.

Zatial dakujem gwixt. :wink:
ppt
Darca
Darca
Používateľov profilový obrázok
Príspevky: 1920
Registrovaný: 27 máj 2006, 11:24
Kontaktovať používateľa:

Príspevok od používateľa ppt »

Zmenil som to teraz takto:
<?
$login = ((IsSet($_POST["login"]))?$_POST["login"]:0 );
$pass = ((IsSet($_POST["pass"]))?$_POST["pass"]:0 );

mysql_connect("localhost","login","heslo");
$result=mysql("databaza","select * from users");
mysql_close();

$pocet=mysql_NumRows($result);
$i=0;
while ($i<$pocet):
if (mysql_result($result,$i,"login")==$login){
if (mysql_result($result,$i,"heslo")==$pass): header("Location: index.php");
else: header("Location: chyba.php");
endif;
$i=$pocet;
}
$i++;
endwhile;
?>
A vypisuje mi zase tu chybu s hlavickou. Co tam špatí, pls?
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

no vadit mu moze to ze php predtym vyhlasi nejaku chybu ... to je tiez vystup

napisem ti to ako by som toto tvoje robil ja :)

Kód: Vybrať všetko

<? 
$login = ((IsSet($_POST["login"]))?$_POST["login"]:0 ); 
$pass = ((IsSet($_POST["pass"]))?$_POST["pass"]:0 ); 

if ($login && $pass)
{
mysql_connect("localhost","login","heslo"); 
$result=mysql("databaza","select * from users") or die("query nepreslo"); 
mysql_close(); 

$pocet=mysql_NumRows($result); 
$i=0; 

while($line=mysql_fetch_array($result,MYSQL_BOTH)) 
{ 
  if ($line["login"]==$login)
  { 
     if ($line["heslo"]==$pass)  header("Location: index.php"); 
     else                                  header("Location: chyba.php"); 

     break; // namiesto $i=$pocet; 
  } 
}

}
else      header("Location: chyba.php"); 
?>
a ako to naozaj robim :) (to len pre inspiraciu)

Kód: Vybrať všetko

<? 
$login = ((IsSet($_POST["login"]))?$_POST["login"]:0 ); 
$pass = ((IsSet($_POST["pass"]))?$_POST["pass"]:0 ); 

if ($login && $pass)
{
   //tu je nejaky connect na DB
   $query = 'SELECT * FROM `user` WHERE login=\''.$login.'\' AND heslo=\''.$pass.'\'';
   $result = mysql_query($query)
                         or die("Query nepreslo");

   if (mysql_num_rows($result) != 0 )
            header("Location: index.php"); 
   else
            header("Location: chyba.php"); 

   mysql_free_result($result);
   mysql_close(); 

}
else      
   header("Location: chyba.php"); 
?>
btw to $i=$pocet; uz dava zmysel ale bez tej zatvorky nedavalo :wink: .... na ukoncenie cyklu sa pouziva break; (na skocenie na koniec aktualneho behu cyklu continue; .... to len tak naokraj)
ppt
Darca
Darca
Používateľov profilový obrázok
Príspevky: 1920
Registrovaný: 27 máj 2006, 11:24
Kontaktovať používateľa:

Príspevok od používateľa ppt »

OK, ide to diky (neviem, uz po kolky raz :oops: ). Len preco vypisalo tu chybu mne... Pokial som tam mal tie echa, tak to slo. Ked som to ale vymenil za header(), tak to skoncilo. :(
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

to gwixt: nie ze by bol ten tvoj skript zly to nie, ale co ked niekto do pass zada nieco taketo

Kód: Vybrať všetko

blbost' or 'x'='x
skript vrati cislo ktore je rovne poctu uzivatelov, to je rozne od nuly a teda sa dostane na stranku aj bez toho aby vedel meno a heslo. :wink:
Nosferatu
Medium Expert
Medium Expert
Príspevky: 127
Registrovaný: 24 máj 2005, 8:50

Príspevok od používateľa Nosferatu »

bezpečnejšie je asi prejsť každého užívateľa a porovnať poslané údaje s údajmi v db..
takéto vyrábky sú dobré známe a hockto ti obíde celý zložitý systém takouto malou prihlasovacou chybyčkou ,)
ppt
Darca
Darca
Používateľov profilový obrázok
Príspevky: 1920
Registrovaný: 27 máj 2006, 11:24
Kontaktovať používateľa:

Príspevok od používateľa ppt »

Teraz vas nechapem. O aku chybu ide? Na tej stranke, na ktorej pracujem zase nie je az tak dolezita bezpecnost. Ale aby som pri inych projektoch vedel, o co ide.

K tomu header(): Neda sa miesto toho pouzit nejaky iny html tag podobny <a href>, ktory automaticky prepne na inu stranku? Existuju napr. stranky, ktore automaticky po nejakom case prepnu na inu stranu. Alebo to je javascript?
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

da sa pouzit nejaky meta tag. uz to tu na fore bolo takze nepisem to znova.
a v com bola chyba v tom skripte? no select do databazy bol opvlyvneny tym co zadal uzivatel. takze ak zadal to co som napisal, tak select vratil vsetkych prihlasenych uzivatelov a tym obisiel prihlasovaci skript. taka blbost, da sa to jednoducho opravit....
add to nosferatu: nie je dobre prejst vsetkych uzivatelov, je to neefektivne. mozme predpokladat, ze uzivatelske meno je unikatne. takze vyberieme len heslo podla mena a porovname. alebo sa na to da pouzit hash. zahashujes vstup a tak urobis select.
ppt
Darca
Darca
Používateľov profilový obrázok
Príspevky: 1920
Registrovaný: 27 máj 2006, 11:24
Kontaktovať používateľa:

Príspevok od používateľa ppt »

Akym sposobom sa da poslat premenna napr. $prem do inej stranky? (napr. cez formular) Ake su este sposoby?
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

premenu mozes poslat cez url, post, session, cookie. z formulara len get a post.
ppt
Darca
Darca
Používateľov profilový obrázok
Príspevky: 1920
Registrovaný: 27 máj 2006, 11:24
Kontaktovať používateľa:

Príspevok od používateľa ppt »

mastermind napísal:premenu mozes poslat cez url, post, session, cookie. z formulara len get a post.
OK, dakujem. :wink:
ppt
Darca
Darca
Používateľov profilový obrázok
Príspevky: 1920
Registrovaný: 27 máj 2006, 11:24
Kontaktovať používateľa:

Príspevok od používateľa ppt »

mastermind napísal:premenu mozes poslat cez url, post, session, cookie. z formulara len get a post.
A mohol by si mi prosim ta napisat nejaky jednoduchy skriptik? Cize ak mam v stranke prva.php ulozenu premennu $cislo a potrebujem ju dostat do stranky druha.php. Co ma byt ulozene v prva.php a druha.php? Je to jedno, ked je prechod z prva.php do druha.php cez <a href> alebo location()?
Nosferatu
Medium Expert
Medium Expert
Príspevky: 127
Registrovaný: 24 máj 2005, 8:50

Príspevok od používateľa Nosferatu »

premennú cez get pošleš jednoducho..

Kód: Vybrať všetko

<?
//prva.php
$cislo="123";
echo ("<a href=\"druha.php/?cislo=".$cislo."\" target=\"_parent\">Prepni</a>
?>

Kód: Vybrať všetko

<?
//druha.php
if(!empty($_GET["cislo"]))
 {
  $cislo=$_GET["cislo"]
  echo $cislo;
 }
?>
..niekedy je dobré keď niečo posielaš cez get zakódovať, stačí base64 abo niečo podobné aby sa ti to nedoondilo..
premennú cez post rovnako, sic trochu inak..

Kód: Vybrať všetko

<?
//prva.php
$cislo="123";
?>
<form method="post" action="druha.php">
 <input  type="hidden" name="cislo" value="<? echo $cislo;?>">
 <input type="submit" value="Prepni">
</form>
<?
?>

Kód: Vybrať všetko

<?
//druha.php
if(!empty($_POST["cislo"]))
 {
  $cislo=$_POST["cislo"]
  echo $cislo;
 }
?>
ak si cel niečo iné, tak sry :roll:
ppt
Darca
Darca
Používateľov profilový obrázok
Príspevky: 1920
Registrovaný: 27 máj 2006, 11:24
Kontaktovať používateľa:

Príspevok od používateľa ppt »

Moze byt aj to, diky. Ale neexistuje este nieco, aby tie premenne zostali v pamati dlhsie? Napr. az do vypnutia stranky? To session je co?
Napísať odpoveď