Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  9 6208
Hei. Hva gjør jeg galt?

index.php

Kode

<div class="modul">
        <?php
	     //Laster inn logg modul
	     include "com_moduls/logg_/logg.php";
	?>
</div>
logg.php

Kode

<?php
echo $_SESSION[id];
//Henter logg ifra database START
//Getting Database info
	include "../../../../config.php";
	echo "Debug: $DATABASE_HOST";

// Oppretter forbindelse til DB
	$conn = new mysqli($DATABASE_HOST, $DATABASE_USER, $DATABASE_PASS, $DATABASE_NAME);

// Sjekker forbindelse
	if (!$conn) {
    	die("Connection failed: " . mysqli_connect_error());
	}

//Selekt data fra database
	$sql = "SELECT logg FROM logg WHERE user_id='$_SESSION[id]'";
	$result = mysqli_query($conn, $sql);

	while($row = mysqli_fetch_assoc($result)) {
				$logg = $row["logg"];
			
				echo "$logg";
				}
		

//Henter logg ifra database SLUTT
?>
Går jeg direkte inn til: logg.php, får jeg ut data, men ikke der hvor jeg inkluderer den. Jeg skjønner ikke På forhånd takk for svar
Sist endret av ertsaas; 5. mars 2020 kl. 20:46.
I see you...
NAPse's Avatar
Ingen feilmeldinger? Og mappestrukturen ser omtrent slik ut?

Kode

EnMappe/
├── index.php
└── com_moduls/
    └── logg_/
         └── logg.php
Sitat av ertsaas Vis innlegg
Hei. Hva gjør jeg galt?

index.php

Kode

<div class="modul">
        <?php
$_session_start();
	     //Laster inn logg modul
	     include "com_moduls/logg_/logg.php";
	?>
</div>
Vis hele sitatet...
Må du ikke ha med $_session_start(); som beskrevet ovenfor?
Limited edition
Moff's Avatar
Funksjonen heter session_start() uten $_-prefiksen, men jeg går ut i fra at den eksisterer i kode som ikke er postet her. Det refereres til flere filer som vi ikke ser, så da er det ikke godt å vite hvor problemet ligger.

Jeg tipper at det er et problem ved filplasseringer, fordi mappestrukturen er veldig komplisert. config.php ligger 4 mapper over logg.php, som ligger 2 mapper under index.php. Det at index.php ikke ligger på øverste nivå er ganske uvanlig. Endre alle "include"-statements til require(), så vil du antakelig se hvor problemet oppstår. Require og include er veldig like, men require får skriptet ditt til å krasje hvis filen ikke eksisterer; om du bruker include, så fortsetter skriptet med en advarsel. Hvis du i tillegg har disablet errorlog i PHP, så vil du aldri se noen feilmelding om at filene ikke eksisterer. Du kan prøve å slå på feilmeldinger ved å plassere denne koden helt i starten av den første PHP-filen som kjøres:

Kode

error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
Trådstarter
Ok. Takker for svar Da har jeg ryddet litt i mappestrukturen...

bruker.php

Kode

<!DOCTYPE html>
<?php
	// Sessions
	session_start();
	// Hvis bruker ikke er logget inn, send dem til login ...
	if (!isset($_SESSION['id'])) {
		header('Location: ../../index.php');
		exit();
	}
		
	error_reporting(E_ALL);
    	ini_set('display_errors', 1);
    	ini_set('display_startup_errors', 1);
		
?>

<html>
	<head>
		<title>Unid - Bruker side</title>
		<link href="style.css" rel="stylesheet" type="text/css">
	</head>
	<body>
	
	<div style="border-style: dotted; Border-width: 2px; border-color: white; Padding: 10px;">
		<b>Utviklings plan</b>
		<ul>
			<li>Gjøre ferdig modul 01: skrive status til database.</li>
			<li>Gjøre slik at brukere kan endre sine passord og klikke glemt passord</li>
			<li>Start med Bruker 2 profil, hvor de kan se status til bruekre.</li>
		</ul>
		<b>Logg:</b>
		<ul>
			<li>Opprettet login system</li>
			<li>startet med modul 01, oppgi sin staus.</li>
		</ul>
	</div>
	
	<div class="modul">
		<?php
		//Laster inn status modul
			require "com_moduls/status_/status.php";
		?>
	</div>
		
	<div class="modul">
		<?php
		//Laster inn logg modul
			require "com_moduls/logg_/logg.php";
		?>
	</div>

	</body>
</html>
logg.php

Kode

<?php
	// Sessions
	session_start();
	
	error_reporting(E_ALL);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);

?>

<h3>Din logg</h3>
<form name="logg" action="bruker.php" method="Get">
	<textarea name="logg"></textarea>
	<button>Send</button>
</form>

<?php
//Henter logg ifra database START
//Getting Database info
	//include "../../../../config.php";
	$DATABASE_HOST = 'localhost';
	$DATABASE_USER = 'rushelse';
	$DATABASE_PASS = '*****';
	$DATABASE_NAME = '*****';

// Oppretter forbindelse til DB
	$conn = new mysqli($DATABASE_HOST, $DATABASE_USER, $DATABASE_PASS, $DATABASE_NAME);

// Sjekker forbindelse
	if (!$conn) {
    	die("Connection failed: " . mysqli_connect_error());
	}

//Selekt data fra database
	$sql = "SELECT logg FROM logg WHERE user_id='$_SESSION[id]'";
	$result = mysqli_query($conn, $sql);

	echo "Debug: $sql";

	while($row = mysqli_fetch_assoc($result)) {
				$logg = $row["logg"];
			
				echo "<div class='logg'>$logg</div>";
				}
		

//Henter logg ifra database SLUTT
?>
Når jeg besøker direkte logg.php så funker det, jeg kan lese data ifra databasen. Men ikke i fra bruker.php, da kan jeg få inn html men ikke database data ...

Jeg får ingen feilmeldinger, ifra noen av sidene...
Limited edition
Moff's Avatar
Når jeg skrev "plassere denne koden helt i starten av den første PHP-filen som kjøres", så mente jeg at du skulle plassere koden helt i starten av den første PHP-filen som kjøres. Det har du ikke gjort i noen av filene dine, det er annen kode foran.

Det er et par feil jeg kan se med en gang her; session_start() og header() vil ikke fungere fordi du har output før koden kjøres. Dette er et veldig vanlig problem man møter som fersk PHP-utvikler. For å forstå hva som er galt så må vi se på hvordan nettsider virker. Du har to ulike "soner" du jobber i; server-siden og klient-siden. PHP er kode som kjøres på server-siden, mens HTML, CSS, JavaScript og et par andre ting kjøres på klient-siden. Alt som skjer på server-siden foregår i det skjulte, før nettsiden lastes inn i nettleseren. Det betyr at database-kode, passord og alle sånne ting som du sikkert har i PHP-koden din holdes skjult for publikum som besøker deg. Alt av klient-side-kode er imidlertid helt åpent, og publikum kan se alt som foregår der i nettleseren sin.

For å transportere data fra server til klient så bruker vi HTTP-protokollen. Kommunikasjonen starter hos klienten, typisk med en såkalt HTTP GET - en etterspørsel etter en side. Serveren svarer da med en annen HTTP-respons som inneholder det klienten har spurt etter, altså nettsiden. Fullstendig med HTML, CSS og JavaScript. Hver HTTP-respons er inndelt i to deler, en head og en body. Dette konseptet kjenner du sikkert igjen fra HTML, hvor HTML-kode er separert på nøyaktig samme måte. Dette fungerer også på samme vis i HTTP, ved at head-delen inneholder metadata som kan gi ulik informasjon og til og med kommandere klienten til å utføre oppgaver. En sentral oppgave serveren kan gi er å sette såkalte cookies og utføre navigering (redirects). Dette gjør at nettleseren din vil opprette en tekstfil på din PC med informasjon som serveren har angitt.

Og her er problemet; head kommer alltid før body. Både i HTML og i HTTP. Sessions i PHP er avhengig av cookies for å fungere, og header()-funksjonen er også avhengig av å plassere en kommando i head. Derav funksjonsnavnet, header(). Hvis du har noe HTML-kode, eller rettere sagt noe som ikke er PHP-kode, før header(), setcookie(), session_start() eller tilsvarende - da går det galt. I din kode har du doctype i toppen, og det er HTML-kode. Du må starte rett på <?php i starten av filen, du kan ikke ha et eneste mellomrom eller noe sånt først.

Et problem som kan dukke opp i denne sammenhengen, som er verdt å nevne, er Byte Order Mark (BOM). Hvis du skriver kode i en fornuftig editor så har du mulighet til å endre hva slags encoding du skriver med. Kontroller at du bruker UTF-8 uten BOM. Hvis du encoder med BOM, så teller dette som et symbol helt i starten av hver fil, og dette vil da føre til den velkjente feilmeldingen "cannot modify header information, headers already sent...".
Trådstarter
Takk. Melte meg på et PHP kurs i udemy og fikk løst problemmet mitt. Det jeg "Glemte" var at når jeg inkluderer ei fil, vil det være slik at koden i den fila, kjøres i den file jeg inkluderer til. Men jeg hadde skrevet det slik, at kodene skulle kjøres i fra den banen de lå plassert i og det blir jo helt feil
▼ ... noen måneder senere ... ▼
Litt lenge siden denne tråden, men popper innom for å advare mot SQL injections. Ser ut til at du ikke bruker PDO og da er det vid åpent (nesten)
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av FreeMyKiwi Vis innlegg
Litt lenge siden denne tråden, men popper innom for å advare mot SQL injections. Ser ut til at du ikke bruker PDO og da er det vid åpent (nesten)
Vis hele sitatet...
$_SESSION-arrayet som brukt her er i utgangspunktet trygt i så måte. Brukaren kan ikkje injisere informasjon direkte til det. No er for all del PDO best practice, men det vil ikkje sei at SQLi automatisk er eit problem om du ikkje bruker det.
Sitat av vidarlo Vis innlegg
$_SESSION-arrayet som brukt her er i utgangspunktet trygt i så måte. Brukaren kan ikkje injisere informasjon direkte til det. No er for all del PDO best practice, men det vil ikkje sei at SQLi automatisk er eit problem om du ikkje bruker det.
Vis hele sitatet...
Vet om den, meeen her ser jeg at han har et input field, og vet ikke hva logikken bak den er. Derfor det var en generell advarsel.

Session er jo for det meste å anta som trygt, (men ikke alltid avhengig av hva du putter i det )