#107 peter
Zacal som na tom robit hned ako som mal cas vzhladom na to, ze som mal aj ine predmety :)
Tak mozme uzavriet tuto temu. Dakujem kazdemu kto sa mi tu snazil nejak pomoct! :)
Ako mam prosim spravit aspon tie checkboxy, aby mi to nacitalo z databaze a zaroven mi to nemenilo tam, ale len pridalo do inej tabulky?
toto je jeden checkbox vo forme.. viem, ze to mam spravit nejak cez to pole (zaner[]) a nejak tak aj ten kod vo value priblizne... mozno nejaka chyba tam aj tak je, ale este nieco aj pred to musim dat... prehladal som snad cely internet a nasiel som rozne, ale nie take ako potrebujem ja..
<input type="checkbox" name="zaner[]" value="<?php echo $row["id_zaner"]?>" >Akčný<br>
Skusil som to s while presne podla postupu, ktory si napisal, ale co nasleduje po while(($row = $stmt->fetch(PDO::FETCH_ASSOC))!==false) {var_dump($row); ?? Lebo bud som tam napisal blbost alebo mi to z nejakeho dovodu aj tak nefunguje...
Kit ten count tam je na strankovanie...
Hlavne co neviem teraz vyriesit su 2 veci... 1.) sice vysledky zo spojovacej tabulky mi napise, ale nenapise mi tam nazvy, ale len IDcka 2.) mam vypisane v tabulke zanre filmov a chcem aby sa to precitalo z tej tabulky a na stranke sa to zobrazilo ako checkboxy s tym, ze do databaze sa mi ta tabulka so zanrami menit nebude, ale len sa ID daneho zanru spoji s ID filmu, ktory pridam a spoji sa mi to v spojovacej tabulke... Potom by som chcel to iste spravit, ale tak, ze sa mi do checkboxu vypisu filmy, ktore uz su pridane v databaze (a aj ked sa prida dalsi, aby ho tam tiez potom doplnilo pri obnoveni stranky) a spojilo nasledne ID toho herca s filmami.
A ja viem, ze pisem uz dost chaoticky, ale nenormalne ma tlaci cas a som pod velkym stresom a uz mam pocit, ze to ani nestihnem spravit :). Nepisal som do ziadneho ineho fora vsetko mam bud odtial alebo co ja nejak zmotam alebo co najdem na nete.
hmm..nejak nevlozilo kod..
<?php
if (isset($_GET['offset'])) {
$offset = (int)$_GET['offset'];
} else {
$offset = 0;
}
$count = $db->query("SELECT COUNT(id_filmy_herci) FROM filmy_herci")->fetchColumn();
$stmt = $db->prepare("SELECT * FROM filmy_herci ORDER BY id_film ASC LIMIT 10 OFFSET ?");
$stmt->bindValue(1, $offset, PDO::PARAM_INT);
$stmt->execute();
$filmy = $stmt->fetchAll();
?>
<?php foreach($filmy as $row) { ?>
<tr>
<td><?php echo $row['id_herec']; ?></td>
<td><?php echo $row['id_film']; ?></td>
<td>
<?php if (isset($_SERVER['PHP_AUTH_USER'])) { ?>
<a href='upravit.php?id=<?= $row['id']?>'>Upraviť</a> /
<a href='odstranit.php?id=<?= $row['id']?>'>Odstrániť</a>
<?php } ?>
</td>
</tr>
<?php } ?>
Este jeden dotaz.. mam kod na vypisanie dat na stranku zo spojovacej tabulky, ale vypise mi tam len idcka nie cele nazvy. Ako to opravit? Mam tabulky herec a tam id_herec a herec dalej tabulka film a tam id_film a film a v spojovacia filmy_herci kde mam id_filmy_herci a id_film a id_herec ako cudzie kluce...
** tabulka sa vola zaner a je tam id_zaner a zaner
#95 Kit
Hmm..takze nevies mi poradit co je tam zle? Vypise mi to len 1 checkbox bez nejakeho textu... Urcite je tam aj viac tych chyb alebo nejaku blbost som spravil...
<?php
foreach ($_POST['zaner'] as $row) {
$sql = "SELECT * FROM zaner";
}
?>
<input type="checkbox" name="zaner[]" value="<?php echo $zaner["id_zaner"]?>">
Preco pri zadani takehoto kodu
$count = $db->query("SELECT COUNT(id_film) FROM film")->fetchColumn();
$stmt = $db->prepare("SELECT * FROM film, herec ORDER BY film, herec ASC LIMIT 10 OFFSET ?");
$stmt->bindValue(1, $offset, PDO::PARAM_INT);
$stmt->execute();
$film = $stmt->fetchAll();
sa mi nakopiruju rovnake vysledky do tabulky na stranke? Aby som to presne vysvetlil, tak mam v tabulke filmy zaznamy: a, b, c ...v tabulke herec: aa, bb, cc... na stranke v tabulke sa to zobrazi asi takto a-aa, a-bb, a-cc, b-aa, b-bb, b-cc, c-aa, c-bb, c-cc... pricom som nasiel, ze SELECT * FROM table1 table2.... je validne
#89 z_moravec
Dakujem!
Uz to ide aspon vypisat, ale ak tam zadam z formulara co je na strnake film a herca k tomu, tak mi tam da k filmu ID napr. 3 ale ku hercovi do druhej tabulky mi to hodi ID 4 a tym ppadom ak to tam v spojovacej tabulke necham vypisat tak mi tam ukaze bud filmy alebo len hercov a tu druhu cast mi da ako NULL, kedze sa tam nezhoduju IDcka. Ako prosim mozem tomu predist?
Ak zadam v phpmyadmin do sql tento prikaz
SELECT
a.herec
b.film
FROM
herec a
LEFT JOIN film b ON a.id_herec=b.id_film
tak mi to vypise takuto chybu. Davam nespravny dotaz??
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.film
FROM
herec a
LEFT JOIN film b ON a.id_herec=b.id_film
LIMIT 0, 25' at line 3
No aspon nejaky pokrok konecne :D...
Tak a teraz ako dosiahnem, aby vysledna tabulka filmy_herci nebola prazdna, ale aby sa mi tam vkladali tie jednotlive filmy a herci tak ako k sebe patria? Alebo v phpmyadmin bude ta vysledna tabulka stale zobrazena prazdna??
Och.. mam uz aspon tie tabulky vytvorene spravne?? Este tam potom pridam primary key do tabulky filmy_herci...
CREATE TABLE IF NOT EXISTS `film` (
`id_film` int(11) NOT NULL,
`film` varchar(60) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `filmy_herci` (
`id_film` int(11) NOT NULL,
`id_herec` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `herec` (
`id_herec` int(11) NOT NULL,
`herec` varchar(60) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
ALTER TABLE `film`
ADD PRIMARY KEY (`id_film`);
ALTER TABLE `filmy_herci`
ADD KEY `id_film` (`id_film`), ADD KEY `id_herec` (`id_herec`);
ALTER TABLE `herec`
ADD PRIMARY KEY (`id_herec`);
ALTER TABLE `film`
MODIFY `id_film` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3;
ALTER TABLE `herec`
MODIFY `id_herec` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3;
ALTER TABLE `filmy_herci`
ADD CONSTRAINT `filmy_herci_ibfk_1` FOREIGN KEY (`id_film`) REFERENCES `film` (`id_film`),
ADD CONSTRAINT `filmy_herci_ibfk_2` FOREIGN KEY (`id_herec`) REFERENCES `herec` (`id_herec`);
Ked ono mi to nejak nechce prepojit tie tabulky alebo ja robim nieco zle. Aj ked som to skusil aj podla toho kodu co si posielal s tym kde je REFERENCES... a mne to vytvorilo takuto tabulku...
CREATE TABLE IF NOT EXISTS `vypis` (
`film` int(11) DEFAULT NULL,
`herec` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
A tiez nehapem uplne, ze ak ta tabulka bude vytvorena spravne, tak tam sa mi budu automaticky vkladat udaje ked vlozim nieco do taublky filmy a herci alebo nie?
Hmm.. tak to je v prdeli, pretoze teraz mi vlastne nefunguju vobec ani tie prikazy na upravenie a zmazanie aj ked som sa to snazil nejak upravit. Musim to asi uplne prepisat ak toto ma mazat udaje z takto prepojenych tabuliek. I ked mi napadlo, ze ta vysledna tabulka v ktorej sa to ma upravovat a mazat tak to ma mazat len odtial aby nezmazalo aj ine riadky, ale zase tam nie je ID zaznamu. No ale hlavne, ze mne ani nevypise tu vyslednu tabulku vobec..
#71 ondrej39
Skusil som najprv ten tvoj kod, ze co to vypise a ako to bude vyzerat, ale po zbeznom prepisani mi to nefunguje velmi. Pokial tam nedam tento riadok, tak mi to vypise nazvy filmov, ktore mam v tabulke filmy, ale ak to tam necham, tak mi napise chybu... Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'where clause'' in C:\xampp\htdocs\b\index.php:49 Stack trace: #0 C:\xampp\htdocs\b\index.php(49): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\b\index.php on line 49
$stmt->execute(["id" => $film->film_id]);
Tu je ten kod ako som to v rychlosti upravil len to potrebne kedze ma uz velmi tlaci cas a zacinam trochu panikarit, ze to nestihnem...
<?php
@ini_set('error_reporting', E_ALL);
@ini_set("display_errors", "on");
$dsn = "mysql:host=127.0.0.1;dbname=film_herci;charset=utf8";
$db = new PDO($dsn, "root", "");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// query pro získání údajů
$query_vypisFilmy = "SELECT * FROM filmy";
$query_vypisKraj = "SELECT meno FROM herci JOIN vypis ON herci_id = herec WHERE id = :id";
// načtení infa o filmech do proměnné $result
$stmt = $db->prepare($query_vypisFilmy);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_OBJ);
?>
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta name="description" content="Databáza filmov" />
<link rel="stylesheet" rel="nofollow" href="styl.css" type="text/css" />
<title>Filmy</title>
</head>
<body>
<header>
<div><h1>Databáza filmov</h1></div>
<nav>
<ul>
<li class="aktivni"><a rel="nofollow" href="index.php">Zoznam filmov</a></li>
<li><a rel="nofollow" href="pridat.php">Pridať film</a></li>
</ul>
</nav>
</header>
<article>
<div id="centrovac">
<header>
<h1>Zoznam filmov</h1>
</header>
<section>
<table id="t01">
<tr>
<th>HEREC</th>
<th>FILM</th>
</tr>
<?php foreach ($result as $film) {
// připravení statementu pri získání krajin daného filmu
$stmt = $db->prepare($query_vypisKraj);
//$stmt->execute(["id" => $film->film_id]);
// získané krajiny
$krajiny = $stmt->fetchAll(PDO::FETCH_OBJ);
?>
<tr>
<td><?php
foreach ($krajiny as $kraj) {echo $kraj->meno . ", ";}
?></td>
<td><?php echo $film->nazov; ?></td>
</tr>
<?php } ?>
</table>
</p>
</section>
</div>
</article>
</body>
</html>
Este tu si nie som isty ci som dobre spravil prepojenie s konecnou tabulkou aj ked snad ano...
CREATE TABLE IF NOT EXISTS `filmy` (
`film_id` bigint(20) unsigned NOT NULL,
`nazov` varchar(60) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
-- Štruktúra tabuľky pre tabuľku `herci`
CREATE TABLE IF NOT EXISTS `herci` (
`herci_id` bigint(20) unsigned NOT NULL,
`meno` varchar(60) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
-- Štruktúra tabuľky pre tabuľku `vypis`
CREATE TABLE IF NOT EXISTS `vypis` (
`film` int(11) NOT NULL,
`herec` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Kľúče pre exportované tabuľky
--
--
-- Indexy pre tabuľku `filmy`
--
ALTER TABLE `filmy`
ADD PRIMARY KEY (`film_id`), ADD UNIQUE KEY `film_id` (`film_id`);
--
-- Indexy pre tabuľku `herci`
--
ALTER TABLE `herci`
ADD PRIMARY KEY (`herci_id`), ADD UNIQUE KEY `herci_id` (`herci_id`);
--
-- AUTO_INCREMENT pre exportované tabuľky
--
--
-- AUTO_INCREMENT pre tabuľku `filmy`
--
ALTER TABLE `filmy`
MODIFY `film_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=7;
--
-- AUTO_INCREMENT pre tabuľku `herci`
--
ALTER TABLE `herci`
MODIFY `herci_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
#69 smiesek
S tymi krajinami sa snad chapeme ako som to myslel :). A zadanie nemame presne urcene. Musi to byt proste nejaka php aplikacia a vzhladom na to, ze ja sa v tom az tak neorientujem, tak nejaka napriklad databaza filmov mala byt viac menej jedna z najlahsich moznych. Momentalne jedina podmienka tam je taka, ze musi tam byt minimalne jeden M:N vztah.
Nerad by som to uz nejak velmi menil, ale to s tymi hercami a filmami mi napadlo tiez len som myslel ci by to neslo nejak este s tym povodnym co som mal. Ale tak asi to skusim takto.
Takze spravim 2 tabulky kde v jednej budu herci a v druhej filmy. No a v tretej sa to nejak pospaja a teda vysledna tabulka, ktora bude zobrazena na stranke bude taktiez aj v MySQL vytvorena? Alebo to na stranku vypisem len napr. pomocou LEFT JOIN?
A taktiez nejak si to momentalne neviem predstavit ako to bude s formularom teda, aby sa herec pridal ku hercom a film ku filmom, ale aby to bol jeden formular. No idem sa na to pozriet a snad mi to dojde nejak...
Hmm.. teda mam vytvorit tabulku kde bude len nazov/rok/dlzka a dalsiu kde bude len krajina a to spojit do tretej tabulky?
Ano jasne, na nete som si nasiel definicie tych zakladnych vztahov tabuliek, medzi ktore patri aj to M:N. Mne ide skor o to pochopenie ako to vlastne cele spravit v praxi. Teda ked si vezmem, ze ja mam tu databazu filmov. Takze 1 film moze tocit viac krajin a taktiez z 1 krajiny moze pochadzat viac filmov. Dufam, ze to zatial sedi. Ale nejak nevidim jak musim spravit tabulky a hlavne, aby sa mi v konecnej tabulke na stranke to zobrazilo tak ako to mam teraz (nazov/rok/krajina/dlzka). A tym padom musim nejakym sposobom upravit aj formular na stranke kde sa daju pridat jednotlive filmy nie?
Takze dalsi update... Rozbehal som aj to upravovanie jednotlivych riadkov. Uz len to nejak spravit, aby to mohol upravovat len nejaky admin. Ale to M:N absolutne netusim
Tak stal sa asi zazrak, ale to odstranovanie zaznamu som nakoniec nejak rozbehal ako som to skusal a skusal a skusal... Tak idem na to dalsie co nefunguje...
#56 ondrej39
Ale ved tam mam get nie? Ci to nejak inac musim dat? Ja som fakt uplny zaciatocnik a v php sa fakt nevyznam.
A vedel by mi niekto prosim pomoct aj s tym druhym zdrojakom kde ide o upravovanie riadku v databaze s tym, ze mam vedla kazdeho riadka tlacidlo urpavit a ked na to kliknem tak to upravi len ten konkretny riadok podla id a tiez ako spravit nejaky vztah M:N...
Ak zrusim presmerovanie v prikaze delete.. tak mi to zobrazi len cistu stranku a ziadnu chybu nevypise..
A to zrusit to je skutocne zrusit ako pises a nie zmazat.. tieto 2 prikazy mam rozdelene ako mozes vidiet podla zdrojakov.
este taktiez pridavam aj moznost upravit alebo odstranit pridany film.. mam tam jednoduche kody na to, ktore by mali fungovat :D ale ked dam odstranit tak sa len reloadne stranka a nic sa nezmaze.. a ked dam upravit tak vpylnim normalne formular, ale nic sa neprepise..
odstranit
<?php
@ini_set('error_reporting', E_ALL);
@ini_set("display_errors", "on");
$dsn = "mysql:host=127.0.0.1;dbname=zoznam_filmov;charset=utf8";
$db = new PDO($dsn, "root", "");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $db->prepare("DELETE FROM filmy WHERE id=?");
$stmt->execute(array($_GET['id']));
header('Location: index.php');
?>
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta name="description" content="Databáza filmov" />
<link rel="stylesheet" href="styl.css" type="text/css" />
<title>Filmy</title>
</head>
<body>
</body>
</html>
upravit
<?php
@ini_set('error_reporting', E_ALL);
@ini_set("display_errors", "on");
$dsn = "mysql:host=127.0.0.1;dbname=zoznam_filmov;charset=utf8";
$db = new PDO($dsn, "root", "");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>
<?php
$stmt = $db->prepare("SELECT * FROM filmy WHERE id=?");
$stmt->execute(array($_GET['id']));
$film = $stmt->fetch();
//if (!$film){
// die("Nastala chyba, skúste to neskôr.");
//}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$id = $_POST['id'];
$nazov = $_POST['nazov'];
$rok = $_POST['rok'];
$krajina = $_POST['krajina'];
$dlzka = $_POST['dlzka'];
$stmt = $db->prepare("UPDATE filmy SET nazov=?, rok=?, krajina=?, dlzka=? WHERE id=?");
$stmt->execute(array($nazov, $rok, $krajina, $dlzka, $id));
header('Location: index.php');
}
?>
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta name="description" content="Databáza filmov" />
<link rel="stylesheet" href="styl.css" type="text/css" />
<title>Filmy</title>
</head>
<body>
<header>
<div><h1>Databáza filmov</h1></div>
</header>
<article>
<div id="centrovac">
<header>
<h1>Upraviť film</h1>
</header>
<section>
<p>
<form method="POST">
Názov<br/>
<input type="text" name="nazov" value="<?php $film['nazov'] ?>"><br/>
Rok<br/>
<input type="number" name="rok" value="<?php $film['rok'] ?>"><br/>
Krajina<br/>
<input type="text" name="krajina" value="<?php $film['krajina'] ?>"><br/>
Dĺžka<br/>
<input type="number" name="dlzka" value="<?php $film['dlzka'] ?>"><br/>
<br/>
<input type="hidden" name="id" value="<?php $film['id'] ?>">
<input type="submit" value="Uložiť"> alebo <a href="index.php">Zrušiť</a>
</form>
</section>
</div>
</article>
</body>
</html>
zdravim znova..
prosim, potrebujem poradit este, ze musim tam doplnit nejaky vztah M:N... Pozrel som si na nete, ze o aky vztah to ide, ale nejak neviem ako to mam urobit v tom php resp. MySQL. Zatial mam len tu jednu tabulku kde zadavam nazov filmu, rok, krajinu a dlzku. Viete mi poradit prosim?
Dakujem!!
Aha.. Tak to som nevedel toto.. diky!
A ako je mozne urobit, aby som tam nemohol pridat film, ktory uz v tabulke je? Snazim sa to najst cez google, ale nejak sa mi to nedari.
Tak moja stranka s formularom vyzera cela takto.. je ten formular zle napisany?
<?php
$dsn = "mysql:host=127.0.0.1;dbname=zoznam_filmov;charset=utf8";
$db = new PDO($dsn, "root", "");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>
<!DOCTYPE html>
<html lang="cs-cz">
<head>
<meta charset="utf-8">
<meta name="description" content="Databáza filmov" />
<link rel="stylesheet" href="styl.css" type="text/css" />
<title>Filmy</title>
</head>
<body>
<header>
<div><h1>Databáza filmov</h1></div>
<nav>
<ul>
<li><a href="index.php">Zoznam filmov</a></li>
<li class="aktivni"><a href="pridat.php">Pridať film</a></li>
</ul>
</nav>
</header>
<article>
<div id="centrovac">
<header>
<h1>Pridať film</h1>
</header>
<section>
<p>
<?php
if ($_POST)
{
$query = "INSERT INTO filmy (nazov, rok, krajina, dlzka) VALUES (?, ?, ?, ?)";
$insert = $db->prepare($query);
$insert->execute(array($_POST['nazov'], $_POST['rok'], $_POST['krajina'], $_POST['dlzka']));
echo('<p>Film bol úspešne pridaný</p>');
}
?>
<form method="post">
Názov:<br/>
<input type="text" name="nazov"/><br/>
Rok vydania:<br/>
<input type="text" name="rok"/><br/>
Krajina:<br/>
<input type="text" name="krajina"/><br/>
Dĺžka:<br/>
<input type="text" name="dlzka"/><br/>
<br/>
<input type="submit" value="Pridať film"/>
</form>
</p>
</section>
</div>
</article>
</body>
</html>
#37 Kit
Takze staci urobit takuto zmenu? S tym if post?
<?php
if ($_POST)
{
$dsn = "mysql:host=127.0.0.1;dbname=zoznam_filmov;charset=utf8";
$db = new PDO($dsn, "root", "");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = "INSERT INTO filmy (nazov, rok, krajina, dlzka) VALUES (?, ?, ?, ?)";
$insert = $db->prepare($query);
$insert->execute(array($_POST['nazov'], $_POST['rok'], $_POST['krajina'], $_POST['dlzka']));
echo('<p>Film bol úspešne pridaný</p>');
}
?>
Skusil som to este podla dokumentacie co poslal z_moravec. Vyzera to v celku fajn. Musel som vratit subor Db.php. Formular na stranke vyzera tak ako ma, neodosiela to pri prepinani menu, ale az po kliknuti na odoslat. No problem je v tom, ze tam mi neprida vobec nic do tabulky. Neviem ktora moznost je lepsia alebo jednoduchsia, tak pridavam kod aj z tejto varianty.
<?php
if ($_POST)
{
$stmt = $db->prepare('INSERT INTO filmy (nazov, rok, krajina, dlzka) VALUES (?, ?, ?, ?)');
$stmt->bindParam(1, $_POST['nazov']);
$stmt->bindParam(2, $_POST['rok']);
$stmt->bindParam(3, $_POST['krajina']);
$stmt->bindParam(4, $_POST['dlzka']);
echo('<p>Film bol úspešne pridaný</p>');
}
?>
#30 peter
Tabulku mam urcite vytvorenu a skusil som nastavit hodnoty vsetkeho okrem id na NULL. Tak teraz mi to akoze funguje, ale aj ked kliknem len na menu, ze "pridat film" tak mi to hned prida prazdny riadok a nad formularom mi vypise este chyby.
Notice: Undefined index: nazov in C:\xampp\htdocs\a\pridat.php on line 37
Notice: Undefined index: rok in C:\xampp\htdocs\a\pridat.php on line 37
Notice: Undefined index: krajina in C:\xampp\htdocs\a\pridat.php on line 37
Notice: Undefined index: dlzka in C:\xampp\htdocs\a\pridat.php on line 37
A moj povodny pokusny kod na toto bol takyto...teraz skusam to od Kita
<?php
if ($_POST)
if ($_POST)
{
Db::query('INSERT INTO filmy (nazov, rok, krajina, dlzka) VALUES (?, ?, ?, ?)', $_POST['nazov'], $_POST['rok'], $_POST['krajina'], $_POST['dlzka']);
echo('<p>Film bol úspešne pridaný</p>');
}
?>
#28 Kit
Ak som pochopil spravne, tak v pridat.php mam php kod ktory vyzera takto...
<?php
$dsn = "mysql:host=127.0.0.1;dbname=zoznam_filmov;charset=utf8";
$db = new PDO($dsn, "root", "");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = "INSERT INTO filmy (nazov, rok, krajina, dlzka) VALUES (?, ?, ?, ?)";
$insert = $db->prepare($query);
$insert->execute(array($_POST['nazov'], $_POST['rok'], $_POST['krajina'], $_POST['dlzka']));
echo('<p>Film bol úspešne pridaný</p>');
?>
S tym, ze Db.php som zmazal. No ked spustim teraz localhost/a/pridat.php tak mi vyhodi tieto chyby.
Notice: Undefined index: nazov in C:\xampp\htdocs\a\pridat.php on line 37
Notice: Undefined index: rok in C:\xampp\htdocs\a\pridat.php on line 37
Notice: Undefined index: krajina in C:\xampp\htdocs\a\pridat.php on line 37
Notice: Undefined index: dlzka in C:\xampp\htdocs\a\pridat.php on line 37
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'nazov' cannot be null' in C:\xampp\htdocs\a\pridat.php:37 Stack trace: #0 C:\xampp\htdocs\a\pridat.php(37): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\a\pridat.php on line 37
Mozno som to zle pochopil jak som to mal urobit...
#21 z_moravec
Tak ja tam mam len toto
<?php
$db = new PDO('mysql:host=127.0.0.1;dbname=zoznam_filmov;charset=utf8','root','');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
?>
Myslel som, ze to staci kedze mi to normalne vypisalo tabulku. Takze musim tam pridat triedu Db s metodou query?
este dodam, ze mi to vyhadzuje takyto error
Fatal error: Class 'Db' not found in C:\xampp\htdocs\a\pridat.php on line 37
smiesek, tamto uz je v poriadku
Uz som to dokazal dat nejak dokopy pomocou roznych navodov a vsetkeho mozneho. Ale trapi ma teraz, ze ked mam formular na stranke kde sa da pridat nejaky film, tak mi to vyhodi po potvrdeni stale nejaky error a dava mi to niekde v tomto riadku. Kde je prosim problem?
Db::query('INSERT INTO filmy (nazov, rok, krajina, dlzka) VALUES (?, ?, ?, ?)', $_POST['nazov'], $_POST['rok'], $_POST['krajina'], $_POST['dlzka']);
Okej takze skusil som to vsetko podla navodu, ktory som nasiel. Ale je cas vytvorit vlastnu databazu. No nejak som sa zasekol, pretoze po vytvoreni databazy v MySQL sa mi vytvoril priecinok s nazvom databaze a v nom su 3 typy suborov. *.opt, *.frm, *.ibd. Ale ked som to skusal podla toho navodu, tak sice tiez som tam mal taketo subory, ale zo stranky som si stiahol subor s nazvom Db.php, ktory som pripojil do mojich php suborov a ono sa to pripojilo k danej databaze. No teraz nejak netusim odkial vzali to Db.php resp. podla coho ho vytvorili? Tam sa o tom nejak nezmienili a ja som sa zasekol na tomto kroku.
Hmm..tak nejak sa to "opravilo" samo... Nic som nemenil take podstatne, ale uz to ide..
Takze uz sa mi podarilo to tam nejak pripojit. Diky za rady! Len teraz ked to skusam cez apache nechapem problemu. Mam to v priecinku "a" a stranka ma menu kde je zoznam filmov a v druhom moznost pridat film. Ak zadam adresu localhost/a/ nacita mi to normalne. Ak dam localhost/a/index.php alebo localhost/a/pridat.php tak mi to nacita tiez normalne. Ale ak chcem normalne na stranke kliknutim na menu prejst z jednej na druhu stranku alebo kludne aj ked kliknem na tu istu, tak mi to vyhodi chybu 404 objek nenalezen s tym, ze adresu mi zmeni na localhost/a/index.html alebo localhost/a/pridat.html. Co robim zle prosim?
Tak stiahol a nainstaloval som si xamp. Takze apache mam, MySQL mam, editor mam. Dokazal som uz aj vytvorit nejaku tabulku v MySQL, ale neviem ako to pripojit do php suboru. Nasiel som na internete, ze to ide cez nejaky wrapper. Skusil som to cez to, ale v tom pripade mi uplne vyskoci nejaky error ked otvorim index.php. No tam som tomu velmi nepochopil, takze je mozne, ze som niekde spravil chybu alebo tomu inac pochopil.
Zdravim,
moja otazka je asi pre vela z vas blba, ale potrebujem napisat do skoly php aplikaciu. Ide konkretne o nejaku databazu filmov napriklad. No a kedze ja som v tomto uplny novacik, tak ani neviem co k tomu vlastne vsetko potrebujem spravit. Asi databazu v MySQL s tymi filmami, php subor ale co v nom vobec by malo byt?
Dakujem za kazdu radu.
jeste prosim.. musim udelat dokumentaci pres javadoc, ale mi hodi chybu, kterou nemuzu najit nikde
javadoc: error - The -encoding option may be specified no more than once
uffff.. uz jsem to nejak udelal.. vypada ze to funguje.. dekuji za rady!!
prikazJdi jsem opravil takhle...
package logika;
/**
* Třída PrikazJdi implementuje pro hru příkaz jdi.
* Tato třída je součástí jednoduché textové hry.
*
*@author
*@version pro školní rok 2014/2015
*/
class PrikazJdi implements IPrikaz {
private static final String NAZEV = "jdi";
private HerniPlan plan;
private Hra hra;
/**
* Konstruktor třídy
*
* @param plan herní plán, ve kterém se bude ve hře "chodit"
*/
public PrikazJdi(HerniPlan plan) {
this.plan = plan;
this.hra = hra;
}
/**
* Provádí příkaz "jdi". Zkouší se vyjít do zadaného prostoru. Pokud prostor
* existuje, vstoupí se do nového prostoru. Pokud zadaný sousední prostor
* (východ) není, vypíše se chybové hlášení.
*
*@param parametry - jako parametr obsahuje jméno prostoru (východu),
* do kterého se má jít.
*@return zpráva, kterou vypíše hra hráči
*/
@Override
public String proved(String... parametry) {
if (parametry.length == 0) {
// pokud chybí druhé slovo (sousední prostor), tak ....
return "Kam mám jít? Musíš zadat jméno východu";
}
String smer = parametry[0];
// zkoušíme přejít do sousedního prostoru
Prostor sousedniProstor = plan.getAktualniProstor().vratSousedniProstor(smer);
if (sousedniProstor == null) {
return "Tam se odsud jít nedá!";
}
if (sousedniProstor.isZamcena()) {
return "Místnost: '" + sousedniProstor.getNazev() + "' je uzamčena, musíš jí napřed odemknout";
}
else {
if (sousedniProstor.getNazev().equals("tmavaJeskyne")) {
if (plan.getBatoh().obsahujeVec("!sekeraDrakobijce")) {
plan.setAktualniProstor(sousedniProstor);
return sousedniProstor.dlouhyPopis();
}
else {
hra.setKonecHry(true);
return "Prohral jsi.";
}
}
else {
plan.setAktualniProstor(sousedniProstor);
return sousedniProstor.dlouhyPopis();
}
}
}
/**
* Metoda vrací název příkazu (slovo které používá hráč pro jeho vyvolání)
*
* @ return nazev prikazu
*/
@Override
public String getNazev() {
return NAZEV;
}
}
no hodi mi to chybu tady jak je ui.hraj(); a rika furt null pointer exception in prikazJdi..
package main;
import logika.*;
import uiText.TextoveRozhrani;
/*******************************************************************************
* Třída {@code Start} je hlavní třídou projektu,
* který ...
*
* @author
* @version
*/
public final class Start
{
/***************************************************************************
* Metoda, prostřednictvím níž se spouští celá aplikace.
*
* @param args Parametry příkazového řádku
*/
public static void main(String[] args)
{
IHra hra = new Hra();
TextoveRozhrani ui = new TextoveRozhrani(hra);
if(args.length == 0)
{
ui.hraj();
}
else
{
ui.hrajZeSouboru(args[0]);
}
}
private Start(){}
}
ja jsem z toho uplne debil..zkousel jsem to i nejak jinak napsat, ale nejde mi to..
och..nevim co jsem s tim udelal vsechno.. ted mi to zase neukonci hru jen rekne mi, ze jsem mrtvy, ale hraju dal..
#2 Kit
to je ten prikazJdi
/**
* Třída PrikazJdi implementuje pro hru příkaz jdi.
* Tato třída je součástí jednoduché textové hry.
*
*@author
*@version
*/
class PrikazJdi implements IPrikaz {
private static final String NAZEV = "jdi";
private HerniPlan plan;
private Hra hra;
/**
* Konstruktor třídy
*
* @param plan herní plán, ve kterém se bude ve hře "chodit"
*/
public PrikazJdi(HerniPlan plan) {
this.plan = plan;
}
/**
* Provádí příkaz "jdi". Zkouší se vyjít do zadaného prostoru. Pokud prostor
* existuje, vstoupí se do nového prostoru. Pokud zadaný sousední prostor
* (východ) není, vypíše se chybové hlášení.
*
*@param parametry - jako parametr obsahuje jméno prostoru (východu),
* do kterého se má jít.
*@return zpráva, kterou vypíše hra hráči
*/
@Override
public String proved(String... parametry) {
if (parametry.length == 0) {
// pokud chybí druhé slovo (sousední prostor), tak ....
return "Kam mám jít? Musíš zadat jméno východu";
}
String smer = parametry[0];
// zkoušíme přejít do sousedního prostoru
Prostor sousedniProstor = plan.getAktualniProstor().vratSousedniProstor(smer);
if (sousedniProstor == null) {
return "Tam se odsud jít nedá!";
}
if (sousedniProstor.isZamcena()) {
return "Místnost: '" + sousedniProstor.getNazev() + "' je uzamčena, musíš jí napřed odemknout";
}
else {
if (sousedniProstor.getNazev().equals("tmavaJeskyne")) {
if (plan.getBatoh().obsahujeVec("sekeraDrakobijce")) {
plan.setAktualniProstor(sousedniProstor);
return sousedniProstor.dlouhyPopis();
}
else {
hra.setKonecHry(true);
return "Prohral jsi.";
}
}
else {
plan.setAktualniProstor(sousedniProstor);
return sousedniProstor.dlouhyPopis();
}
}
}
/**
* Metoda vrací název příkazu (slovo které používá hráč pro jeho vyvolání)
*
* @ return nazev prikazu
*/
@Override
public String getNazev() {
return NAZEV;
}
}
Zdravim,
delam ukol do skoly, ale v jave jsem uplny zacatecnik a nevim si rady s timhle. Jde o to, ze je to takova textova hra a pokud nemam urcity predmet u sebe a vstoupim do daneho prostoru, tak hra automaticky vyhraje. A jako ono to funguje az na to, ze mi hned nabehne i chyba a ja fakt nevim kde je problem. :( Tak prosim, poradte mi nekdo co s tim. Predem moc dekuji. Prikladam screeny...