[PHP] Include plików kończy się niepowodzeniem


(Piesek64) #1

Próbuję załączyć plik .php, który zawiera element head mojej strony. Problemem jest to, że poprawnie ładuje się na stronie głównej, ale już nie na podstronach. Nie, bo zawartość head jest ładowana do...body, przez co mam nieładny margines, a także mały bałagan. Co najlepsze, wcześniej wszystko działało. Jednak wcześniej, po dodaniu nawigacji i styli dla niej strona się wysypała.


(kalitt) #2

Może jakiś kod?


(Piesek64) #3

header.php

<?php require($_SERVER['DOCUMENT_ROOT'].'/config/login-config.php');?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="Description" content=""/>
<meta name="Keywords" content=""/>
<meta http-equiv="Content-Language" content="pl"/>
<meta name="Author" content="Py64"/>
<meta name="Robots" content="index, follow"/>
<title></title>
<link rel="Stylesheet" type="text/css" href="/static/css/style.css" />
<script src="/static/js/jquery-2.1.1.min.js"></script>
</head>
<body class="ns-default">
<header class="GlobalHeader">
<a href="/">...</a>
</header>
<div class="container">
<?php include('nav.php');?>
<div class="childs">

index.php

<?php
require($_SERVER['DOCUMENT_ROOT'].'/config/header.php');
if($_SESSION['logged'] == true){
echo '<script>location.href = "/loggedin/";</script>';
}
?>
<script>
$('body').addClass("special-MainPage");
</script>
<section>
<h1>...</h1>
<p>
...</p>
<p>
...
</p>
<p>
<button class="login" onclick="location.href = '/login.php'">Logowanie</button><button class="register" onclick="location.href = '/register.php'">Rejestracja</button>
</p>
</section>
<?php
require($_SERVER['DOCUMENT_ROOT'].'/config/footer.php');
?>

footer.php

</div>
</div>
<div class="footerseparator">&nbsp;</div>
<footer>
<div class="first">
<big><big><a href="/">...</a></big></big>
<br/>Copyright &copy; 2014<?php if(date(Y)!="2014")echo ' - '.date(Y);?> All rights reserved.
</div>
</footer>
</body>
</html>

nav.php

<?php if($_SESSION['logged']==true){?>
<nav class="container">
<table>
<tr>
<td>
<ol>
<li>
<a href="/loggedin/">Administrator</a>
</li>
<li>
<a href="/loggedin/users.php">Użytkownicy</a>
<ul>
<li>
<a href="/loggedin/watched.php">Śledzeni</a>
</li>
</ul>
</li>
<li>
<a href="/loggedin/chat" target="_blank">Czat</a>
</li>
</ol>
</td>
</tr>
</table>
</nav>
<?php }?>

entry.php

<?php
require($_SERVER['DOCUMENT_ROOT'].'/config/header.php');
if($_SESSION['logged'] == false){
echo '<script>location.href = "/";</script>';
}
db_connect();
$user_data = get_user_data();
?>
<script>$("body").addClass("special-Entry");$(document).ready(function(){$("iframe").remove();});</script>
<?php
if($user_data['language'] == 'polish') {
?>
<script> 
$(document).ready(function(){
// posted on
$.get("/profile/entryraw.php?id=208",function(data,status){
$('#PostedOn').prepend(data.replace('<p>', '').replace('</p>', ''));
});
});
</script>
<?php
} else {
?>
<script> 
$(document).ready(function(){
// posted on
$.get("/profile/entryraw.php?id=209",function(data,status){
$('#PostedOn').prepend(data.replace('<p>', '').replace('</p>', ''));
});
});
</script>
<?php
}
?>
<section>
<?php
include("connect.php");
$query = mysql_query("select * from wpisy where id='".(int)$_GET['id']."'"); // 1
$rekord = mysql_fetch_array($query);
$tresc = $rekord[4];
 
if($_GET['action'] != 'unparsed') {
$tresc = str_replace("#?#",'<a href="/profile/hashtag.php?tag=',$tresc);
$tresc = str_replace("#:",'">',$tresc);
$tresc = str_replace("#;",'</a>',$tresc);
$tresc = str_replace("#TECHNICALBLOG", '<a href="/profile/hashtag.php?tag=TECHNICALBLOG">#TECHNICALBLOG</a>', $tresc);
$tresc = str_replace("#EXPERIMENTALCHALLANGE", '<a href="/profile/hashtag.php?tag=EXPERIMENTALCHALLANGE">#EXPERIMENTALCHALLANGE</a>', $tresc);
$tresc = str_replace("#UNPARSED", '<script>window.location = "?action=unparsed&id='.$_GET['id'].'";</script>', $tresc);
}
 
 
echo '<h1>'.$rekord[1].'</h1><br/><span id="PostedOn">: '.$rekord[2].'</span><div>'.$tresc.'</div>'; // 2
if($user_data['user_groups'] == 'mod' || $user_data['user_groups'] == 'staff') {
echo '<button class="delete" onclick="location.href = \'sysop/delete.php?entry='.$_GET['id'].'\'">Usuń</button>';
}
?>
</section>
<?php
require($_SERVER['DOCUMENT_ROOT'].'/config/footer.php');
?>

/loggedin/ to przekierowanie do /profile/


(kalitt) #4

spróbuj użyć include_once na head.php


(Piesek64) #5

Nadal.


(GioWDS) #6

Podaj zawartość pliku "/config/login-config.php" bo mam wątpliwości co do tego, że jego działanie nie powoduje wysłania jakichś znaczków.


(Piesek64) #7

login-config.php:

<?php
// definiujemy dane do połączenia z bazą danych
define('DBHOST', '');
define('DBUSER', '');
define('DBPASS', '');
define('DBNAME', '');
 
function db_connect() {
    // połączenie z mysql
    mysql_connect(DBHOST, DBUSER, DBPASS) or die('<h2>ERROR</h2> MySQL Server is not responding');
 
    // wybór bazy danych
    mysql_select_db(DBNAME) or die('<h2>ERROR</h2> Cannot connect to specified database');
mysql_query("SET NAMES 'utf8'");
}
 
function db_close() {
    mysql_close();
}
 
function clear($text) {
    // jeśli serwer automatycznie dodaje slashe to je usuwamy
    if(get_magic_quotes_gpc()) {
        $text = stripslashes($text);
    }
    $text = trim($text); // usuwamy białe znaki na początku i na końcu
    $text = mysql_real_escape_string($text); // filtrujemy tekst aby zabezpieczyć się przed sql injection
    $text = htmlspecialchars($text); // dezaktywujemy kod html
    return $text;
}
 
function codepass($password) {
    // kodujemy hasło (losowe znaki można zmienić lub całkowicie usunąć
    return sha1(md5($password).'#!%Rgd64');
}
 
// funkcja na sprawdzanie czy user jest zalogowany, jeśli nie to wyświetlamy komunikat
function check_login() {
    if(!$_SESSION['logged']) {
        die('<script>location.href = "/";</script>');
    }
}
 
// funkcja na pobranie danych usera
function get_user_data($user_id = -1) {
    // jeśli nie podamy id usera to podstawiamy id aktualnie zalogowanego
    if($user_id == -1) {
        $user_id = $_SESSION['user_id'];
    }
    $result = mysql_query("SELECT * FROM `users` WHERE `user_id` = '{$user_id}' LIMIT 1");
    if(mysql_num_rows($result) == 0) {
        return false;
    }
    return mysql_fetch_assoc($result);
}
 
// startujemy sesje
session_start();
 
// jeśli nie ma jeszcze sesji "logged" i "user_id" to wypełniamy je domyślnymi danymi
if(!isset($_SESSION['logged'])) {
    $_SESSION['logged'] = false;
    $_SESSION['user_id'] = -1;
}
?>

(GioWDS) #8

Kod dokładnie obejrzę po pracy, ale na ten moment mam kilka uwag:

nav:

<?php if($_SESSION['logged']==true){?>

zamień na

<?php if (!$_SESSION['logged']) return; ?>

 

entry:

if($_SESSION['logged'] == false){
echo '<script>location.href = "/";</script>';
}

Zabezpieczenie zerowe, wyłączony JS i pokaże się ładnie cała strona.

Jeśli nie masz zamiaru pokazywać nic dalej to lepiej przekierować nagłówkiem i zabić wywoływanie skryptu.


(Piesek64) #9

Akurat JS to najmniejszy problem, bo mam w nagłówku noscript i przekierowanie do index.php?error=noscript, a właściwie i tak zmieniłem warunki if na ($_SESSION['logged'] == true) i zamieniłem miejsca kodu.

 

Kodowanie w UTF-8 bez BOM wszystko naprawia...co jest dziwne.


(GioWDS) #10

Kodowanie z kolejnością bitów tak ma do siebie :slight_smile: Wysyłane są puste znaczki na początku strony, ot co.