Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Formularz z listą rozwijana, pobraną z MySQL, Formularz z dwiema rozwijanymi listami, dane z MySql
gmarcing
post 29.04.2017, 08:01:35
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 29.04.2017

Ostrzeżenie: (0%)
-----



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>


Ten post edytował gmarcing 29.04.2017, 08:05:32
Go to the top of the page
+Quote Post
Tomplus
post 29.04.2017, 08:14:07
Post #2





Grupa: Zarejestrowani
Postów: 1 835
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


1. To nie jest programowanie obiektowe. Stosowanie obiektów, nie kwalifikuje że programujesz obiektowo.
2. Zamiast tagu CODE, stosuj PHP.

3. zamiast tworzyć listę HTML aktorów czy filmów, stwórz funkcję która będzie zwracać tylko i wyłącznie tablice z aktorami i filmami.
Wtedy możesz do funkcji tworzącej formularz dodać taką listę.

  1. function generateForm($pdo, $aktorzy, $filmy) {
  2. foreach($aktorzy as $aktor) {
  3. //option id='".$aktor['id']."'>".$aktor['nazwisko']."
  4. }
  5. //.. etc
  6. }
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.04.2024 - 16:35