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

Php - czytelnia

Object Storage Arubacloud
0 głosów
277 wizyt
pytanie zadane 22 marca 2017 w PHP przez seba Dyskutant (8,900 p.)

Witam, otóż mam takie zadanie:

 

Utworzenie dwóch tabel:

Struktura tabeli dla tabeli `autorzy`

CREATE TABLE `autorzy` (
  `ida` int(11) DEFAULT NULL,
  `imie` varchar(250) NOT NULL,
  `nazwisko` varchar(250) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Struktura tabeli dla tabeli `ksiazki`

CREATE TABLE `ksiazki` (
  `idk` int(11) DEFAULT NULL,
  `ida` int(11) NOT NULL,
  `tytul` varchar(250) NOT NULL,
  `okladka` varchar(250) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

2. Tworzymy formularz, dodający do bazy danych ida, Imię i nazwisko autora - index.php
3. Po dodaniu do bazy danych autora, piszemy skrypt prezentujący autorów w polu select formularza
4. Tworzymy formularz dodający do bazy książkę (tytul) wraz ze zdjęciem okładki. Skrypt pobiera ida autora z pola select i wpisuje do tabeli ksiazki ida - index.php

 

I już prawię skończyłem ale nie potrafię wysłać z <select></select> id autora tak aby było wiadomo kto napisał te książke.

 

Mój kod:

index.php

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
	<title>Czytelnia</title>
</head>
<body>
<form name="formularz" action="wprowadz.php" method="post">
	Imię:<br/><input type="text" name="imie"><br/>
	Nazwisko:<br/><input type="text" name="nazwisko"><br/>
	<input type="submit" value="Wyślij">
		<?php
		if(isset($_SESSION["send"]))
		{
			echo $_SESSION["send"];
		}
		unset($_SESSION["send"]);

		?>
</form>
<br/>
======================================================

<form enctype="multipart/form-data" method="post" action="sendfile.php">
	Wybierz:<select name="ida">
	<?php
	require_once("connect.php");
	$polaczenie=@new mysqli($host,$db_user,$db_password,$db_name);
	if($polaczenie->connect_errno!=0)
	{
		echo $polaczenie->connect_errno;
	}

	$wyciagnij="SELECT imie,nazwisko,ida FROM autorzy";
	if($rezultat=$polaczenie->query($wyciagnij))
	{
		while($wiersz=$rezultat->fetch_assoc())
		{
			$imie=$wiersz['imie'];
			$nazwisko=$wiersz['nazwisko'];
			$ida=$wiersz['ida'];
			echo '<option value="$ida">'.$imie." ".$nazwisko.'</option>';
		}
	}
	$polaczenie->close();
	?>
</select>

<br/>
Tytuł książki:<input type="tytul" name="tytul">
<br/>
<input type="file" name="plik">
<br/>
<input type="submit" value="Wyślij">
<?php
if(isset($_SESSION["send2"]))
{
	echo $_SESSION["send2"];
	unset($_SESSION["send2"]);
}
?>
</form>
</body>
</html>

	
	

connect.php

<?php
$host="localhost";
$db_user="root";
$db_password="";
$db_name="Czytelnia";
?>

 

sendfile.php

<?php
	session_start();
	require_once("connect.php");
	$polaczenie=@new mysqli($host,$db_user,$db_password,$db_name);
	if($polaczenie->connect_errno!=0)
	{
		echo $polaczenie->connect_errno;
	}

	$tytul=$_POST['tytul'];
	$ida=$_POST['ida'];
	$plik=$_FILES['plik'];

	if(isset($plik['name']))
	{
		copy($plik['tmp_name'],"./files/".$plik['name']);
		$plik2=$plik['name'];
		$wprowadz="INSERT INTO ksiazki(ida,tytul,okladka) value('$ida','$tytul','$plik2')";
		if($polaczenie->query($wprowadz))
		{
			header("Location: index.php");
			$_SESSION["send2"]="Wysłano do tabeli";
		}
	}
	else
	{
		echo"copy error";
	}

	$polaczenie->close();


?>

 

 

wprowadz.php

<?php
	session_start();
	require_once("connect.php");
	$polaczenie=@new mysqli($host,$db_user,$db_password,$db_name);
	if($polaczenie->connect_errno!=0)
	{
		echo $polaczenie->connect_errno;
	}

	$imie=$_POST['imie'];
	$nazwisko=$_POST['nazwisko'];
	$wprowadz="INSERT INTO autorzy(imie,nazwisko) value('$imie','$nazwisko')";
	if($polaczenie->query($wprowadz))
	{
		header("Location: index.php");
		$_SESSION["send"]="Wysłano";
	}
	else
	{
		echo "MySql error";
	}
$polaczenie->close();
?>

 

komentarz 24 marca 2017 przez seba Dyskutant (8,900 p.)
A może dlatego że uczę się PHP od miesiąca i dlatego tak robię. Ty robisz tak ja robie tak
komentarz 24 marca 2017 przez xandros Nałogowiec (29,450 p.)
Imho, do wykonania zadania nie jest potrzebna sesja. Zła praktyką jest używanie @, oraz niepotrzebne są znaczniki ?> na końcu pliku.

Po drugie, tej branży nie możesz takich uwag brać do siebie, a jedynie się na nich uczyć.

Także ciesze się, że się uczysz. Najważniejsze jest to, byś cały czas coś w tym kierunku robił. Pisał projekty etc. Ale musisz też uczyć się na błędach (Niestety, PHP wybacza pomyłki). Pamiętaj też, byś uczył się z wiarygodnych źródeł. Większość jest w jezyku angielskim, więc pewnych rzeczy nie przeskoczysz.
komentarz 24 marca 2017 przez seba Dyskutant (8,900 p.)

Doceniam, a odpowiadając na pytanie:

- "@ "użyłem aby użytkownik nie widział zbyt wiele gdyby połączenie z bazą danych się nie powiodło

- Zaś zmienne sesyjne wykorzystywane są to potwierdzenia wprowadzenia danych, jeśli cały zabieg się powiódł wyskakuje w indexie wiadomość potwierdzająca.

- "?>" używam aby zamknąć pisanie w PHP

- Kod SQL w htmlu bo nie miałem innego pomysłu i widziałem jak ludzie robią tak na okrągło.

komentarz 24 marca 2017 przez xandros Nałogowiec (29,450 p.)
ad @: ale później robisz echo $connect->connect_error; do ukrycia błędów na produkcji możesz użyć innej konfiguracji: http://php.net/manual/en/errorfunc.configuration.php

ad sessja: w opisie nic nie było o tym, by zaimplementować wiadomosci

ad ?>: no to już wiesz, że nie musisz tego używać: http://www.php-fig.org/psr/psr-2/#files

ad sql: no to niestety radzę ci zmienić źródło informacji. Wyrzuć to do osobnego pliku i osobnej funkcji. Ogólnie rób dużo funkcji. 1 działanie = 1 funkcja. Funkcja powinna robić dokładnie jedną rzecz oraz powinna robić to dobrze. 1. funkcja do połączenia z sqlem, 2. funkcja do pobrania wyników z sqla
komentarz 24 marca 2017 przez seba Dyskutant (8,900 p.)
Ciut się zagalopowałeś bo dałem connect_errno a nie connect_error czyli użytkownik widzi tylko numer błędu a nie od razu cały tekst typu "Access denied for user ''@'localhost' to database 'baza'";

 

Wiadomość dodałem żeby wyglądało to seksowniej ;)

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 327 wizyt
pytanie zadane 26 lutego 2023 w PHP przez gatka84 Bywalec (2,150 p.)
0 głosów
1 odpowiedź 349 wizyt
pytanie zadane 6 stycznia 2021 w PHP przez dequk Użytkownik (810 p.)
+1 głos
3 odpowiedzi 661 wizyt
pytanie zadane 2 października 2020 w PHP przez vingilot85 Obywatel (1,150 p.)

92,565 zapytań

141,416 odpowiedzi

319,596 komentarzy

61,948 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...