Varför så många fel på One.com men inte på Xampp?

Permalänk
Medlem

Varför så många fel på One.com men inte på Xampp?

Håller på med en hemsida som kollar om "admin" är inloggad eller inte.
Fungerar i xampp (local server)

Men på one.com efter att jag laddat upp den så dyker detta upp hela tiden

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /customers/f/9/0/hemsida.se/httpd.www/beta/hemsida/admin_tools/medlemsregister.php:1) in /customers/f/9/0/hemsida.se/httpd.www/beta/hemsida/users/admin_check.php on line 1

Varför blir det php fel på one.com men inte hemma på xampp? :/ Jobbigt att rätta allt efter uppladdning mot one.com. Kan jag inte ställa in så det är samma på xampp så jag lär mig?

admin_check.php (kör error report för att slippa texten, sidan fungerar ju även med detta error)

<?php error_reporting(0); ?> <?php session_start(); ?> <?php if(!isset($_SESSION["username"])) { echo "<META http-equiv='refresh' content='0;URL=../users/admin_not.php'>"; } ?> <?php include'../scripts/mysql_connect.php'; ?> <?php if(isset($_SESSION["username"])) { $username = $_SESSION['username']; $info_ = mysql_query("SELECT status FROM users WHERE username='$username'"); $information = mysql_fetch_assoc($info_); $admin = "{$information['status']}"; if($admin == "admin") { } else if($admin == "medlem") { echo "<META http-equiv='refresh' content='0;URL=../users/admin_not.php'>"; } } ?>

Permalänk
Medlem
Skrivet av downup:

Håller på med en hemsida som kollar om "admin" är inloggad eller inte.
Fungerar i xampp (local server)

Men på one.com efter att jag laddat upp den så dyker detta upp hela tiden

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /customers/f/9/0/hemsida.se/httpd.www/beta/hemsida/admin_tools/medlemsregister.php:1) in /customers/f/9/0/hemsida.se/httpd.www/beta/hemsida/users/admin_check.php on line 1

Varför blir det php fel på one.com men inte hemma på xampp? :/ Jobbigt att rätta allt efter uppladdning mot one.com. Kan jag inte ställa in så det är samma på xampp så jag lär mig?

admin_check.php (kör error report för att slippa texten, sidan fungerar ju även med detta error)

<?php error_reporting(0); ?> <?php session_start(); ?> <?php if(!isset($_SESSION["username"])) { echo "<META http-equiv='refresh' content='0;URL=../users/admin_not.php'>"; } ?> <?php include'../scripts/mysql_connect.php'; ?> <?php if(isset($_SESSION["username"])) { $username = $_SESSION['username']; $info_ = mysql_query("SELECT status FROM users WHERE username='$username'"); $information = mysql_fetch_assoc($info_); $admin = "{$information['status']}"; if($admin == "admin") { } else if($admin == "medlem") { echo "<META http-equiv='refresh' content='0;URL=../users/admin_not.php'>"; } } ?>

Är inte helt hundra men prova det här:

<?php session_start(); error_reporting(0); include'../scripts/mysql_connect.php'; if(!isset($_SESSION["username"])) { echo "<META http-equiv='refresh' content='0;URL=../users/admin_not.php'>"; } if(isset($_SESSION["username"])) { $username = $_SESSION["username"]; $info_ = mysql_query("SELECT status FROM users WHERE username='$username'"); $information = mysql_fetch_assoc($info_); $admin = "{$information["username"]}"; if($admin == "admin") { } else if($admin == "medlem") { echo "<META http-equiv='refresh' content='0;URL=../users/admin_not.php'>"; } } ?>

strippade även bort massa redundanta <?php taggar.

Du bör också studera SQL-injections och hur man motverkar det i PHP.
Du ska alltid sanera user input. Personligen skulle jag aldrig publicera din kod eftersom att $_SESSION["Username"] skickas direkt, utan någon typ av validering till SQL servern.

Man kan utan problem dumpa din databas eller delete:a all data.

Läs mer här: http://www.w3schools.com/php/php_mysql_prepared_statements.as...

Visa signatur

~. Citera så jag hittar tillbaka .~

Permalänk
Medlem
Skrivet av KeVVa:

Är inte helt hundra men prova det här:

<?php session_start(); error_reporting(0); include'../scripts/mysql_connect.php'; if(!isset($_SESSION["username"])) { echo "<META http-equiv='refresh' content='0;URL=../users/admin_not.php'>"; } if(isset($_SESSION["username"])) { $username = $_SESSION["username"]; $info_ = mysql_query("SELECT status FROM users WHERE username='$username'"); $information = mysql_fetch_assoc($info_); $admin = "{$information["username"]}"; if($admin == "admin") { } else if($admin == "medlem") { echo "<META http-equiv='refresh' content='0;URL=../users/admin_not.php'>"; } } ?>

strippade även bort massa redundanta <?php taggar.

Du bör också studera SQL-injections och hur man motverkar det i PHP.
Du ska alltid sanera user input. Personligen skulle jag aldrig publicera din kod eftersom att $_SESSION["Username"] skickas direkt, utan någon typ av validering till SQL servern.

Man kan utan problem dumpa din databas eller delete:a all data.

Läs mer här: http://www.w3schools.com/php/php_mysql_prepared_statements.as...

Jag har mycket att lära, ska kolla upp SQL-injections.

Din ändring fick ej bort felet men den var bättre upplagd.

Permalänk
Medlem
Skrivet av downup:

Jag har mycket att lära, ska kolla upp SQL-injections.

Din ändring fick ej bort felet men den var bättre upplagd.

Ja din kod är lite ostrukturerad.
Istället för att göra en HTML redirect så bör du köra en 301 direkt ifrån webbservern.

header('Location: '.$newURL);

Det förutsätter ju dock att du inte har skrivit något till Response strömmen.

admin_check.php är det en sidan du försöker inkludera eller gör du ett request emot den?

Visa signatur

~. Citera så jag hittar tillbaka .~

Permalänk
Medlem
Skrivet av downup:

Din ändring fick ej bort felet men den var bättre upplagd.

http://www.sweclockers.com/forum/trad/1362263-varfor-fungerar...
http://stackoverflow.com/questions/8028957/how-to-fix-headers...

Permalänk
Medlem
Skrivet av downup:

Håller på med en hemsida som kollar om "admin" är inloggad eller inte.
Fungerar i xampp (local server)

Men på one.com efter att jag laddat upp den så dyker detta upp hela tiden

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /customers/f/9/0/hemsida.se/httpd.www/beta/hemsida/admin_tools/medlemsregister.php:1) in /customers/f/9/0/hemsida.se/httpd.www/beta/hemsida/users/admin_check.php on line 1

Varför blir det php fel på one.com men inte hemma på xampp? :/ Jobbigt att rätta allt efter uppladdning mot one.com. Kan jag inte ställa in så det är samma på xampp så jag lär mig?

Det är förmodligen många dimensioner konfiguration som skiljer mellan din XAMPP-server och one.com: underliggande operativsystem, version av Apache, PHP och MySQL, grundkonfiguration, rättigheter, installerade tillägg, loggning, etc. Hur mycket som helst och antagligen rätt svårt att få precis likadant. (i professionella sammanhang brukar man äga servern själv vilket gör det lättare att se till att inställningarna är likadana som de man har under utvecklingsfasen. Därtill kan man använda docker för att göra det ännu enklare. Vi kör detta på jobbet och det är verkligen underbart)

Ditt specifika felmeddelande kommer sig av att servern redan har börjat skicka ett svar till besökaren vid det tillfälle du försöker ändra i sessionscachen. Headrarna är det första som skickas tillbaka till en besökare och de måste skickas innan sidans innehåll skickas. Detta innebär att du inte kan ändra headrar efter att så lite som ett enda < har skickats.

Jag gissar på att du har ett byte-order mark-tecken i början av din fil (medlemsregister.php). Det är rätt vanligt att mindre moderna textredigerare som Notepad++ lägger till detta tecken, och det kan med vissa inställningar leda till att en server börjar skicka headrar samt detta osynliga tecken, även om php-filen i sig inte skickar något till användaren.

För att få bort tecknet väljer du att spara om filerna utan byte order mark.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Tack alla ska titta på detta ikväll, så jävla kul att lära sig nya saker. Visste att jag hade frågat detta innan. Dumt av mig.

Skickades från m.sweclockers.com

Permalänk
Medlem

Ok, nu har jag tittat på allt, rättat till en säker inloggning med.

Men fattar inte! Står helt stilla i skallen

Exempel

medlemsregister.php

<?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Medlemsregister</title> <link rel="stylesheet" href="css/style.css"> </head> <body class="align"> <?php include'../scripts/mysql_connect.php'; if(!isset($_SESSION["username"])) { echo "<div class='grid__container'><h2>Här ska inte du vara :)</div></body></html>"; die(); } if(isset($_SESSION['username'] )) { $username = mysql_real_escape_string($_SESSION['username']); $check = mysql_query("SELECT status FROM users WHERE username='$username' LIMIT 1"); $information = mysql_fetch_assoc($check); $admin = "{$information['status']}"; if($admin == "admin") { } elseif($admin == "medlem") { echo "<div class='grid__container'><h2>Här ska inte du vara :)</div></body></html>"; die(); } } ?>

Error från one.com = Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /customers/f/9/0/hemsida.se/httpd.www/beta/hemsida/admin_tools/medlemsregister.php:1) in /customers/f/9/0/hemsida.se/httpd.www/beta/hemsida/admin_tools/medlemsregister.php on line 1

EXAKT SAMMA KOD I nyheter_admin.php

<?php session_start(); ?> <script type="text/javascript" src="tinymce/tinymce.min.js"></script> <script type="text/javascript"> tinymce.init({ menubar : false, fontsize_formats: "8pt 10pt 12pt 14pt 18pt 24pt 36pt", width : '99%', height : '380px', selector: "textarea", plugins: [ "imagelink advlist autolink lists link image charmap print preview anchor jbimages", "searchreplace visualblocks code fullscreen", "insertdatetime media table contextmenu paste hr textcolor" ], toolbar: [ "undo redo | bold italic hr forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | fullscreen insertdatetime | code", "fontsizeselect | jbimages | imagelink | table" ] }); </script> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Skapa nyheter</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <?php include'../scripts/mysql_connect.php'; if(!isset($_SESSION["username"])) { echo "<div class='grid__container'><h2>Här ska inte du vara :)</div></body></html>"; die(); } if(isset($_SESSION['username'] )) { $username = mysql_real_escape_string($_SESSION['username']); $check = mysql_query("SELECT status FROM users WHERE username='$username' LIMIT 1"); $information = mysql_fetch_assoc($check); $admin = "{$information['status']}"; if($admin == "admin") { } elseif($admin == "medlem") { echo "<div class='grid__container'><h2>Här ska inte du vara :)</div></body></html>"; die(); } } ?>

Inga errors från one.com

Hur hela medlemsregister ser ut

<?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Medlemsregister</title> <link rel="stylesheet" href="css/style.css"> </head> <body class="align"> <?php include'../scripts/mysql_connect.php'; if(!isset($_SESSION["username"])) { echo "<div class='grid__container'><h2>Här ska inte du vara :)</div></body></html>"; die(); } if(isset($_SESSION['username'] )) { $username = mysql_real_escape_string($_SESSION['username']); $check = mysql_query("SELECT status FROM users WHERE username='$username' LIMIT 1"); $information = mysql_fetch_assoc($check); $admin = "{$information['status']}"; if($admin == "admin") { } elseif($admin == "medlem") { echo "<div class='grid__container'><h2>Här ska inte du vara :)</div></body></html>"; die(); } } ?> <h1 style="padding:0px; margin:0px;">Medlemsregister</h1></ <?php $result = mysql_query("SELECT * FROM users"); $num_rows = mysql_num_rows($result); echo " " . $num_rows . " Medlemmar"; ?> <div class="site__container"> <div id="preview"> <table width="1000" border="0" cellspacing="0" cellpadding="0"> <tr style="background-color:#333; color:#fff; font-weight:bold; font-size:12px;"> <td width="100">Namn</td> <td width="100">Efternamn</td> <td width="30">Kön</td> <td width="150">Adress</td> <td width="100">Ort</td> <td width="230">epost</td> <td width="100">Mobilnummer</td> <td width="50">Status</td> <td width="150" align="right">Username</td> </tr> <?php $per_page = 1000; $pages_query = mysql_query("SELECT COUNT('id') FROM users"); $pages = ceil(mysql_result($pages_query, 0) / $per_page); $page = (isset($_GET['page'])) ? (int) $_GET['page'] : 1; $start = ($page - 1) * $per_page; $query = mysql_query("SELECT * FROM users ORDER BY ID DESC LIMIT $start, $per_page"); while($link = mysql_fetch_assoc($query)) { echo " <tr class='tr_special' style='color:#fff; font-size:12px;'> <td>{$link['namn']}</td> <td>{$link['efternamn']}</td> <td>{$link['sex']}</td> <td>{$link['adress']}</td> <td>{$link['ort']}</td> <td>{$link['epost']}</td> <td>{$link['mobilnummer']}</td> <td>{$link['status']}</td> <td align=right>{$link['username']}</td> </tr> "; } ?> </table> </div> </div> </body> </html>

Blir tokig x)

Sidan fungerar, en medlem får inte se resultatet, en oinloggad kan inte se resultatet. Och en admin kan se resultatet och alla kan se error koden som kommer.

Kan ju gömma koden med php men det vill jag inte då är det ju något fel.

Permalänk
Medlem
Skrivet av downup:

Ok, nu har jag tittat på allt, rättat till en säker inloggning med.
Men fattar inte! Står helt stilla i skallen
Error från one.com = Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /customers/f/9/0/hemsida.se/httpd.www/beta/hemsida/admin_tools/medlemsregister.php:1) in /customers/f/9/0/hemsida.se/httpd.www/beta/hemsida/admin_tools/medlemsregister.php on line 1

Har du kollat upp att inte medlemsregister.php är sparad som UTF8 (vilket kan resultera i en https://en.wikipedia.org/wiki/Byte_order_mark) som en av länkarna jag skrev förut föreslog?
I den senare länken finns det 7 tips vad du ska kolla efter för just denna typen av fel.
Vad har du försökt med?

Permalänk
Medlem

@iXam: Tack fungerar nu!

Konstigt att just den filen blev så, kodar allt via DreamWeaver CS5.5 . Du räddade min natt

Permalänk
Medlem
Skrivet av downup:

@iXam: Tack fungerar nu!

Konstigt att just den filen blev så, kodar allt via DreamWeaver CS5.5 . Du räddade min natt

Kommer här och flikar in att ej köra mysql_* funktionerna då dom är satta som deprecated.

Byt till mysqli eller PDO istället så du lär dig rätt från början.