Warning: count(): Parameter must be an array or an object that implements Countable in /home/pasokime/domains/mysql.lt/public_html/forumas/include/parser.php on line 820

Topic: header already sent by

Taigi turiu login scrptuka.

<?php 
require_once "config.php";
if(isset($_COOKIE['username']) || $_COOKIE['password']){ 
if ($username == $usernames && $password == $passwords){ 
echo "<meta http-equiv='refresh' content='0;url=index.php'>"; 
} 
} 

if(isset($_POST['submit'])){ 

$username = $_POST['username']; 
$password = $_POST['password']; 
if ($username == $usernames && $password == $passwords){ 
setcookie("username", $username, time()+3600, "/"); 
setcookie("password", $password, time()+3600, "/"); 
echo "<meta http-equiv='refresh' content='0;url=index.php'>"; 
} 
else { 
echo 'Neteisigi Duomenys'; 
} 
} 
else { 
if(!isset($_COOKIE['username'])){ 
echo '<form action="" method="POST">'; 
echo 'Username:<br><input name="username" type="text"><br />'; 
echo 'Password:<br><input name="password" type="password"><br />'; 
echo '<input name="submit" type="submit" value="Jungtis"><br />'; 
echo '</form>'; 
} 
}
mysql_close($db)
?>

tarp config yra tik mysql prisijungimas ir keletas funkciju.
Ir kodel kai idedu i hosta ir bandau prisijungt meta tokia klaida:

Warning: Cannot modify header information - headers already sent by (output started at /home/avice/domains/avice.us.lt/public_html/naujienos/login.php:2) in /home/avice/domains/avice.us.lt/public_html/naujienos/login.php on line 20

tik su sesija prisijunge o su cookies ne? kodel taip?
o kai ant pc paleidau hosta ir ismeginau. Buvo viskas gerai prisijungia su cookies be jokiu klaidu.
o kai idedu login.php hoste i pagrindini aplanka public_html prisijungia gerai. Kame beda?

Re: header already sent by

dabar zinau del ko neprijunge isemus include ir normaliai irasius kodus tik tada gerai veikia script.
Kaip dar galima importuot faila?

Re: header already sent by

Tai pamėgink išsiversti error pranešimą, jame parašyta kas negerai (parašyta net kur).
Iš esmės pirma susitvarkai su headeriais ir tik tada atiduodi turinį naršyklei, jei sumaišai ką nors gauni tokią klaidą. Taip programuoti yra tikrai blogai, išvedinėji bet ką bet kur, veikimo logika kartu su atvaizdavimu... Jei logiką atskirsi nuo atvaizdavimo - sutaupysi daug laiko ir nervų, bei išvengsi panašių klaidų.

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: header already sent by

jau susitvarkiau sitas klaidas.
Ir dar vienas klausimas ar si prisijungima saugu naudoti?
Jei ne tai kokias apsaugas det?

Re: header already sent by

Avice wrote:

Ir dar vienas klausimas ar si prisijungima saugu naudoti?
Jei ne tai kokias apsaugas det?

Reikia ne "apsaugas dėti", o programuoti, kaip priklauso. Tiesiog reikia skaityti dokumentaciją ir domėtis.

Iš to kodo, kurį pateikei, visko nesimato, bet panašu, šiek tiek "prigrybavai". Gal gali pateikti šaltinį, kuriuo remdamasis darei tokį "prisijungimą"?

Re: header already sent by

ir jei aš pats susikurčiau sausainius 'username' ir 'password' su bet kokiu turiniu - jau būčiau prisijungęs :)

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: header already sent by

zygis wrote:

ir jei aš pats susikurčiau sausainius 'username' ir 'password' su bet kokiu turiniu - jau būčiau prisijungęs :)

Neaišku, tos vietos, kuri tikrina cookie'us dabar dar nesimato (-; bet panašu, kad visko gali būt...

Re: header already sent by

ne tarp config.php yra:

$usernames = "demo";
$passwords = "demo";

taip kad su betkokiu neieitum
ir dar toki esu pasidares:

<?php
function admin() {
if($_COOKIE['username'] == $usernames && $_COOKIE['password'] == $passwords) {
return 0;
} else { return 1 ;
}
}
?>

Re: header already sent by

Dar neaišku, kaip tu tą funkciją admin() naudoji.

Nežiūrint to, vistiek laikyti cookie'yje username ir password yra bloga mintis. Laikant vien sesijos ID, pavogus cookie'į galima padaryti mažiau žalos negu gavus vartotojo vardą ir slaptažodį.

Re: header already sent by

tai kaip apsaugot?
ir kokiu dar yra budu ?
kaip nors su SESSION gal imanoma?

11 (edited by zygis 2010-12-28 14:47:09)

Re: header already sent by

Tik su SESSION ir daroma... startuok sesiją ir visur $_COOKIE pakeisk į $_SESSION ir viskas.
Na dar setcookie("username", $username, time()+3600, "/");  pakeisti reiks.
Tačiau toks "pataisymas" labai jau "quick and dirty"...

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: header already sent by

SESSION iš principo yra paremtas ant COOKIE. Tik veikia taip, kad vartotojui į cookie'į įrašomas sesijos id (hash), o duomenys saugomi serveryje.

Kitas dalykas yra tas, kad pas tave aplamai programa turi būti parašyta taip, kad jos negalėtų kažkas "nulaužti/apeiti" net ir gavus jos išeities teksus (kodus).

Prieš mokinantis programuoti su PHP reikia aplamai išmokti programuoti, domėtis web technologijomis ir nebijoti skaityti bent jau dokumentacijos.

Avice: http://www.php.net/manual/en/security.php

13 (edited by Avice 2010-12-28 17:42:10)

Re: header already sent by

nu aiq. susiradau sioki toki scripta.
ir dabar dar 1 problema is html fomos

<form method='GET' action='?admin=delete&ids=".$row['ids']."'><input  name='delete' type='image' src='http://svn.silverstripe.com/open/modules/cms/trunk/images/delete-small.gif' width='10' height='10' onClick=\"return del()\"></form>

ir kas per nesamone kodel isiuntus gaunu toki adresa:
?delete.x=9&delete.y=1
prie ko tas x ir y ? ir kiti?
nors tureciau gaut ?admin=delete&id=9

Re: header already sent by

Avice wrote:

ir kas per nesamone kodel isiuntus gaunu toki adresa:
?delete.x=9&delete.y=1
prie ko tas x ir y ? ir kiti?
nors tureciau gaut ?admin=delete&id=9

Dokumentacija sako, kad viskas čia teisingai.

15 (edited by Avice 2010-12-29 10:58:07)

Re: header already sent by

na aiq.
dabar noriu apsaugot logina ir susiradau tokia funkcija:

function page_protect() {
session_start();
if (isset($_SESSION['HTTP_USER_AGENT']))
{
    if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT']))
    {
       Atsijungimo funkcija
        exit;
    }
}
}

ir kurdamas sesija idesiu toki $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
ar tai kaip nors apsaugos?

Re: header already sent by

Ar ne tvarkingiau būtų kurti naujus postus o ne į vieną visus klausimus supilti?

No warning? No action? I hate this situation!

Re: header already sent by

Avice turi daugiau pasigilint programavimo žinias (-;

Per forumus tokių, kas 5 min. atsirandančių, klausimų niekas nesprendžia, todėl tokios temos ir yra pavienės ir greitai numirštančios... (-;

Re: header already sent by

Dar vienas klausimelis smulkus:
Yra 2 funkcijos:

function lenta($pavadinimas)
  {
  echo "
  <div class='content'>
  <h1>".$pavadinimas."</hl>";
  }
  function uzdalenta()
  {
echo "</div>";
  }

ir eval kodas:

    lenta($row['pav']); 
eval("?>".stripslashes($row['tekstas'])."<?php ");    
    uzdalenta();

Ir kodel eval kodas isiterpia i lentos funkcija? Nu pvz atvaizdavus gaunu taip:

<div class='content'>
  <h1>Testas[Kodas]</hl></div>

o turetu buti taip:

<div class='content'>
  <h1>Testas</hl>[Kodas]</div>

Kame problema nesuprantu.

Re: header already sent by

funkcijos "eval" reiktų vengti, geriau išvis jos nenaudoti. Ar ne paprasčiau būtų turėti du .php? vienam apdoroji info kitam atvaizduoti?

informacija apdoroji A.php:

function getPavadinimas(){
// gauni iš kažkur pavadinimą
return $pavadinimas;
}

informacija atvaizduoji B.php:

<div class='content'>
<h1><?php echo getPavadinimas();?></hl>
</div>
No warning? No action? I hate this situation!

Re: header already sent by

Is vis siulyciau pasimokinti veikimo logika atskirti nuo atvaizdavimu (rekomenduoju pasidometi kas yra MVC)