• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Przekierowanie header PHP

VPS Starter Arubacloud
0 głosów
545 wizyt
pytanie zadane 22 sierpnia 2017 w PHP przez hiper007 Stary wyjadacz (11,270 p.)
zamknięte 4 października 2017 przez hiper007

Witam!

Oto mój kod odpowiedzialny za dodanie do bazy i wyświetlenie okna wydruku. Moje pytanie brzmi kiedy muszę umieścić albo w jakim miejscu przekierowanie header('Location: index.php');, żeby po zamknięciu okna  wydruku, lub wydrukowaniu tekstu przekierowało mnie ponownie na index.php.

 

<?php

session_start();

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


		$host="localhost";
		$db_login="root";
		$db_pass="";
		$db_name="sinbin";
		

		
			if (!$polaczenie = mysql_connect($host,$db_login,$db_pass,$db_name)) {
			echo 'Nie można nawiązać połączenia z bazą danych';
			exit;
				
			}else
			{
			
			if (!mysql_select_db('sinbin', $polaczenie)) {
			echo 'Nie można wybrać bazy danych';
			exit;
			}	
		
		$login=$_POST['login'];	
		$problem="pr1";
		$data=date('Y-m-d H:i:s');
				
		//Udana walidacja? Załóżmy, że tak!
		
		$wszystko_OK=true;
				
						
		//Sprawdzenie poprawności loginu
		
		if(!preg_match("/^[a-z]{4}[0-9]{3,4}$/",$_POST['login']))
		{
			$wszystko_OK=false;	
			$_SESSION['bladlog']="Nieprawidłowy Login!";

		}
						
		if(empty($_POST['login'])) 
		{
			$wszystko_OK=false;
			$_SESSION['bladlog']="Proszę wypełnić pole Login!";
			
		}	
				
				
		if ($wszystko_OK==true)
				{

			
			
			
														if($result = mysql_query("INSERT INTO sin VALUES(NULL, '$login','$problem','$data')", $polaczenie))
														{
														

echo<<<END
														<div id='invisible_harmo'> #Ta klasa ukryje na stronie to co się będzie drukowało
														<div id='block1_1'> 
														
^XA
^FO40,135^A0N,50,50^FDWork: $login || Problem: $problem^FS
^FO40,275^A0N,50,50^FDData: $data^FS
^XZ
												
														
														</div>
														</div>
END;
														
														session_unset();	
																											
															
														}else
														{
		
															echo "Błąd bazy danych, nie można wykonać zapytania do bazy\n";
															echo 'Błąd MySQL: ' . mysql_error();
															exit;

														}
			
			
	
				}
				
			mysql_close($polaczenie);
			
			}
}	
	
?>

a oto kod js odpowiedzialny za okno wydruku:

<script>
function printPage(id)
{
   var html="<html><body><div>";
   html+= document.getElementById(id).innerHTML;
   html+="</div></body></html>";
   var printWin = window.open('','','left=0,top=0,width=1200,height=800,toolbar=0,scrollbars=0,status=0');
   printWin.document.write(html);
   printWin.document.close();
   printWin.focus();
 printWin.print(); 
 printWin.close();
}
</script>
komentarz zamknięcia: Problem rozwiazany
komentarz 22 sierpnia 2017 przez Jedras Maniak (54,860 p.)
Poczytaj o PDO/mysqli i SQL Injection.

2 odpowiedzi

+1 głos
odpowiedź 22 sierpnia 2017 przez Tomek Sochacki Ekspert (227,510 p.)
wybrane 4 października 2017 przez hiper007
 
Najlepsza

Dwie kwestie:

1 - Tak obrazowo i trochę w uproszczeniu mówiąc:

Z PHP wysyłasz kod HTML do klienta, po czym klient może ponownie odwołać się do serwera i drugi raz otrzyma nowy kod HTML. Serwer nie może więc sam rozsyłać nowych informacji (no chyba, że używasz np. WebSocket ale to inna bajka) więc musi dostać jakieś nowe żądanie od klienta. Tak na prawdę to już przy pierwszym wywołaniu w przeglądarce adresu strony wysyłasz żądanie, które trafia do pliku index.php (najczęściej) i wysyłasz pierwszą odpowiedź serwera.

Dlatego chcąc otrzymać nową odpowiedź musisz z poziomu JS wywołać żądanie, np. jak kolega wcześniej napisał z użyciem obiektu window.location.Polecam również poczytać o technologii Ajax co daje jeszcze większe możliwości niż ciągłe wysyłanie nowych żądań i pełne odświeżanie strony.

2 - czy jesteś pewien swojego regexp użytego do walidacji loginu?

/^[a-z]{4}[0-9]{3,4}$/

Taki wzorzec próbuje dopasować najpierw 4 litery a-z i po nich 3 lub 4 cyfry. Nie przejdzie walidacji np. login 123tome, ani tomek123 (5 liter). Ponad to zezwalasz wyłącznie na małe litery a-z, więc odrzucisz login Tomek123. Czy na pewno taki był zamysł? Może lepiej np. sprawdzić po prostu czy login zawiera minimum 4 litery a-z i minimum 3 cyfry, a maksymalna długość loginu to np. 10 znaków. Na coś takiego można zrobić szybki regexp:

/^(?=.*[a-z]{4,})(?=.*\d{3,})[a-z\d]{7,10}$/i

//(?=.*[a-z]{4,})  Minimum 4 litery a-zA-Z
//(?=.*\d{3,})     Minimum 3 cyfry
//[a-z\d]{7,10}    Ogólnie cały login to min. 7 max 10 znaków a-zA-z0-9

 

komentarz 22 sierpnia 2017 przez hiper007 Stary wyjadacz (11,270 p.)
Tak taki byl zamysl :) to program ndo localbosta tylko xo firmy mojej do skanosania loginow login zaczyna sie z malej litery i posiada 4 litery a po tym cyfry od 001 do 1500. Wiec jest oki :) tylko chce zrobic to przskierowanie :) jak nadusze przycisk drukuj to drukuja mi sie dane ale zostaje mi na tej stronie a chce zeby wrocilo do index.php i nie wiem gdzie umiejscic to zeby nie przekierowalo mnie zanim mi nie wydrukuje :)
komentarz 22 sierpnia 2017 przez Tomek Sochacki Ekspert (227,510 p.)

Tak taki byl zamysl :)

Jeśli tak to nie ma tematu :) Wolałem zapytać, żebyś w razie czego nie szukał potem długo prostego de facto "błędu" :)

komentarz 4 października 2017 przez efiku Szeryf (75,160 p.)
Ten kod zawiera nieistniejącą funkcję do łączenia się z bazą danych.
Zmień na PDO.
0 głosów
odpowiedź 22 sierpnia 2017 przez mtk3d Nałogowiec (46,690 p.)

Twój kod nie jest odporny na SQL Injection, nie poddaje się do zapytania danych bezpośrednio z inputów itp.

A co do twojego pytania, to nie wprowadzisz zmiany w nagłówku, jeśli już coś wysłałeś do treści. Poczytaj sobie jak działa http.

Musisz to przekierowanie zrobić w js.

To będzie coś w stylu

window.location.href

 

komentarz 22 sierpnia 2017 przez hiper007 Stary wyjadacz (11,270 p.)
Wiem wiem:) ale to ma byc tylko program napisany pod localhosta :) ok ale powiedz mi w jakim miejscu musialbym to przekierowanie js umiescic w kodzie :)

Podobne pytania

0 głosów
2 odpowiedzi 1,914 wizyt
0 głosów
2 odpowiedzi 324 wizyt
pytanie zadane 13 stycznia 2018 w PHP przez kingkushlee Gaduła (3,960 p.)
0 głosów
0 odpowiedzi 145 wizyt
pytanie zadane 20 listopada 2017 w PHP przez Piotr Jarema Użytkownik (970 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...