Php aplikace - co potrebujem? – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Php aplikace - co potrebujem? – PHP – Fórum – Programujte.comPhp aplikace - co potrebujem? – PHP – Fórum – Programujte.com

 

Swarley
~ Anonymní uživatel
44 příspěvků
6. 6. 2015   #1
-
0
-

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. 

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Junker
~ Anonymní uživatel
5 příspěvků
6. 6. 2015   #2
-
0
-

Budeš si muset asi nainstalovat server, abys to mohl testovat na vlastním počítači, jinak na českém webu se dají najít nějaké tutoriály o PHP.

Nahlásit jako SPAM
IP: 178.72.234.–
Kit+15
Guru
6. 6. 2015   #3
-
0
-

#1 Swarley
Potřebuješ editor, PHP a MySQL.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Swarley
~ Anonymní uživatel
44 příspěvků
6. 6. 2015   #4
-
0
-

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.

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
smiesek0
Newbie
7. 6. 2015   #5
-
0
-

#4 Swarley
je nutné do souboru php, kde si napíšete vlatní kód ještě vložit script pro připojení a výběr správné databáze

Nahlásit jako SPAM
IP: 109.81.209.–
ondrej39+1
Věrný člen
7. 6. 2015   #6
-
0
-

#4 Swarley
Vygoogli si "How to connect to database PDO".

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
Kit+15
Guru
7. 6. 2015   #7
-
0
-

#6 ondrej39
Googlící dotaz se dá zjednodušit na "PHP PDO".

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
7. 6. 2015   #8
-
0
-

#4 Swarley
Apache není nutný. Stačí PHP.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
smiesek0
Newbie
7. 6. 2015   #9
-
0
-

#8 Kit
no já nevím jak Vy, ale i základní verze XAMPP obsahuje právě Apache a MySQL, takže bych řekla, že Apache je nutné ... :) pokud tedy chce provádět testování i na vlastním PC

Nahlásit jako SPAM
IP: 109.81.209.–
Kit+15
Guru
7. 6. 2015   #10
-
+1
-
Zajímavé

#9 smiesek
PHP od verze 5.4 obsahuje vlastní webserver určený právě pro testování aplikací na lokálním PC. Mám jich v tuto chvíli spuštěných pět a Apache k tomu skutečně nepotřebuji.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
smiesek0
Newbie
7. 6. 2015   #11
-
0
-

#10 Kit
a pro testování tedy v tomto případě používáte jakou aplikaci? :)

Nahlásit jako SPAM
IP: 109.81.209.–
Kit+15
Guru
7. 6. 2015   #12
-
+1
-
Zajímavé

#11 smiesek
PHP přece. Stačí ho spustit s těmito parametry 

php -S localhost:8080 -t adresář

Místo 8080 může být i jiný port. Web se pak v prohlížeči nachází na adrese 

http://localhost:8080

a na konzoli vyjíždějí báječné logy, které jsou pro ladění velmi užitečné.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Swarley
~ Anonymní uživatel
44 příspěvků
7. 6. 2015   #13
-
0
-

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?   

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Swarley
~ Anonymní uživatel
44 příspěvků
7. 6. 2015   #14
-
0
-

Hmm..tak nejak sa to "opravilo" samo... Nic som nemenil take podstatne, ale uz to ide.. 

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Swarley
~ Anonymní uživatel
44 příspěvků
7. 6. 2015   #15
-
0
-

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.

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
z_moravec
~ Redaktor
+3
Posthunter
7. 6. 2015   #16
-
0
-

#15 Swarley
Nejdřív si musíš zvolit, jakým způsobem se k MySQL připojíš a podle toho pak bude ten soubor (např. db.php) vypadat. Skus si projít dokumentaci PHP, příp. MySQL.

http://php.net/manual/en/mysql.php

Nahlásit jako SPAM
IP: 88.76.34.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Kit+15
Guru
7. 6. 2015   #17
-
0
-

#15 Swarley
Těch souborů si nevšímej. Dělej jen se skripty.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
smiesek0
Newbie
7. 6. 2015   #18
-
0
-

#13 Swarley
já bych řekla, že v tom souboru např. menu.php jak máte menu odkazujete na soubor index.html a nikoliv index.php

Možná ještě líp by pomohlo, kdyby jste ukázal obsah jednotlivých souborů, myslím že chyba se najde rychleji ;)

Nahlásit jako SPAM
IP: 2a00:1028:8388:3b76:9c81:...–
Swarley
~ Anonymní uživatel
44 příspěvků
8. 6. 2015   #19
-
0
-

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']);
Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Swarley
~ Anonymní uživatel
44 příspěvků
8. 6. 2015   #20
-
0
-

este dodam, ze mi to vyhadzuje takyto error

Fatal error: Class 'Db' not found in C:\xampp\htdocs\a\pridat.php on line 37

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
z_moravec
~ Redaktor
+3
Posthunter
8. 6. 2015   #21
-
0
-

#20 Swarley
Aby to fungovalo, musíš mít třídu Db a v ní metodu query. Oboje musí být inicializované dřív než zavoláš ten příkaz. Hoď sem kód, kterým se připojuješ k MySQL.

Nahlásit jako SPAM
IP: 94.220.251.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Kremlbe
~ Anonymní uživatel
1 příspěvek
8. 6. 2015   #22
-
0
-

 mám to dobře? když diskutujete o php říkal jsem si že to budete vědět

<body>
  
    <form action="vypocet.php" method="POST">
    <p>Zadej částku před zdaněním: <input name="castka" type="text"></p>
    <p><input type="radio" name="dan" value="15%">15%<input type="radio" name="dan" value="20%">20%</p>
    <p><input type="submit" value="Odeslat"></p>
  </form>
  
  </body>

 

<?php
  
  $castka = $_POST['castka'];
  $sazba = $_POST['dan'];
  $dan = 0;
  $pozdaneni = 0;
  
  settype($castka, "integer");
  
  echo "<b>$sazba</b> daň z částky <b>$castka</b> je: ";
  
  if ($sazba == "15%")
  {
     $dan = $castka * 0.15;
  }
  else
  {
    $dan = $castka * 0.2;
  }
  
  echo "<b>$dan</b>";
  $pozdaneni = $castka - $dan;
  echo ", částka po zdanění je: <b>$pozdaneni</b>";
  
  ?>

a potom bych chtěl zkontrolovat tohle:

<body>
  
    <form action="vypis.php" method="POST">
    <p>Jméno: <input name="jmeno" type="text"></p>
    <blockquote><input type="checkbox" name="auto" value="auto">auto<br>
    <input type="checkbox" name="kolo" value="pocitac">kolo<br>
    <input type="checkbox" name="pocitac" value="mobil">počítač<br>
    </blockquote>
    <p><input type="submit" value="Odeslat"></p>
  </form>
  
  </body>

<?php
  
  $jmeno = $_POST['jmeno'];
  
  echo "Jmenuji se: <b>".$jmeno."</b> a vlastním: <br>";
  echo "<ul>";
  
 if (isset($_POST['auto'])) {
      echo "<li>auto</li>";
      }
 
 if (isset($_POST['kolo'])) {
      echo "<li>kolo</li>";
      }
  
 if (isset($_POST['pocitac'])) {
      echo "<li>počítač</li>";
      }     
          
   echo "</ul>";
   
  ?>

Nahlásit jako SPAM
IP: 46.167.211.–
smiesek
~ Anonymní uživatel
35 příspěvků
8. 6. 2015   #23
-
0
-

#22 Kremlbe
minimálně bych k <input type="submit" dala nějakou hodnotu name="...", aby jste mohl testovat odeslání formulářů...

A lepší bude založit vlastní vlákno, pokud Vám něco přesně nefunguje, protože původní autor tématu má zcela jiný požadavek ;)

Nahlásit jako SPAM
IP: 84.242.78.–
Kit+15
Guru
8. 6. 2015   #24
-
0
-

#22 Kremlbe
Nemáš to dobře. Založ si vlastní vlákno.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Swarley
~ Anonymní uživatel
44 příspěvků
8. 6. 2015   #25
-
0
-

#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?

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
z_moravec
~ Redaktor
+3
Posthunter
8. 6. 2015   #26
-
0
-

Pokud tu třidu chceš volat, tak ji musíš definovat.

Podívej se třeba sem:

http://php.net/manual/en/pdo.prepared-statements.php

Máš tam několik příkladů, jak se pomocí PDO připojit k MySQL a jak posílat dotazy.

Nahlásit jako SPAM
IP: 134.95.97.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
asd
~ Anonymní uživatel
4 příspěvky
8. 6. 2015   #27
-
0
-

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title></title>
  </head>
  <body>


 Váha <input name="vaha" type="text">       <br>
  Výška  <input name="vyska" type="text">      <br>     <br>

 Muž <input type="Radio" Name ="pohlavi" value="muz">    <br>
  Žena <input type="Radio" Name ="pohlavi" value="zena">    <br>     <br>

 BMI <input type="checkbox" name="bmi" value="1"><br>                     
Idealni tělesná váha <input type="checkbox" name="ideal" value="2"><br><br> <br>  

<input type="submit" value="Odeslat">


  </body>
</html>

Nahlásit jako SPAM
IP: 2a00:1028:83d4:2876:9572:...–
Kit+15
Guru
8. 6. 2015   #28
-
0
-

#25 Swarley
Zahoď Db.php a místo něj zkus tohle: 

<?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']));
Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Swarley
~ Anonymní uživatel
44 příspěvků
8. 6. 2015   #29
-
0
-

#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...

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
peter
~ Anonymní uživatel
3981 příspěvků
8. 6. 2015   #30
-
0
-

Jestli ti to od Kita nepojede, tak ozna nemas vytvorenou tabulku v db. Treba pres phpmyadmina. Nebo nemas treba fubec databazi.

Bys mohl sem dat svuj pokusny kod.
Je dobre zkouset kazdou vec zvlast a pak funkcni zkopirovat do vetsiho celku (treba do stranky s menickem).

Ty hlasky znamenaji, ze v $_POST nemas dane polozky. Z cehoz plyne ta druha chyba, ze v SQL mas mastavene, ze do toho sloupce nemuzes davat NULL polozku. Treba ja mam tabulku, kde mam taky not null, ale jen pro id radku. Pro ty ostatni mam DEFAULT NULL

CREATE TABLE IF NOT EXISTS `contact_group` ( -- old group
  `id_group` int(11) NOT NULL AUTO_INCREMENT,
  `id_user` int(11) DEFAULT NULL,
  `title` varchar(50) COLLATE utf8_czech_ci DEFAULT NULL,
  `desc` text COLLATE utf8_czech_ci DEFAULT NULL,
  PRIMARY KEY (`id_group`),
  KEY `title` (`title`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:fc31:3a...–
peter
~ Anonymní uživatel
3981 příspěvků
8. 6. 2015   #31
-
0
-

Hm, a ted koukam, ze mi tam schazi  key pro `id_user` :) Opraveno, diky forko.
KEY `id_user` (`id_user`),

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:fc31:3a...–
Swarley
~ Anonymní uživatel
44 příspěvků
8. 6. 2015   #32
-
0
-

#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>');
                }
                ?>
Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Swarley
~ Anonymní uživatel
44 příspěvků
8. 6. 2015   #33
-
0
-

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>');
                }
                ?>
Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Kit+15
Guru
8. 6. 2015   #34
-
0
-

#29 Swarley
Evidentně máš práznou proměnnou $_POST. Běžná to chyba. Jestli dobře počítám, tak by měla být na 7. řádku a nikoli na 37. Někde ti tam lítá zbytečných 30 řádek, nejspíš s formulářem.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
8. 6. 2015   #35
-
0
-

#33 Swarley
Proč tam máš to echo? Stejně se nezobrazí.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Swarley
~ Anonymní uživatel
44 příspěvků
8. 6. 2015   #36
-
0
-

#34 Kit
Co presne mas na mysli, ze je prazdna?  A to echo som tam len nechal este zo stareho kodu...

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Kit+15
Guru
8. 6. 2015   #37
-
0
-

#36 Swarley
Že nezpracováváš obsah formuláře a proto v $_POST nic není. Když se podíváš na příspěvek od Kremble, tak to je typická ukázka, jak to vypadat nemá a jak to nemůže fungovat.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Swarley
~ Anonymní uživatel
44 příspěvků
8. 6. 2015   #38
-
0
-

#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>');
				}
                         ?>
Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Kit+15
Guru
8. 6. 2015   #39
-
0
-

#38 Swarley
K čemu je tam to echo?

Nahlásit jako SPAM
IP: 37.48.50.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Swarley
~ Anonymní uživatel
44 příspěvků
8. 6. 2015   #40
-
0
-

#39 Kit
Ked dam odoslat formular aby mi to tam napisalo, ze to bolo odoslane. Ci to je zle nejak? Lebo vyzera, ze to funguje, tak neviem teraz.

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Kit+15
Guru
8. 6. 2015   #41
-
0
-

#40 Swarley
Místo toho je nutné udělat přesměrování, aby nevznikaly dvojité záznamy.

Nahlásit jako SPAM
IP: 37.48.33.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
9. 6. 2015   #42
-
0
-

var_dump($_POST);
echo '<pre>'; var_dump($_POST); echo '</pre>';  // pro starsi php

Totiz, nevim, zda presne chapes, co se deje. Mozna by pro tebe bylo srozumitelnejsi, kdyby jsi mel formular zvlas, odesilal to na jinou stranku s php a z ni se pak vratil na formular zpet, treba nebo pokracoval na jinou stranku (php.net/header).

Server -> php -> vyrobi html -> odeslat ze serveru ven -> uzivatel prijima -> webovy prohlizec www kodu zobrazi

Kdyz stranku zobrazis poprve, tak formular je prazdny, logicky se tedy nic neprida do db. az kdyz kliknes na odeslat. A ted zalezi na tom, jaky je tvuj html kod, zda to mas uzavrene v elementech  <form> </form>, zda mas u formu nastavenou metodu get nebo post a dalsich vecech. Proto je nesmirne dat lidem, kterych se ptas, uplne vsechno, aby mohli nasimulovat stejne podminky. Tezko rici, jestli mas spatne thml kod formulare, kdyz jej zatim nikdo nespatril :) Treba to nemas prave ve formulari nebo jsi tam neuvedl, ze se jedna o post. Pak bych te odkazal na jakpsatweb, nastuduj si, jak se spravne zapisuje html. (ale chapu, ze te to netrapi, protoze jsi zatim u html nepotreboval javascript; pak teprve pochopis, proc je dulezite to napsat spravne a ne osidit jen aby to vypadalo vv prohlizeci dobre)
http://www.jakpsatweb.cz/…rmulare.html

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:fd64:35...–
Swarley
~ Anonymní uživatel
44 příspěvků
9. 6. 2015   #43
-
0
-

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>
Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
peter
~ Anonymní uživatel
3981 příspěvků
10. 6. 2015   #44
-
0
-

 Kit te chtel upozornit na to, ze to echo se vypise, at uz se podari film do db ulozit ci ne. Staci cokoliv poslat formularem. Klidne to muze byt falesny formular z jine stranky, treba z programujte.com.
Zkus si tam pridat pod ten formular jeste jeden
<form method=post><input type=hidden name=xxx value=yyy><input type=submit></form>
A klikni na nej, odeslat. Vypise ti to, ze pridal fulm, ale pritom v databazi zadny neni. A navic to muze zacit psat more chyb.

<?php
@ini_set('error_reporting', E_ALL);
@ini_set("display_errors", "on"); 
error_reporting(E_ALL);

//$dsn = "mysql:host=127.0.0.1;dbname=zoznam_filmov;charset=utf8";
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$db = new PDO($dsn, "root", "");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$notice = array();

if (count($_POST)==4)
	{
	$query  = "INSERT INTO filmy (nazov, rok, krajina, dlzka) VALUES (?, ?, ?, ?)";
	$insert = $db->prepare($query);
	$insert->execute(array($_POST['nazov'], $_POST['rok'], $_POST['krajina'], $_POST['dlzka']));
	if ($insert)
		{$notice[] = 'Film bol ˙speÜne pridany';}
	}

$list   = '';
$query  = "SELECT nazov, rok, krajina, dlzka FROM filmy";
$select = $db->prepare($query);
$select->execute();
while(($row = $select->fetch(PDO::FETCH_ASSOC))!==false)
	{
	$cols = '';
	foreach ($row as $key=>$value)
		{
		$cols .= '<td>'.$value.'</td>';
		}
	//$cols = '<pre>'.htmlspecialchars($cols).'</pre>';
	$list .= '<tr>'.$cols.'</tr>';
	}
$list   = strlen($list)>0  ? '<table>'.$list.'</table>' : '';

$notice = count($notice)>0 ? '<p>'.implode('<br>',$notice).'</p>' : '';

/*
CREATE TABLE IF NOT EXISTS `filmy` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nazov` varchar(100) COLLATE utf8_czech_ci DEFAULT NULL,
  `rok` varchar(100) COLLATE utf8_czech_ci DEFAULT NULL,
  `krajina` varchar(100) COLLATE utf8_czech_ci DEFAULT NULL,
  `dlzka` varchar(100) COLLATE utf8_czech_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `nazov` (`nazov`),
  KEY `rok` (`rok`),
  KEY `dlzka` (`dlzka`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
*/
?>

<!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>
<?php echo $notice; ?>
        <article>
			<div id="centrovac">
				<header>	
					<h1>PridaŁ film</h1>
				</header>
				<section>				
                <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>

<p>Zoznam filmov</p>
<?php echo $list; ?>
        </body>
</html>
Nahlásit jako SPAM
IP: 2001:718:2601:1f7:95b9:84...–
peter
~ Anonymní uživatel
3981 příspěvků
10. 6. 2015   #45
-
0
-

Jo, na tohle si davej bacha, nektere prohlizece jsou na to haklive. Pred doctype nesmi byt ani ten prazdny radek.

?>

<!DOCTYPE html>

Cili bych to napsal

php kod
. // tecku jsem pouzil pro ukazku misto prazdneho radku
?>
<!DOCTYPE html>

nebo

php kod.
.
?><!DOCTYPE html>
Nahlásit jako SPAM
IP: 2001:718:2601:1f7:95b9:84...–
Kit+15
Guru
10. 6. 2015   #46
-
0
-

#45 peter
A před zpracováním POST nesmí být ani ten DOCTYPE.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Swarley
~ Anonymní uživatel
44 příspěvků
10. 6. 2015   #47
-
0
-

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.

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
smiesek0
Newbie
10. 6. 2015   #48
-
0
-

#47 Swarley
provedete dotaz na tabulku s výběrem sloupce id záznamu a následně porovnáte hodnoty jednotlivých sloupců. to vše ještě před dotazem pro vložení záznamu do tabulky, tedy něco na tento způsob

$query = "SELECT id FROM filmy WHERE id != '". $_POST['nazov']."' AND '". $_POST['rok']."' AND '". $_POST['krajina']."' AND '". $_POST['dlzka']."'";
Nahlásit jako SPAM
IP: 2a00:1028:8388:3b76:f85b:...–
Kit+15
Guru
10. 6. 2015   #49
-
0
-

#47 Swarley
Sloupeček v DB označíš klíčovým slovem UNIQUE. Duplicitní záznam pak nepůjde vložit.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Swarley
~ Anonymní uživatel
44 příspěvků
11. 6. 2015   #50
-
0
-

Dakujem!!   

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Swarley
~ Anonymní uživatel
44 příspěvků
14. 6. 2015   #51
-
0
-

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?

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Swarley
~ Anonymní uživatel
44 příspěvků
15. 6. 2015   #52
-
0
-

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>
Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
peter
~ Anonymní uživatel
3981 příspěvků
15. 6. 2015   #53
-
0
-

$query =  "DELETE FROM filmy WHERE id=?";
$stmt = $db->prepare($query);
$result = $stmt->execute(array($_GET['id']));
if ($result && $result->rowCount()>0) {echo $result->rowCount()); }
else {$stmt->errorCode().' '.implode(" - ",$stmp->errorInfo()));}

Zkusil bych neco takoveho a vygoogluj si, jak vypsat sql dotaz po dosazeni $_GET. Ja tenhle zpusob s "?" nepouzivam, sestavuji zrovna cely dotaz predem do $query, takze ti to neporadim.
Kdyz se ti to podari, tak pak zkus ten dotaz spustit pres phpmyadmina.

Jestlize smazat = zrusit (pak je to velmi nestasne svolene slovo, protoze zrusit, prerusit je jako zrusit operaci ne smazat, odstranit)
<a rel="nofollow" href="index.php">Zrušiť</a>
Pak je ti asi jasne, ze kdyz tam neodesles do $_GET nic, tak php kod nasledne precte stejne nic zde $_GET['id'].
 

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:edb1:77...–
peter
~ Anonymní uživatel
3981 příspěvků
15. 6. 2015   #54
-
0
-

jo, taky, kdyz to testujes, tak si zakaz radek s presmerovanim. Ono to mzna vypise chybu (diky error_reporting), ale vzapeti to presmeruje pryc na jinou stranku. Chyba se na novou stranku neprenasi, pokud ji tam nepridas 'Location: index.php?chyba=12345' ( na nove strance pak echo $_GET['chyba'];)
// header('Location: index.php');
 

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:edb1:77...–
Swarley
~ Anonymní uživatel
44 příspěvků
15. 6. 2015   #55
-
0
-

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.

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
ondrej39+1
Věrný člen
15. 6. 2015   #56
-
0
-

#55 Swarley
To je docela logický, že se ti nic nesmaze, když na stránce nemáš žádný element, který by ti $_GET["id"] posílal.

Co se přesměrování tyče, ty většinou chceš uživatele přesměrovat poté, co nastane nějaká akce, aby se tím obnovil prezenter, to přesměrování by mělo být v nějaké podmínce, ne, že se provede vždy.

Nahlásit jako SPAM
IP: 46.135.69.–
Inject all the dependencies!
hormen
~ Anonymní uživatel
1 příspěvek
15. 6. 2015   #57
-
0
-

#13 Swarley

tak alespoň, že už ti to funguje :)

Nahlásit jako SPAM
IP: 46.167.211.–
Swarley
~ Anonymní uživatel
44 příspěvků
16. 6. 2015   #58
-
0
-

#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...

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Swarley
~ Anonymní uživatel
44 příspěvků
16. 6. 2015   #59
-
0
-

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...

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Swarley
~ Anonymní uživatel
44 příspěvků
16. 6. 2015   #60
-
0
-

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   

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
smiesek0
Newbie
16. 6. 2015   #61
-
0
-

v rámci rozšiřování znalostí bych se klidně ráda zapojila do opět do diskuse a pokusila se pomoci, ač nejsem žádný profesionál, ale učím se logickému myšlení, tak by bylo třeba fajn, vždy dát i kus kodu, co nefunguje a podle toho se bude líp pomáhat   

Nahlásit jako SPAM
IP: 109.81.209.–
peter
~ Anonymní uživatel
3981 příspěvků
16. 6. 2015   #62
-
0
-

M:N je nejaka spesl IT terminologie. S tim na mne nechod :) Tusim to znamena propojeni tabulky s jinou tabulkou. Mas treba seznam mest a seznam uzivatelu. V tabulce uzivatele budes mit jen cislo radku z tabulky mest. To je cely zazrak. 

SELECT
  a.jmeno
  b.mesto
FROM
  uzivatele a
  LEFT JOIN mesta b ON b.id_mesto=a.id_mesto

uzivatele
- id_uzivatel (autoincrement int)
- jmeno (varchar)
- id_mesto (int)
mesta
- id_mesto (autoincrement int)
- mesto (varchar)
 

N:N je podobne, myslim. Kdyz potrebujes vytridit neco ze stejne tabulky. Treba potrebujes vypsat seznam vsech uzivatelu, kteri maji stejne jmeno. Tak potrebujes udelat jeden sloupec seznam unikatnich jmen a ve druhem sloupci treba carkou oddeleny seznam lidi.

tabulka M, tabulka N, M:N tabulka M propojena s tabulkou N

Jestli je to jinak, tak sory :) Ale google zna odpoved.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:80a8:8d...–
smiesek0
Newbie
16. 6. 2015   #63
-
0
-

#62 peter
:) přesně tak, taky nějak nemusím ty terminologie, ale jen tedy pro doplnění té teorie omáčky.

Relace

1:1 - manžel má jednu manželku a manželka má jednoho manžela

1:N - jeden majitel může mít více psů

M:N - jeden učitel může mít více žáků a jeden žák může mít více učitelů

Alespoň takhle ve zkratce vytrženo z kontextu http://iss.unas.cz/ids/08.pdf ;)

Ale moc bych tomu nevkládala důraz a nepozastavovala se v tom. Pro původní dotaz si myslím, že tazatel nemusí nějak řešit. Protože jako pro samotné psaní dotazu php mi to příjde nepodstatné, ale třeba se mýlím.

Nahlásit jako SPAM
IP: 84.242.78.–
peter
~ Anonymní uživatel
3981 příspěvků
16. 6. 2015   #64
-
0
-

No, vis, ucitel potrebuje vedet, zda umi propojit dve tabulky. Naplacat vse do jedne, to umi kazdy :)

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:80a8:8d...–
smiesek0
Newbie
16. 6. 2015   #65
-
0
-

#64 peter
aha tak to pak ano, to jsem nečetla se přiznám, co předcházelo dotazu a zmínce M:N

Ale jinak taky jsme to měli jako základ, že budeme spíše pracovat s relací M:N :) a nic neplácat do jedné tabulky, ale vytvořit alespoň třeba 4 a podmínkou byla právě i relace M:N ještě nyní ráda na to vzpomínám, jak jsme museli tvořit závěrečný projekt.

Jen škoda při mé smůle, že tehdy nám bylo pouze předhozený program pro SQL dotazy, hned si nevybavím jeho název, ale reálné použití a právě aplikace do php nikoliv :(

Nahlásit jako SPAM
IP: 84.242.78.–
ondrej39+1
Věrný člen
16. 6. 2015   #66
-
0
-

#60 Swarley
Jak už psala smiesek, M : N je vztah mezi entitami v databázi. Takový vztah se většinou v databázi velmi špatně udržuje, vede k redundanci a někdy k porušování normálních forem, proto se M : N vztahy dekomponuji na 1: N, N : 1 uvedením slabého entitního typu.

Snad již víš, že v entity v databázi mohou obsahovat cizí klíče. Například budeš mít entitu syn a entitu matka. syn může mít jen jednu matku, takže entita syn bude mít atribut třeba matka, který bude cizí klíč odkazující se na primární klíč entity matka. Zároveň bys tímto vyřešil i problém, že matka může mít více synů, protože aby sis zobrazil všechny syny například matky, jejíž primární klíč je ID s číslem 4, stačí použít velmi jednoduchý SQL dotaz

SELECT * FROM syn WHERE matka = 4;

Jiný případ je, že budeš mít třeba entity hracka a dite, hračku přitom může v průběhu času vlastnit více dětí (nebo dokonce více děti najednou) a dítě může mít více hraček. Dejme tomu, že si namodeluješ databázi následujícím způsobem: 

CREATE TABLE dite
(
    idDite SERIAL PRIMARY KEY,
    jmeno TEXT NOT NULL,
    prijmeni TEXT NOT NULL,
    hracka INTEGER REFERENCES hracka(idHracka)
);

CREATE TABLE hracka
(
    idHracka SERIAL PRIMARY KEY,
    nazev TEXT NOT NULL,
    cena DECIMAL NOT NULL,
    dite INTEGER REFERENCES dite(idDite)
);

tak ti vznikne hned několik problémů.

1) Tabulky prostě nepůjdou vytvořit, protože když vytváříš tabulku dite a odkazuješ se na tabulku hracka, tak tabulka hracka ještě neexistuje.

2) Jak si můžeš všimnou, i kdyby tabulky vytvořit šli, tak v atributech hracka nebo dite může být vždy uložená jenom jedna hodnota, takže můžeš evidovat pouze jedno dítě jako vlastníka hračky a dítě může mít pouze jednu hračku. Což jsme ale nechtěli. Je tedy třeba tabulky upravit, uvést zmíněný slabý entitní typ a cizí klíče přesunout do něj. 

CREATE TABLE dite
(
    idDite SERIAL PRIMARY KEY,
    jmeno TEXT NOT NULL,
    prijmeni TEXT NOT NULL,
);

CREATE TABLE hracka
(
    idHracka SERIAL PRIMARY KEY,
    nazev TEXT NOT NULL,
    cena DECIMAL NOT NULL,
);

CREATE TABLE vlastnictvi
(
    dite INTEGER REFERENCES dite(idDite)
    hracka INTEGER REFERENCES hracka(idHracka)
    PRIMARY KEY (dite, hracka)
);

Co by tě mohlo zajímat: Normalizace databáze, Relační model

Nahlásit jako SPAM
IP: 79.141.243.–
Inject all the dependencies!
Swarley
~ Anonymní uživatel
44 příspěvků
16. 6. 2015   #67
-
0
-

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? 

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Swarley
~ Anonymní uživatel
44 příspěvků
16. 6. 2015   #68
-
0
-

Hmm.. teda mam vytvorit tabulku kde bude len nazov/rok/dlzka a dalsiu kde bude len krajina a to spojit do tretej tabulky?

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
smiesek0
Newbie
16. 6. 2015   #69
-
0
-

#68 Swarley
No já Ti nevím, teoreticky ano, teoreticky ne, záleží jak se to pojme. Ale příjde mi spíše, že se hodně upínáš na tu terminologii, než na samotné provedení, hned v úvodu jsi zmínil, že to tvoříš do školy, daný projekt, jaké je jeho přesné zadání - podmíky relací, minimální počet vytvořených databázových tabulek apod.?

Krajina přece sama o sobě film nemůže točit, nebo snad ano?

Spíše pokud se chceš držet té databáze filmů jako toho tématu, bych ji pojala jako třeba vztah herec a film co mi nyní google našlo :) s tím, že budeš mít databázi filmů, databázi herců a následně třetí tabulkou bude třeba obsazení = výběr z tabulky filmu a výběr z tabulky herce.

Nahlásit jako SPAM
IP: 2a00:1028:8388:3b76:592f:...–
Swarley
~ Anonymní uživatel
44 příspěvků
16. 6. 2015   #70
-
0
-

#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...

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
ondrej39+1
Věrný člen
16. 6. 2015   #71
-
0
-

#67 Swarley
Ano, budeš mít tabulku film, budeš mít tabulku krajina a poté tabulku třeba natocenov. 

CREATE TABLE Film
(
    idFilm SERIAL PRIMARY KEY,
    nazev TEXT NOT NULL,
    rokNatoceni INTEGER NOT NULL,
    delka INTEGER NOT NULL
);

CREATE TABLE Krajina
(
    idKrajina SERIAL PRIMARY KEY,
    nazevKrajina TEXT NOT NULL
);

CREATE TABLE NatocenoV
(
    film INTEGER REFERENCES Film(idFilm),
    krajina INTEGER REFERENCES Krajina(idKrajina)
);

Vypsání informací do tabulky by pak mohlo vypadat třeba následovně... 

<?php
$dsn = "TVŮJ_STRING_PRO_PŘIPOJENÍ";
$db = new PDO($dsn, "user", "password");

// query pro získání údajů
$query_vypisFilmy = "SELECT * FROM Film";
$query_vypisKraj = "SELECT nazevKrajina FROM Krajina JOIN NatocenoV ON idKrajina = krajina 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);
?>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<table>
    <tr>
        <th>Název filmu</th>
        <th>Rok natočení</th>
        <th>Délka (v minutách)</th>
        <th>Krajiny, v nichž se točilo</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->idFilm
        ]);
        // získané krajiny
        $krajiny = $stmt->fetchAll(PDO::FETCH_OBJ);
        ?>
    <tr>
        <td><?php echo $film->nazev; ?></td>
        <td><?php echo $film->rokNatoceni; ?></td>
        <td><?php echo $film->delka; ?></td>
        <td><?php
            foreach ($krajiny as $kraj) {
                echo $kraj->nazevKrajina . ", ";
            }
            ?></td>
    </tr>
    <?php } ?>
</table>
</body>
</html>

Každopádně toto je nečitelnej hnus. Spíš si udělej DB driver, kterej ti bude vracet to, co chceš a potřebuješ.

Nahlásit jako SPAM
IP: 79.141.243.–
Inject all the dependencies!
Swarley
~ Anonymní uživatel
44 příspěvků
16. 6. 2015   #72
-
0
-

#71 ondrej39
Co je prosim ten DB driver?

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
ondrej39+1
Věrný člen
16. 6. 2015   #73
-
0
-

#72 Swarley
Prostě třída, která se ti stará o práci s databázi.

Nahlásit jako SPAM
IP: 79.141.243.–
Inject all the dependencies!
Swarley
~ Anonymní uživatel
44 příspěvků
16. 6. 2015   #74
-
0
-

#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 */;
Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Swarley
~ Anonymní uživatel
44 příspěvků
16. 6. 2015   #75
-
0
-

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..  

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
peter
~ Anonymní uživatel
3981 příspěvků
17. 6. 2015   #76
-
0
-

http://programujte.com/forum/vlakno/29517-php-aplikace-co-potrebujem/#p202845
Z sql dostanes nejaky balik dat. Z nej pak vytahnes radek pres fetch(). Chces dalsi radek? Musis opet pouzit fetch. Proto ten cyklus s while.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:dc3e:49...–
ondrej39+1
Věrný člen
17. 6. 2015   #77
-
0
-

#74 Swarley
Však je chyba přesně tam, kde to chybu píše. Dotazuješ se v dotazu na sloupec v databázi, kterej neexistuje... Toto 

SELECT meno FROM herci JOIN vypis ON herci_id = herec WHERE id = :id

zmeň na  

SELECT meno FROM herci JOIN vypis ON herci_id = herec WHERE film = :id

Každopádně to propojení tabulek máš špatně. V tabulce vypis chceš mít na ty atributy dva cizí klíče, jeden na primární klíč tabulky filmy a druhý na primární klíč tabulky herci.

Nahlásit jako SPAM
IP: 79.141.243.–
Inject all the dependencies!
Swarley
~ Anonymní uživatel
44 příspěvků
17. 6. 2015   #78
-
0
-

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?

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
smiesek0
Newbie
17. 6. 2015   #79
-
0
-

#78 Swarley
až bude tabulka vypis vytvořena, tak za pomocí dotazu budeš vkládat id záznam z tabulky film a id záznam z tabulky herec, tím se Ti vloží nový záznam do tabulky, který bude odkazovat na předchozí tabulky, ve kterých budeš mít uloženy údaje o filmu a ve druhé zase o hercích.

Jinak nyní ještě tak z hlavy bych upravila ten kod, aby Ti šla vložit tabulky vypis následovně

CREATE TABLE IF NOT EXISTS `vypis` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`film` int(11) NOT NULL,
`herec` int(11) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Nahlásit jako SPAM
IP: 84.242.78.–
ondrej39+1
Věrný člen
17. 6. 2015   #80
-
0
-

#78 Swarley
Jde o to, že když to propojíš přes tu slabou entitu, pak ti pro určení, v jakém filmu hráli jací herci stačí znát ID filmu a ID herce. A na základě těch ID není problém si vytáhnout veškeré informace o hercích (nebo naopak, můžeš získat informace o všech filmech, v nichž hraje konkrétní herec).

Já psal zápis na PostgreSQL, který mi vždy fungoval, ty používáš MySQL, podívej se, jak se přidávají cizí klíče v MySQL, nicméně syntaxe je velice podobná.

Každopádně chlape, tobě chybí úplně základní znalosti. Jestli máš dělat něco takového do školy, přepdokládám, že je to proto, protože jste danou látku probírali, v tom případě jsi do té školy asi moc nechodil. Protože to, co potřebuješ, jsou informace na tak začátečnícké úrovni, že bys je měl umět skoro již na začátku školního roku, pokud se danému tématu věnujete.

#79 smiesek
Je úplná kravina dělat z této entity entitu silnou, vzhledem k tomu, že jednoznačný identifikátor vztahu film <-> herec je vždy id filmu a id herce.

Nahlásit jako SPAM
IP: 79.141.243.–
Inject all the dependencies!
peter
~ Anonymní uživatel
3981 příspěvků
17. 6. 2015   #81
-
0
-

Taky si myslim, ze ti schazi zakladni znalosti :) V prispevku #63 jsem se ti to pokusil naznacit stukturu tabulek.

uzivatele
- id_uzivatel (autoincrement int)
- jmeno (varchar)
- id_mesto (int)
mesta
- id_mesto (autoincrement int)
- mesto (varchar)

Neni to podminkou, ale...
- je dobre, kdyz id zacina slovem id_ (osobne radeji pouzivam id_nazev nez idNazev)
- je dobre, kdyz id se ve vsech propojenych tabulkach jmenuje stejne (pak jednoznacne vis, ze to je asi propojene, kdyz to zacina jako id; a taky to pak propojujes podle shody klice/indexu b.id_mesto=a.id_mesto a nevypada to pak, ze propojujes dve rozdilne tabulky)
- je dobre mit vsechna id na zacatku tabulky (kvuli rychlosti)

Takze, kdyz sem prijdes s tim, ze mas tabulku vypis, kde mas jasne id indexy a nejmenuje se to id, tak je to dost chaoticke, protoze v te dalsi tabulce pak mas film urcene pro text, nazev filmu a herec pro nazev herce 

CREATE TABLE IF NOT EXISTS `vypis` (
  `film` int(11) DEFAULT NULL,
  `herec` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `vypis` (
  `id` int(11) NOT NULL AUTO_INCREMENT, -- a tohle id mozna take upotrebis, jak psala smiesek (kdyz slovensky je to smiesik :) jestli neni mysleno neco jineho)
  `id_film` int(11) DEFAULT NULL,
  `id_herec` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Propojeni tech tabulek mas pak jasne, ne?

film
- id_film (autoincrement int)
- film (varchar)
herec
- id_herec (autoincrement int)
- herec (varchar)
filmy_herci
- id_film (int)
- id_herec (int)

Obsah tabulek, napriklad

film
1, 'Ally McBeal'
2, 'Charlieho andílci'
3, 'Terminator'
4, 'Kill Bill'
5, 'Jak proste'
herec
1, 'Arny svarcik'
2, 'Lucy Liu'
3, 'Pavel Zednicek'
filmy_herci
1, 2 - Ally McBeal, Charlieho Andílci, Kill Bill + lucy liu
2, 2
4, 2
3, 1 - terminator + svarcik
5, 2 - Jak proste + lucy liu

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:dc3e:49...–
peter
~ Anonymní uživatel
3981 příspěvků
17. 6. 2015   #82
-
0
-

ondrej390 - "z této entity entitu silnou, vzhledem k tomu, že jednoznačný identifikátor vztahu film <-> herec je vždy id filmu a id herce". Jestli myslis to, ze pridala k propojovaci tabulce id, tak ja se k ni pridavam. :) Pro mazani konkterniho propojeni nebo jeho zmeny je rychlejsi hledat podle id nez podle kombinace dvou id. Ale i to lze a neco malo by se tim asi usetrilo mista. Ten lic stejne asi budes vytvaret pro selecty a pod.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:dc3e:49...–
peter
~ Anonymní uživatel
3981 příspěvků
17. 6. 2015   #83
-
0
-

lic *klic

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:dc3e:49...–
Swarley
~ Anonymní uživatel
44 příspěvků
17. 6. 2015   #84
-
0
-

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`);
Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
ondrej39+1
Věrný člen
17. 6. 2015   #85
-
0
-

#84 Swarley
To už vypadá podstatně lépe.  

Nahlásit jako SPAM
IP: 79.141.243.–
Inject all the dependencies!
Swarley
~ Anonymní uživatel
44 příspěvků
17. 6. 2015   #86
-
0
-

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??

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Swarley
~ Anonymní uživatel
44 příspěvků
17. 6. 2015   #87
-
0
-

#81 peter
Tu vyslednu tabulku je potrebne tiez vyplnovat nejak manualne alebo by to malo ist automaticky?? Ja vobec neviem jak...

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Swarley
~ Anonymní uživatel
44 příspěvků
17. 6. 2015   #88
-
0
-

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 
Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
z_moravec
~ Redaktor
+3
Posthunter
17. 6. 2015   #89
-
0
-

Chybí ti tam čárka

SELECT
a.herec,
b.film
Nahlásit jako SPAM
IP: 94.220.255.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Swarley
~ Anonymní uživatel
44 příspěvků
17. 6. 2015   #90
-
0
-

#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?

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Swarley
~ Anonymní uživatel
44 příspěvků
17. 6. 2015   #91
-
0
-

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

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Kit+15
Guru
17. 6. 2015   #92
-
0
-

#91 Swarley
Protože to udělá tzv. kartézský součin. Je nutné definovat podmínku pro spojení za klauzulí ON, např. takto:

SELECT * FROM film JOIN herec ON film.id = herec.film_id;

Pokud by to mělo být M:N, měla by tam ještě být tabulka `film_herec`

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
18. 6. 2015   #93
-
0
-

Ja ti nejak nerozumim. Mas tabulky. Potrebujes je naplnit. Ten program pro pridavani si musis napsat nebo to tam nacucat pres phpmyadmina.
Pridas film. Pridas herce. Propojis film a herce.
Formular 1, formular 2, formular 3

Formular 3 bude vypadat treba tak, ze zobrazis <select> se seznamem fillmu a pod nim bude tabulka s checkboxy (<input>), co radek, to herec, kde si uzivatel zaskrta, kteri herzi v tom filmu jsou. Taky bys tam pri zobrazeni filmu mel vypsat uz prirazene herce, zaskrtnout checkbox :)
[ Carliho andilci \/ ]
[ ] Svarcik
[x] Lucy lui
[ Ulozit zmenu ]

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:658e:8b...–
Swarley
~ Anonymní uživatel
44 příspěvků
18. 6. 2015   #94
-
0
-

#92 Kit
Diky.

Okej tak teda mam tabulku herci kde je herec a id_herec a chcem to vypisat do formu ako checkboxy ako to teda bude? Bude tam nejaky foreach, a potom normalne <input type="checkbox".....?

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Kit+15
Guru
18. 6. 2015   #95
-
0
-

#94 Swarley
Asi ano. HTML už do PHP nedávám, na to mám šablony.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Swarley
~ Anonymní uživatel
44 příspěvků
18. 6. 2015   #96
-
0
-

#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"]?>">
Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Swarley
~ Anonymní uživatel
44 příspěvků
18. 6. 2015   #97
-
0
-

** tabulka sa vola zaner a je tam id_zaner a zaner

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Swarley
~ Anonymní uživatel
44 příspěvků
18. 6. 2015   #98
-
0
-

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...

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Swarley
~ Anonymní uživatel
44 příspěvků
18. 6. 2015   #99
-
0
-

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 } ?>
Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Kit+15
Guru
18. 6. 2015   #100
-
0
-

#99 Swarley
Proč tam máš ten count? Je to drahý a podle mne docela zbytečný dotaz.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
18. 6. 2015   #101
-
0
-

#96 Swarley
Tak to z hlavy nevím. Jak někdo začne míchat dohromady SQL, PHP a HTML, tak se v tom ztrácím...

Večer se na to mrknu.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
18. 6. 2015   #102
-
0
-

Promin, ale skutecne jsi zkousel ten muj priklad v prispevku #44? mam to tam i s vytvorenim tabulky  a vypsanim par radku, pokud tam nejake jsou.
http://programujte.com/…-potrebujem/#…

Se porad motas v tom hlavnim. Jednou to udelas ok a pak to placas vselijak. Nabyvam dojmu, ze mas tema rozhozene vsude mozne po forech a obcas ti to nekdo napise spravne, tak to das hned do dalsiho forka :)

1. vytvoris dotaz na databazi, treba "SELECT * FROM tabulka"
2. ulozis ho do promenne
$query = "SELECT * FROM tabulka";
3. vytahnes z db odpoved, jakysi balik dat, ve kterem se vyzna jen fetch.
$stmt = $db->prepare($query);
$stmt->bindValue(1, $offset, PDO::PARAM_INT);
$stmt->execute(); // ja jsem zvyklej na syntaxi s $result z mysql, ale budiz, zkousnu i nesrozumitelne zkratky jako stmt a pod :)
4. pres fetch z toho baliku, kterej je ted ulozenej do $stmt vythnes 1 radek.
$row = $stmt->fetch();
4b.
Kdyz chces vic, tak to musis pres cyklus a opakovat, dokud fetch dava vysledky, viz muj priklad 44
while(($row = $stmt->fetch(PDO::FETCH_ASSOC))!==false) {
var_dump($row);
FetchAll z toho mozna vytahne vsechno, ale ten ja treba nepouzivam, pac PDO zapisy jsou pekne napikacu. A uz jsem zvyklej na cykly z mysql, ktere mi nezabiraji pamet jako fetchAll.
Zlate mysql_. Nevim, ci napad to bylo rusit :) Velkym klackem po hlave, ono ho to prejde.

V prispevku #96 totiz pises
foreach ($_POST['zaner'] as $row) {
$sql = "SELECT * FROM zaner";
a dal? tam schazi nejaky kus kodu.

Jo, muze se stat, ze forko nejake kody odmazava. Ma nejake znacky rezervovane. Presne si nevybavim, co mi takhle naposled odmazalo :) Muzes pouzit jsfiddle.net nebo jine uloziste na kod, kdyz to porad zlobi.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:658e:8b...–
peter
~ Anonymní uživatel
3981 příspěvků
18. 6. 2015   #103
-
0
-

jestli ten zacatek mas dobre, i sql dotaz, tak tam pokracuj

$filmy = $stmt->fetchAll();
foreach($filmy as $row) {var_dump($row);}

az pak to preformatuj na html. A s tim michanim html a php ma Kit pravdu :) Nejlepe php zpracovat predem a pak udelat jednoduche echo promenne. Jak udelas php cyklus preruseny html kodem, tak je to neprehledne. A navic se to muze i pomalu vykreslovat, html zvlast, pak se ceka na server a php, pak zas kousicek stranky...

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:658e:8b...–
Swarley
~ Anonymní uživatel
44 příspěvků
18. 6. 2015   #104
-
0
-

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.

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Swarley
~ Anonymní uživatel
44 příspěvků
18. 6. 2015   #105
-
0
-

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>
Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Kit+15
Guru
19. 6. 2015   #106
-
0
-

#104 Swarley
Až v té databázi budeš mít několik (desítek) tisíc záznamů, ten count() ti tu aplikaci prakticky zastaví kvůli přetížení databáze. Zbav se toho count(), dokud je čas.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
19. 6. 2015   #107
-
0
-

1)  Prispevek  #62
"nenormalne ma tlaci cas" - to mas blbe, ale nas to neboli, mame casu... Mel jsi zacit hned, jak jsi dostal zadani. A ted se hodi doplnit hlaska ze simpsnu Chaaachaaa :)
2) Zkousel jsi napsat normalni INSERT idecek pro tu propojovaci tabulku, podobne jako mas insert filmu?
Tak, kdyz ti delaji problem checkboxy, tak to udelej tak, ze das obobe jako <select>y, Nechapu, ze umis udelat v html radek tabulky <tr> <td>... .Ale neumis udelat checkbox? 

$str =  '<label><input type=checkbox value=%2$s name=ch%1$s> %3$s</label>';
echo sprintf($str, $i, $id2, $value2); // das to do cyklu s $i; $id2 je id herce, $value je nazev herce

A pri cteni php budes hledat, zda $_POST $key nebosahuje na zacatku "ch". Nebo se tusim da pouzit pole, pak by to bylo jednodussi.
$str = '<label><input type=checkbox value=%2$s name="ch[]"> %3$s</label>';
 

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:8443:6e...–
peter
~ Anonymní uživatel
3981 příspěvků
19. 6. 2015   #108
-
0
-

jo, nevim, zda to tu bylo, ale jedna s konstrukci cyklu je take forech. Ta se ti bude prave tady hodit, protoze nevis, kolik tech ch tam bude v POST. Formular odesila jen zaskrtnute polozky (teda, aspon kdysi).
foreach ($_POST as $key=>$value) // $_POST['film'] = 'Terminator' -> $key='film', $value='Terminator'

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:8443:6e...–
Swarley
~ Anonymní uživatel
44 příspěvků
21. 6. 2015   #109
-
0
-

#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! :)

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý