Właśnie zauważyłem, że ten temat powinien wylądować w przedszkolu. Proszę o przeniesienie.
Witam,
jestem początkującym w temacie programowania. Proszę o większą wyrozumiałość.
Napotkałem się z problemem w trakcie tworzenia formularza, który ma posiadać 2 listy rozwijana: (nazwa aktora, tytuł filmu). Po kliknięciu przycisku wyślij do tabeli obsada będzie dodawana nowa pozycja aktor i film, w którym zagrał.
Prowadzący zaproponował stworzenie funkcji, która będzie tworzyć listę rozwijana.
Tak też zrobiłem. Obie listy działają poprawnie (aktorzy: function getAktorsHtmlList($pdo) filmy: function getFilmsHtmlList($pdo))
Niestety nie umiem teraz zagnieździć tych funkcji w funkcji tworzącej formularz: function generateFromObsada($action)
Konfiguracje połączenia serwera oraz przesyłania danych już wykonałem.
Stworzyłem również funkcje wyświetlającą tabele obsada tak, aby widzieć czy została dodany kolejny rekord: function getObsadaHtmlList($pdo)
Zawartość serwera bazy danych:
tablica aktorzy (id_aktora, imie, nazwisko)
tablica filmy (id_filmu, tytul)
tablica obsada (id_obsady, id_aktora, id_filmu)
CODE
<?php
require_once 'include/settings.php';
/**
* Funkcja zwracająca nam rozwijana liste aktorow
* @param $pdo referencja do obiektu klasy PDO połączenia z bazą danych
*/
function getAktorsHtmlList($pdo)
{
$HTML_return_string="";
try {
$stmt = $pdo->prepare ( 'SELECT
imie,
nazwisko,
id_aktora
FROM
aktorzy;');
$stmt->execute();
$HTML_return_string .= '<b>Aktor: </b>';
$HTML_return_string .= '<select name="id_aktora">';
$HTML_return_string .= '<option value="">Wybierz aktora</option>'; //może być ale nie musi
foreach ($stmt as $row)
{
$HTML_return_string .= '<option value="' .$row['id_aktora'].'"> '.$row['imie'].' '.$row['nazwisko'].'</option>' ;
}
$HTML_return_string.= '</select>';
} catch (PDOException $e) {
$HTML_return_string.="Błąd zaypytania do bazy." .$e->getMessage();
}
return $HTML_return_string;
}
/**
* Funkcja zwracająca nam rozwijana liste filmow
* @param $pdo referencja do obiektu klasy PDO połączenia z bazą danych
*/
function getFilmsHtmlList($pdo)
{
$HTML_return_string="";
try {
$stmt = $pdo->prepare ( 'SELECT
tytul,
id_filmu
FROM
filmy;');
$stmt->execute();
$HTML_return_string .= '<b>Film: </b>';
$HTML_return_string .= '<select name="id_filmu">';
$HTML_return_string .= '<option value="">Wybierz film</option>'; //może być ale nie musi
foreach ($stmt as $row)
{
$HTML_return_string .= '<option value="' .$row['id_filmu'].'"> '.$row['tytul'].' </option>' ;
}
$HTML_return_string.= '</select>';
} catch (PDOException $e) {
$HTML_return_string.="Błąd zaypytania do bazy." .$e->getMessage();
}
return $HTML_return_string;
}
/**
* Funkcja zwracająca nam obsadę sformatowaną w HTML
* @param $pdo referencja do obiektu klasy PDO połączenia z bazą danych
*/
function getObsadaHtmlList($pdo)
{
$HTML_return_string="";
try {
$stmt = $pdo->prepare( 'SELECT
imie,
nazwisko,
tytul
FROM
obsada
cross join aktorzy on aktorzy.id_aktora=obsada.id_aktora
cross join filmy on filmy.id_filmu=obsada.id_filmu;');
$stmt->execute();
$HTML_return_string .= '</br><br/></br><b>Obsada filmów:</b><br/>';
$HTML_return_string .= '<u1>';
foreach ($stmt as $row)
{
$HTML_return_string.= '<li>Aktor: '.$row['imie'].' '.$row['nazwisko'].' Film: '.$row['tytul'].' </li>';
}
$stmt->closeCursor();
$HTML_return_string .= '<u1>';
} catch (PDOException $e) {
$HTML_return_string.="Zapytanie do bazy nie mogło zostać wykonane" .$e->getMessage();
}
return $HTML_return_string;
}
/**
* Funkcja generująca formularz
* @param string $action - nazwa skryptu do ktorego zostaną przesłane dane formularza
* @return string
*/
function generateFromObsada($action)
{
$form="";
$form.="<form action='$action' method='post'>".PHP_EOL;
$form.="<fieldset><legend> Obsada </legend>" .PHP_EOL;
$form.="<select name=id_aktora>";
$form.="<option></option>";
$form.="</select>".PHP_EOL;
$form.="<input type='submit' name='submit' value='Ustaw obsadę' /><br/>".PHP_EOL;
$form.="</fieldset>".PHP_EOL;
$form.="</form>".PHP_EOL;
return $form;
}
//Próba połączenia z bazą danych
try {
$pdo = new PDO("$DBEngine:host=$DBServer;dbname=$DBName", $DBUser, $DBPass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //Konfiguracja zgłaszania błedów poprzez wyjątki
} catch (PDOException $e) {
echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
die();
}
//Dodanie obsady gdy został przesłany formularz
if (isset($_POST['submit']))
{
//Dodajmy jak zostały przesłane pola aktor i film
// i żadne z nich nie jest puste
if(($_POST['id_aktora']!="Wybierz aktora") && ($_POST['id_filmu'] != "Wybierz film"))
{
try
{
$stmt=$pdo->prepare(' INSERT INTO obsada
(id_aktora,id_filmu)
VALUES (:id_aktora, :id_filmu);
');
$stmt->bindValue(':id_aktora', $_POST['id_aktora'], PDO::PARAM_STR);
$stmt->bindValue(':id_filmu', $_POST['id_filmu'], PDO::PARAM_STR);
$stmt->execute();
$stmt->closeCursor();
} catch (PDOException $e)
{
echo "nie udało się dodać rekordu do bazy: ".$e->getMessage();
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Edycja obsady</title>
</head>
<body>
<?php
//echo getAktorsHtmlList($pdo);
//echo getFilmsHtmlList($pdo);
echo generateFromObsada(basename(__FILE__));
echo getObsadaHtmlList($pdo);
?>
</body>
</html>
require_once 'include/settings.php';
/**
* Funkcja zwracająca nam rozwijana liste aktorow
* @param $pdo referencja do obiektu klasy PDO połączenia z bazą danych
*/
function getAktorsHtmlList($pdo)
{
$HTML_return_string="";
try {
$stmt = $pdo->prepare ( 'SELECT
imie,
nazwisko,
id_aktora
FROM
aktorzy;');
$stmt->execute();
$HTML_return_string .= '<b>Aktor: </b>';
$HTML_return_string .= '<select name="id_aktora">';
$HTML_return_string .= '<option value="">Wybierz aktora</option>'; //może być ale nie musi
foreach ($stmt as $row)
{
$HTML_return_string .= '<option value="' .$row['id_aktora'].'"> '.$row['imie'].' '.$row['nazwisko'].'</option>' ;
}
$HTML_return_string.= '</select>';
} catch (PDOException $e) {
$HTML_return_string.="Błąd zaypytania do bazy." .$e->getMessage();
}
return $HTML_return_string;
}
/**
* Funkcja zwracająca nam rozwijana liste filmow
* @param $pdo referencja do obiektu klasy PDO połączenia z bazą danych
*/
function getFilmsHtmlList($pdo)
{
$HTML_return_string="";
try {
$stmt = $pdo->prepare ( 'SELECT
tytul,
id_filmu
FROM
filmy;');
$stmt->execute();
$HTML_return_string .= '<b>Film: </b>';
$HTML_return_string .= '<select name="id_filmu">';
$HTML_return_string .= '<option value="">Wybierz film</option>'; //może być ale nie musi
foreach ($stmt as $row)
{
$HTML_return_string .= '<option value="' .$row['id_filmu'].'"> '.$row['tytul'].' </option>' ;
}
$HTML_return_string.= '</select>';
} catch (PDOException $e) {
$HTML_return_string.="Błąd zaypytania do bazy." .$e->getMessage();
}
return $HTML_return_string;
}
/**
* Funkcja zwracająca nam obsadę sformatowaną w HTML
* @param $pdo referencja do obiektu klasy PDO połączenia z bazą danych
*/
function getObsadaHtmlList($pdo)
{
$HTML_return_string="";
try {
$stmt = $pdo->prepare( 'SELECT
imie,
nazwisko,
tytul
FROM
obsada
cross join aktorzy on aktorzy.id_aktora=obsada.id_aktora
cross join filmy on filmy.id_filmu=obsada.id_filmu;');
$stmt->execute();
$HTML_return_string .= '</br><br/></br><b>Obsada filmów:</b><br/>';
$HTML_return_string .= '<u1>';
foreach ($stmt as $row)
{
$HTML_return_string.= '<li>Aktor: '.$row['imie'].' '.$row['nazwisko'].' Film: '.$row['tytul'].' </li>';
}
$stmt->closeCursor();
$HTML_return_string .= '<u1>';
} catch (PDOException $e) {
$HTML_return_string.="Zapytanie do bazy nie mogło zostać wykonane" .$e->getMessage();
}
return $HTML_return_string;
}
/**
* Funkcja generująca formularz
* @param string $action - nazwa skryptu do ktorego zostaną przesłane dane formularza
* @return string
*/
function generateFromObsada($action)
{
$form="";
$form.="<form action='$action' method='post'>".PHP_EOL;
$form.="<fieldset><legend> Obsada </legend>" .PHP_EOL;
$form.="<select name=id_aktora>";
$form.="<option></option>";
$form.="</select>".PHP_EOL;
$form.="<input type='submit' name='submit' value='Ustaw obsadę' /><br/>".PHP_EOL;
$form.="</fieldset>".PHP_EOL;
$form.="</form>".PHP_EOL;
return $form;
}
//Próba połączenia z bazą danych
try {
$pdo = new PDO("$DBEngine:host=$DBServer;dbname=$DBName", $DBUser, $DBPass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //Konfiguracja zgłaszania błedów poprzez wyjątki
} catch (PDOException $e) {
echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
die();
}
//Dodanie obsady gdy został przesłany formularz
if (isset($_POST['submit']))
{
//Dodajmy jak zostały przesłane pola aktor i film
// i żadne z nich nie jest puste
if(($_POST['id_aktora']!="Wybierz aktora") && ($_POST['id_filmu'] != "Wybierz film"))
{
try
{
$stmt=$pdo->prepare(' INSERT INTO obsada
(id_aktora,id_filmu)
VALUES (:id_aktora, :id_filmu);
');
$stmt->bindValue(':id_aktora', $_POST['id_aktora'], PDO::PARAM_STR);
$stmt->bindValue(':id_filmu', $_POST['id_filmu'], PDO::PARAM_STR);
$stmt->execute();
$stmt->closeCursor();
} catch (PDOException $e)
{
echo "nie udało się dodać rekordu do bazy: ".$e->getMessage();
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Edycja obsady</title>
</head>
<body>
<?php
//echo getAktorsHtmlList($pdo);
//echo getFilmsHtmlList($pdo);
echo generateFromObsada(basename(__FILE__));
echo getObsadaHtmlList($pdo);
?>
</body>
</html>