Przerzucenie strony z bazą mysql na serwer home.pl

0

Cześć. Właśnie przerzuciłem swoją pierwszą stronę z bazą z serwera xampp-a na hosting, Pod xamppem wszystko chodzi na hostingu nie działa mi przekierowanie po zalogowaniu.

W jednym z linków mam stronę logowania pod którym chcę otworzyć stronę dostępną tylko po zalogowaniu. Nie jest to idealne i dużo jeszcze nauki ale nie mam pojęcia dlaczego nie działa mi na hostingu przekierowanie bo pod xamppem działa. Z baza chyba też się połączyłem bo wyskoczył by numer błędu a nie taki komunikat

Warning: Cannot modify header information - headers already sent by (output started at /Site/Logowanie/Logowanie_skrypt.php:1) in /Site/Logowanie/Logowanie_skrypt.php on line 46

Chodzi o te dwie linijki z header:

	$rezultat->free_result();
			   header('Location: strona_ukryta.php');	
			} else {
				header('Location: Logowanie_Formularz.php');
			}

Naprawdę nie wiem co jest przyczyną różnice miedzy całym procesem logowania między stroną działająca pod xampp a na hostingu to dane do zalogowania. Po telefonie do home.pl doradzili taką konfiguracje, może jednak tu jest błąd. Na hostingu dołączam bazę po raz pierwszy

$host = "localhost";
$db_users = "nazwa_bazy";
$db_password = "moje_hasło_do_bazy";
$db_name = "nazwa_bazy";
0

Gdzieś pewnie zapodział Ci się jakiś znak, funkcja echo/print jakiś czy coś podobnego. Zbadaj na localhoscie źródło danej strony i zobacz czy nie znajduje się tam jakaś spacja lub inny znak na początku. Czasami problem pojawia się przez nieodpowiednie kodowanie pliku (UTF8 - BOM ale bez BOM'u).

0

najlepiej to zrzuć sobie na githuba, daj do oceny, potem tylko dodasz poprawki, ew. rozważ jakiegoś frameworka

0

Skopiowane jest jeszcze raz wszystko na hosting, jaka literówka może być skoro wszystko działa pod xamppem? Gdyby literówka była to pod xamppem też by nie zadziałało, jestem jeszcze zielony. Nic więcej nie ruszyłem poza zmiana hosta usera ,hasła i name. Piszesz o kodowaniu mam utf8_polish_cidodane do kolumn w bazie. Nie mam pojęcia gdzie może być różnica że działa to pod xampp a nie działa pod hostingiem.
to jest cały mój skrypt:

Logowanie_skrypt.php

 <!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Dokument bez tytułu</title>
</head>

<body>

  <?php 
	require_once("conect_login.php");
	
		$polaczenie = @new mysqli($host, $db_users, $db_password, $db_name);
	
	if ($polaczenie->connect_errno!=0)
	{
		echo "Error: ".$polaczenie->connect_errno;
	}
	
	else
	{
	$login = $_POST['login'];
	$haslo = $_POST['haslo'];
		
		$login = htmlentities($login, ENT_QUOTES, "UTF-8");
		$haslo = htmlentities($haslo, ENT_QUOTES, "UTF-8");
		
		if ($rezultat = @$polaczenie->query(
		sprintf("SELECT * FROM uzytkownicy WHERE user='%s' AND pass='%s'",
		mysqli_real_escape_string($polaczenie,$login),
		mysqli_real_escape_string($polaczenie,$haslo))))
		{
			$ilu_userow = $rezultat-> num_rows;
			if($ilu_userow > 0)
				
			{
				
				$wiersz = $rezultat -> fetch_assoc();
				$users = $wiersz['user'];   
  	
				
				$rezultat->free_result();
			   header('Location:strona_ukryta.php');
			
			} else {
				header('Location: Logowanie_Formularz.php');	
			}
		}
}
?>
</body>
</html>

i conect_login.php

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Dokument bez tytułu</title>
</head>

<body>
<?php 
	
$host = "localhost";
$db_users = "nazwa_bazy";
$db_password = "hasłodo_do_bazy";
$db_name = "nazwa_bazy";	
?>	
</body>
</html>

oraz formularz

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Dokument bez tytułu</title>
</head>
<link href="Logowanie_formularz_style.css" rel="stylesheet" type="text/css"<body>
	
	<div id="container">
	<form action="Logowanie_skrypt.php" method="post">
		<input type="text" name="login">
		<input type="password" name="haslo">
		<input type="submit" value="Zaloguj się">

	</form>	
</body>
</html>
0

Wywal @ i zobacz czy masz poprawne połączenie z bazą.

0

Wyciszam bo tak ponoć bezpieczniej a i tak by numer błędu wyskoczył gdyby było coś z połączeniem a tak wyskakuje coś z przekierowaniem w liniach z header i nie mam pojęcia nawet czego szukać, pliki wszystkie znajdują się w jednym folderze, błędu nigdzie mi nie podkreśla. Zresztą nic poza danymi do połączenia się z bazą nie zmieniałem. Nie wiem kod pisany w Dreamweaver gdzie w preferencjach jako środowisko programistyczne jest ustawione php 7.1 a może serwer na home.pl korzysta z innej wersji. Czepiam się na ślepo bo skoro pod xamppem to chodzi dlaczego nie tu na hostingu

0

Żeby było bezpieczniej - to pakujesz to w try/catch - wyciszanie błędów na produkcji robi się inaczej - http://php.net/manual/pl/function.error-reporting.php. Porównaj ustawienia localosta i tego co masz na home (phpinfo()) Poza tym zajrzyj w źródło strony tak jak pisałeś - bo może gdzieś jednak jakieś echo się pojawia albo biały znak.

0

wywaliłem i dalej wyskakuje taki błąd:

Warning: Cannot modify header information - headers already sent by (output started at /Site/Logowanie/Logowanie_skrypt.php:1) in /Site/Logowanie/Logowanie_skrypt.php on line 43

gdzie numer linia odpowiada przekierowaniu . Jeśli wpsze poprawny login i hasło komunikat o błędzie pokazuję linię o numerze
ze stroną ukrytą

 header('Location:strona_ukryta.php');

jeśli źle wpisze dane logowanie źle - niepoprawny user czy hasło, pokazuje błąd z linią z header

 header('Location: Logowanie_Formularz.php');

Więc nie ma siły połączenie z bazą musi jednak działać, tak myślę na zdrowy rozum ale dlaczego na hostingu nie otworzy żadnej z nich

0

Dałem cały kod plików wyżej, no jeszcze został css do formularza ale to nie ma znaczenia raczej najmniejszego. Przed <!doctype html> nie ma nic To adres do strony logowania http://johnnyblady.eu/Site/Logowanie/Logowanie_Formularz.php, poprawny login jak i hasło to "a" po złym powinna się pojawić znów strona logoawania ta co teraz po poprawnym div z napisem "tu znajdzie sie zawartość diva".....

0

Zaglądam w źródło Twojej strony i oto co widzę

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Dokument bez tytułu</title>
</head>

<body>

  <!doctype html>

Popraw to tak, żeby mieć tylko jeden doctype i jeden znacznik <html> -zresztą... powinieneś widzieć w czym tkwi błąd. Nawet jeśli to nie rozwiąże problemu, to na pewno poprawi semantykę i poprawność Twojego htmla.

0

tam w ogóle sporo błędów w składni i to w kilku linijkach obu plików

0

Nie pisałem że kod jest idealny, wręcz przeciwnie ale skoro to działa pod xamppem który jest serwerem? dlaczego tu nie chce zatrybić . Ja dopiero się uczę, gdzie mi tam do Was, Dopiero to pierwszy plik z bazą wysłany na serwer i z tond panika ogarnia. Wskażcie błędy wskażcie jak to poprawić według Was i gdzie tkwi przede wszystkim szkopuł że działa pod xamppem a pod serwisem nie.

Jeśli chodzi o doctype dwa razy, w którym pliku zostawić tylko sam kod php, bo w żadnym w kodzie z trzech przedstawionych plików (wyżej) nie mam tego dwukrotnie., Więc to musi być przez powiązanie plików. Jestem samoukiem, nie gniewajcie się że pytam o to, od tego jest chyba takie forum. Wiem że nie wolno czekać na gotowce a samodzielnie myśleć lecz mam tak już z rytą głowę, przez to dlaczego tu przekierowanie nie działa że mam już mętlik i nie wiem jak z tego wyjść

0

Wywal całego htmla z plików conect_login.php oraz Logowanie_skrypt.php

0

Lata temu jak jeszcze bawiłem się w PHP to na początku pliku dawało się:

<?
ob_start();

i wtedy działało. Ale to było kiedyś ;)

Ewentualnie gdzies pisali czy nie ma jakis spacji przed <? i za ?>.

0

wywaliłem to w kodzie dziękuję za rade, niestety nie rozwiązuje to problemu został sam kod php(od znacznika otwarcia do znacznika zamknięcia)w obu plikach i w takiej zmienionej budowie dalej działa pod xamppem. Może zadzwonię na home.pl i przestawię temat jeszcze raz o ile pomożecie mi zbudować konkretne zapytanie. Reasumując:

  • kod działa pod xamppem, literówka w takim razie chyba odpada
  • połączenie musi być poprawne skoro pokazuję linie błędu w zależności od wyniku wpisana danych poprawnych lub nie poprawnych,pokazuję na linię błędy z odpowiednią stroną do przekierowania tylko że jej nie wyświetl Nie wiadomo czemu)no nie ma sił, skoro skrypt ocenia wynik czy podaliśmy dane poprawne czy nie, połączenie musi działać

O co mogę zapytać w takim razie gdy zadzwonię, bo zanim ja przedstawię temat minie pół godziny zanim fachowiec się pochyta o ile się pochyta, o co mi chodzi By przedstawić temat krótko zwięźle i na temat. no nawet nie wie czego się chycić

0

Dopisałem coś takiego(poniżej) jak kolega wyżej polecił, zadziałało, co to tak naprawdę jest ? czy to trza dla bezpieczeństwa jakoś zamknąć? dodałem to w obu plikach na początku i w connect do bazy i w skrypcie, czy wystarczy w jednym, w którym?. Przepraszam że Was pytam ale Wy wytłumaczycie w prost Wy macie pojęcie o tym, macie doświadczenie. Proszę jak do dziecka, co tak naprawdę tą linijką zmieniłem że mój kod działa na hostingu a bez niej na hostingu nie chciał

<?php
ob_start();
0

Jak to stosowalem to pamietam, ze na koncu pliku dawalem jeszcze:

ob_end_flush(); ?>

Nie mam pojęcia co to daje, wiem tylko, że pomogło na moje problemy ;) Musialbys zgooglowac, na szybko znalazlem cos takiego:

This function will turn output buffering on. While output buffering is active no output is sent from the script (other than headers), instead the output is stored in an internal buffer.

tzn. zbiera wszystkie dane które mają być wysłane do przeglądarki w jednej zmiennej i trzyma je tam, aż napotka ob_end_flush()

Ogólnie - funkcja uruchamia buforowanie wszystkiego co jest wysyłane oprócz headerów.

a ob_end_flush() powoduje "uwolnienie" zebranych danych - wysłanie ich do przeglądarki.

Umożliwia to miedzy innymi utworzenie cookies w środku skryptu.

Chodzi pewnie o to, ze header wysylany jest zawsze na poczatku wiec jak wyslesz cos do przegladarki a potem probujesz jeszcze wyslac header to wywala blad.

1 użytkowników online, w tym zalogowanych: 0, gości: 1