Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

87 Stron V   1 2 3 > » 

mortus
Napisane: 4.05.2018, 13:24:29





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

To w ogóle nie ma prawa działać, bo odpowiedzi w ogóle nie są przypisane do pytań w formularzu i tyle. Po pierwsze ilość pytań (zmienna $ilepytan) w bazie danych to nie to samo, co identyfikator pytania, dlatego nie możemy użyć tutaj num_rows chyba, że baza danych będzie cały czas taka sama i nikt nie usunie np. pytania o id 5, 20, czy 41. Jeśli docelowo mają być wyświetlane wszystkie pytania, to w ogóle nie ma się co nad tym zastanawiać i należy pozostać przy pierwszym zapytaniu:
  1. SELECT * FROM `praca`;

które daje nam cały zestaw potrzebnych danych i można tylko na tym bazować bez konieczności tworzenia kolejnych pętli, w których wybieramy odpowiednio losowe pytania i ich liczbę. Jeśli z kolei liczba wyświetlanych pytań ma być zmienna, a baza danych jest mała, to można by spróbować zapytania:
  1. SELECT * FROM `praca` ORDER BY RAND() LIMIT $liczbapytan;

gdzie zmienna $liczbapytan to ilość pytań, które chcemy pobrać z bazy danych. Zapytanie to wybierze nam gotowy zbiór losowych danych w oczekiwanej ilości. Nie sprawdzi się jednak w przypadku dużych baz danych, gdzie trzeba szukać jakiejś konkretnej metody optymalizacji zapytania albo odpowiedniego podejścia po stronie php.
W obu przypadkach możemy sobie utworzyć tablicę asocjacyjną, której indeks będzie jednocześnie identyfikatorem pytania:
  1. $query = "NASZE ZAPYTANIE";
  2. if($dane = $mysqli->query($query)) {
  3. $pytania = array();
  4. while ($wiersz = $dane->fetch_assoc()) {
  5. $pytania[$wiersz["id"]] = $wiersz;
  6. }
  7. $dane->free();
  8. }
  9. // Dzięki temu otrzymujemy tablicę danych, jak niżej.
  10. // W PRZYPADKU PIERWSZEGO ZAPYTANIA
  11. /*
  12. $pytania = [
  13.   1 => [
  14.   "id" => 1,
  15.   "pytanie" => "Pytanie 1 z bazy danych",
  16.   "odp1" => "Odpowiedź 1 na pytanie 1 z bazy danych",
  17.   "odp2" => "Odpowiedź 2 na pytanie 1 z bazy danych",
  18.   "poprawna" => "odp1 lub odp2"
  19.   ],
  20.   2 => [
  21.   "id" => 2,
  22.   "pytanie" => "Pytanie 2 z bazy danych",
  23.   "odp1" => "Odpowiedź 1 na pytanie 2 z bazy danych",
  24.   "odp2" => "Odpowiedź 2 na pytanie 2 z bazy danych",
  25.   "poprawna" => "odp1 lub odp2"
  26.   ],
  27. itd...
  28. ];
  29. */
  30. // W PRZYPADKU DRUGIEGO ZAPYTANIA
  31. /*
  32. $pytania = [
  33.   42 => [
  34.   "id" => 42,
  35.   "pytanie" => "Pytanie 42 z bazy danych",
  36.   "odp1" => "Odpowiedź 1 na pytanie 42 z bazy danych",
  37.   "odp2" => "Odpowiedź 2 na pytanie 42 z bazy danych",
  38.   "poprawna" => "odp1"
  39.   ],
  40.   21 => [
  41.   "id" => 21,
  42.   "pytanie" => "Pytanie 21 z bazy danych",
  43.   "odp1" => "Odpowiedź 1 na pytanie 21 z bazy danych",
  44.   "odp2" => "Odpowiedź 2 na pytanie 21 z bazy danych",
  45.   "poprawna" => "odp2"
  46.   ],
  47. itd...
  48. ];
  49. */

Co ważne, kolumna poprawna w bazie danych powinna wskazywać tylko i wyłącznie numer poprawnej odpowiedzi (ewentualnie nazwę kolumny z poprawną odpowiedzią, czyli dosłownie odp1 lub odp2). Nie może przechowywać całej poprawnej odpowiedzi, bo będzie to kompletnie nieoptymalne i obarczone błędami. Skąd wiadomo, że w kolumnie poprawna nie pojawi się jakiś dodatkowy pusty znak? Wtedy porównanie udzielonej odpowiedzi z poprawną "bierze w łeb".
Jeśli chcemy wyświetlić wszystkie pytania w losowej kolejności, to czeka nas jeszcze trochę zabawy, ale to już pozostawiam Tobie (dla ułatwienia proponuje przejrzeć komentarze do shuffle). W każdym bądź razie docelowo nawet z pierwszego zapytania możemy uzyskać wymieszaną tablicę wszystkich lub ograniczonych ilościowo pytań wraz z powiązanymi odpowiedziami i wskazaniem tej poprawnej. Załóżmy, że mamy taką tablicę. Pozostaje zatem wygenerować elementy formularza:
  1. // pokażę tylko, jak wygenerować elementy input typu radio powiązane z danym pytaniem
  2. $i = 1; // sztuczne id (użytkownik końcowy nie musi, bądź nie powinien znać identyfikatora pytania z bazy danych
  3. foreach($pytania as $id => $wiersz) {
  4. echo "Pytanie {$i}: {$wiersz["pytanie"]}<br>";
  5. echo "Odpowiedzi:<br>";
  6. echo "<label><input type=\"radio\" name=\"odpowiedzi[{$wiersz["id"]}]\" value=\"odp1\"> 1. {$wiersz["odp1"]}</label><br>";
  7. echo "<label><input type=\"radio\" name=\"odpowiedzi[{$wiersz["id"]}]\" value=\"odp2\"> 2. {$wiersz["odp2"]}</label><br>";
  8. $i++;
  9. }
  10. // Wtedy (oczywiście jeśli tylko zaznaczymy którąś z odpowiedzi, bo w przeciwnym wypadku tablica odpowiedzi w zmiennej $_POST będzie pusta) dostaniemy coś takiego:
  11. /*
  12. $_POST = array(
  13.   [odpowiedzi] => array(
  14.   [42] => "odp1"
  15.   [21] => "odp2"
  16.   )
  17. )
  18. */
  19. // I poruszając się po tej tablicy sprawdzamy, czy udzielone odpowiedzi są poprawne, co znowu wiąże się z zabawą z tablicami
  20. if(is_set($_POST["odpowiedzi"] {
  21. $odpowiedzi = $_POST["odpowiedzi"];
  22. foreach($odpowiedzi as $id_pytania => $wskazana_odpowiedz) {
  23. // tutaj sprawdzamy, czy wskazana odpowiedź na pytanie o danym id jest poprawna, aczkolwiek niekoniecznie musi to być zrobione w pętli
  24. }
  25. }
  Forum: Przedszkole · Podgląd postu: #1232815 · Odpowiedzi: 7 · Wyświetleń: 292

mortus
Napisane: 28.05.2017, 11:21:17





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Twórcy Laravel'a nazwali to View Composers.
  Forum: Frameworki · Podgląd postu: #1216673 · Odpowiedzi: 1 · Wyświetleń: 543

mortus
Napisane: 28.05.2017, 11:14:34





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Warunek, który ma wyeliminować aktualnego użytkownika z listy zalogowanych znajomych zapewne powinien dotyczyć tabeli friend, a nie users.
  Forum: Przedszkole · Podgląd postu: #1216672 · Odpowiedzi: 6 · Wyświetleń: 475

mortus
Napisane: 19.05.2017, 16:01:16





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Zmienna $org to zasób, a funkcja oczekuje ścieżki (path):
  1. $org = imagecreatefromjpeg("".$folder."".$d_przed."".$namenowa."");
  2. // ...
  3. $image = imagecreatefromjpeg($org);

To samo z getimagesize(). A reszta się prawdopodobnie sypie przez pierwszy błąd.
  Forum: PHP · Podgląd postu: #1216126 · Odpowiedzi: 2 · Wyświetleń: 424

mortus
Napisane: 19.05.2017, 16:54:52





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

background-size: cover; i background-size: contain; skalują obraz odpowiednio z zachowaniem współczynnika rozmiaru, dlatego w pierwszym przypadku obraz jest rozciągnięty, a w drugim jest zbyt wąski (bądź też niski, jak kto woli). Aby zachować wysokość 268 px przy małych rozdzielczościach ekranu możesz ją po prostu ustawić:
  1. background-size: 100% 268px;

Oczywiście dla większych rozdzielczości css będzie inny.
  Forum: Przedszkole · Podgląd postu: #1216132 · Odpowiedzi: 6 · Wyświetleń: 464

mortus
Napisane: 2.05.2017, 14:27:23





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Zgadzam się. Nie zwróciłem uwagi, że to klasa z zewnątrz.
  Forum: Przedszkole · Podgląd postu: #1215102 · Odpowiedzi: 7 · Wyświetleń: 492

mortus
Napisane: 1.05.2017, 21:31:23





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Jeśli porównujesz liczby, to nie używaj cudzysłowów i apostrofów. W tym przypadku wystarczy po prostu 1 zamiast '1'.

PS. Może warto byłoby tę funkcjonalność umieścić w klasie Pesel?
  Forum: Przedszkole · Podgląd postu: #1215078 · Odpowiedzi: 7 · Wyświetleń: 492

mortus
Napisane: 1.05.2017, 20:49:45





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Przecież wyświetlasz płeć jako liczbę 1 lub 2. Jeśli chcesz wyświetlić tekst, to zmień funkcję getSex() i zastosuj prostego ifa, w którym sprawdzisz czy $this->sex to 1, czy dwa i zwrócisz (return) odpowiednio "female" lub "male".
  Forum: Przedszkole · Podgląd postu: #1215073 · Odpowiedzi: 7 · Wyświetleń: 492

mortus
Napisane: 1.05.2017, 13:37:59





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Trzeba dodać onmouseover i onmouseout eventhandler do każdego slide'u. Pierwszy czyści slideInterval, a drugi ponownie go ustawia. Przykład dla elementów li posiadających klasę slajd:
[JAVASCRIPT] pobierz, plaintext
  1. var interval = setInterval(moveSlide, 3000);
  2. var slides = document.getElementsByClassName("slajd");
  3. for (var i = 0; i < slides.length; i++) {
  4. slides[i].onmouseover = stopSlider;
  5. slides[i].onmouseout = startSlider;
  6. }
  7. function startSlider() {
  8. console.log("Runned");
  9. interval = setInterval(moveSlide, 3000);
  10. }
  11. function stopSlider() {
  12. console.log("Stopped");
  13. clearInterval(interval);
  14. }
  15. function moveSlide() {
  16. console.log("Moved to next slide");
  17. }
[JAVASCRIPT] pobierz, plaintext
  Forum: Przedszkole · Podgląd postu: #1215051 · Odpowiedzi: 2 · Wyświetleń: 243

mortus
Napisane: 1.05.2017, 14:51:27





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

novalidate to atrybut formularza <form>, który wyłącza walidację całego formularza po jego zatwierdzeniu przyciskiem typu submit. Atrybut ten nie ma zastosowania w przypadku pól formularza. Natomiast find() służy tylko i wyłącznie do "odnalezienia" określonych elementów w DOM i nie sprawdza po drodze niczego. Sprawdzenia dokonujesz później w pętli for().
  Forum: Przedszkole · Podgląd postu: #1215053 · Odpowiedzi: 5 · Wyświetleń: 257

mortus
Napisane: 30.04.2017, 20:05:17





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Fakt, ta funkcjonalność wynika z zastosowania bootstrap'a, a dokładnie stylu dla elementu .btn[disabled]. Niestety nie da się stwierdzić w czym tkwi problem, patrząc tylko na tę linijkę kodu. Trzeba całość zobaczyć "w akcji". Być może istotne jest czym jest element nadrzędny, być może gdzieś nadpisujesz wspomniany wyżej styl, a być może wystarczy wyczyścić cache (Ctrl + F5 na tej konkretnej stronie). Przyczyn może być kilka.

PS. Nie zmienia to faktu, że kod będzie niezgodny ze standardem HTML, ponieważ <a> nie może posiadać atrybutu disabled. Natomiast bootstrap'owy .btn[disabled] odpowiada również bootstrap'owemu .btn.disabled.
  Forum: Przedszkole · Podgląd postu: #1215038 · Odpowiedzi: 5 · Wyświetleń: 257

mortus
Napisane: 30.04.2017, 18:35:32





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Przecież to nie jest przycisk <button> tylko odnośnik/kotwica <a>. Może użyj bootstrap'owego stylu disabled, przy czym trzeba później obsługę w javascript zrobić.
  Forum: Przedszkole · Podgląd postu: #1215031 · Odpowiedzi: 5 · Wyświetleń: 257

mortus
Napisane: 1.05.2017, 21:03:22





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Skąd wniosek, że plik się nie uploaduje? Tablica $_FILES będzie się zawsze wyświetlać, bo przecież masz to w kodzie zapisane:
  1. print_r($_FILES);

Może Twoje pytanie powinno dotyczyć kwestii dostępu do wgranego pliku?
  Forum: PHP · Podgląd postu: #1215074 · Odpowiedzi: 7 · Wyświetleń: 501

mortus
Napisane: 17.05.2015, 12:26:42





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Z tego fragmentu kodu nie da się niczego wywnioskować. Gdzie ten cały AJAX?
  Forum: Przedszkole · Podgląd postu: #1158348 · Odpowiedzi: 4 · Wyświetleń: 143

mortus
Napisane: 5.11.2014, 19:42:28





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Dokładniej te dwa fragmenty java script:
[JAVASCRIPT] pobierz, plaintext
  1. jQuery(document).ready(function() {
  2. // ...
  3. jQuery('.main-container > div:not(".preloader")').each(function() {
  4. jQuery(this).css({'visibility': 'hidden'});
  5. });
  6. // ...
  7.  
  8. });
  9. jQuery(window).load(function() {
  10. // ...
  11. jQuery('.main-container > div:not(".preloader")').each(function() {
  12. jQuery(this).css({'visibility': 'visible'});
  13. });
  14. setTimeout( function() { jQuery('.main-container > .preloader').fadeOut(300, function() {
  15. jQuery('.login-form-container').fadeIn(600);
  16. }); }, 1000);
  17. });
[JAVASCRIPT] pobierz, plaintext
  Forum: Przedszkole · Podgląd postu: #1131005 · Odpowiedzi: 8 · Wyświetleń: 256

mortus
Napisane: 5.11.2014, 19:28:46





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Przecież tam nic nie ma, a jedynie jakiś (prawdopodobnie na niby) preloader.
  Forum: Przedszkole · Podgląd postu: #1131001 · Odpowiedzi: 8 · Wyświetleń: 256

mortus
Napisane: 6.11.2014, 12:33:24





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Problem zapewne pojawia się w tym miejscu:
  1. $killEmAllHydrate = $hydrator->hydrate($killEmAllData, $killEmAll);

Korzystamy tutaj z tablicy $killEmAllData, w której songs identyfikowane są jedynie przez title. Trzeba by było zatem zmienić strukturę danych:
  1. $killEmAll = new Album();
  2. $killEmAllData = array(
  3. 'artist' => 'Metallica',
  4. 'title' => 'Kill em All',
  5. 'songs' => array(
  6. array('title' => 'Hit the Lights', $killEmAll),
  7. array('title' => 'The Four Horsemen', $killEmAll),
  8. array('title' => 'Motorbreath', $killEmAll),
  9. array('title' => 'Jump in the Fire', $killEmAll),
  10. array('title' => '(Anesthesia) Pulling Teeth', $killEmAll),
  11. array('title' => 'Whiplash', $killEmAll),
  12. array('title' => 'Phantom Lord', $killEmAll),
  13. array('title' => 'No Remorse', $killEmAll),
  14. array('title' => 'Seek & Destroy', $killEmAll),
  15. array('title' => 'Metal Militia', $killEmAll),
  16. array('title' => 'Am I Evil?', $killEmAll),
  17. array('title' => 'Blitzkrieg', $killEmAll),
  18. )
  19. );
  20. $hydrator = $this->getDoctrineHydrator();
  21. $killEmAllHydrate = $hydrator->hydrate($killEmAllData, $killEmAll);
  22.  
  23. $songsCollection = new \Doctrine\Common\Collections\ArrayCollection();
  24. foreach ($killEmAllData['songs'] as $songArray) {
  25. $song = $hydrator->hydrate($songArray, new \Album\Entity\Song());
  26. $songsCollection->add($song);
  27. }
  28. $killEmAll->addSongs($songsCollection);

Nie jestem również pewien kolejności wykonywanych działań. Wg dokumentacji https://github.com/doctrine/DoctrineModule/...any-association, najpierw należałoby utworzyć tablicę obiektów Song (jeśli takowe encje w bazie danych nie istnieją), a dopiero później można użyć hydratora, przy czym kolekcja $songs zostanie wypełniona automatycznie. Wtedy kod wyglądałby tak:
  1. $killEmAll = new Album();
  2. $killEmAllSongsData = array(
  3. array('title' => 'Hit the Lights', $killEmAll),
  4. array('title' => 'The Four Horsemen', $killEmAll),
  5. array('title' => 'Motorbreath', $killEmAll),
  6. array('title' => 'Jump in the Fire', $killEmAll),
  7. array('title' => '(Anesthesia) Pulling Teeth', $killEmAll),
  8. array('title' => 'Whiplash', $killEmAll),
  9. array('title' => 'Phantom Lord', $killEmAll),
  10. array('title' => 'No Remorse', $killEmAll),
  11. array('title' => 'Seek & Destroy', $killEmAll),
  12. array('title' => 'Metal Militia', $killEmAll),
  13. array('title' => 'Am I Evil?', $killEmAll),
  14. array('title' => 'Blitzkrieg', $killEmAll),
  15. );
  16. $hydrator = $this->getDoctrineHydrator();
  17. $songs = array();
  18. foreach($killEmAllSongsData as $songArray) {
  19. $songs[] = $hydrator->hydrate($songArray, new \Album\Entity\Song())
  20. }
  21. $killEmAllData = array(
  22. 'artist' => 'Metallica',
  23. 'title' => 'Kill em All',
  24. 'songs' => $songs
  25. );
  26. $killEmAllHydrate = $hydrator->hydrate($killEmAllData, $killEmAll);

Przyjrzyj się dokładniej dokumentacji, którą możesz znaleźć pod odnośnikiem powyżej, bowiem Example 3 opisuje podobny przypadek, z tym, że Ty używasz klucza złożonego w połączeniu z kluczem obcym.
  Forum: PHP · Podgląd postu: #1131079 · Odpowiedzi: 6 · Wyświetleń: 711

mortus
Napisane: 5.11.2014, 20:41:22





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Skoro jest to zabieg celowy, to konstruktor encji Song powinien wyglądać tak:
  1. public function __construction(string $title, Album $album) {
  2. $this->title = $title;
  3. $this->album = $album;
  4. }

Natomiast podczas tworzenia obiektu Song powinieneś podać zarówno jego title, jak i Album, do którego Song jest przypisany:
  1. $album = new Album();
  2. $song = new Song('Jakiś tytuł', $album);

Nie jestem pewien, czy hydrator Doctrine poradzi sobie z tym, gdyby jednak miał, to trzeba to uwzględnić w pętli foreach:
  1. $songsCollection = new \Doctrine\Common\Collections\ArrayCollection();
  2. foreach ($killEmAllData['songs'] as $songArray) {
  3. $songArray['album'] = $killEmAll;
  4. $song = $hydrator->hydrate($songArray, new \Album\Entity\Song());
  5. $songsCollection->add($song);
  6. }
  7. $killEmAll->addSongs($songsCollection);

Mamy tutaj takie małe "błędne" koło.
  Forum: PHP · Podgląd postu: #1131017 · Odpowiedzi: 6 · Wyświetleń: 711

mortus
Napisane: 5.11.2014, 19:23:17





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Encja Song ma złożony klucz główny (przyjrzyj się @ORM\Id) i jest identyfikowana przez title i album jednocześnie.
  1. /**
  2.   * @var string
  3.   * @ORM\Id
  4.   * @ORM\GeneratedValue(strategy="AUTO")
  5.   * @ORM\Column(type="string");
  6.   */
  7. protected $title;
  8.  
  9. /**
  10.   *
  11.   * @var Album
  12.   *
  13.   * @ORM\Id
  14.   * @ORM\GeneratedValue(strategy="NONE")
  15.   * @ORM\ManyToOne(targetEntity="Album", inversedBy="songs")
  16.   * @ORM\JoinColumn(name="albumId", referencedColumnName="albumId")
  17.   */
  18. protected $album;

Nie jestem pewien, czy to celowy zabieg, czy może pomyłka.
  Forum: PHP · Podgląd postu: #1130999 · Odpowiedzi: 6 · Wyświetleń: 711

mortus
Napisane: 4.11.2014, 19:08:41





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

  1. SELECT (SELECT count(t1.id) FROM table1 t1) + (SELECT count(t2.id) FROM table2 t2) AS suma;
  Forum: PHP · Podgląd postu: #1130819 · Odpowiedzi: 5 · Wyświetleń: 352

mortus
Napisane: 31.10.2014, 22:51:30





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

2. punkt nie opisuje w żaden sposób kwestii normalizacji, a jedynie sposób implementacji relacji wiele do wielu (taką relację można stworzyć wykorzystując jedynie tabelę dodatkową, którą w tym przypadku jest news_category).

Normalizacji bardziej dotyczy punkt 1. Normalizacja to w wielkim skrócie doprowadzanie danych do jak najprostszej postaci, bez ich utraty. Taką najprostszą postacią kategorii wydaje się być encja zawierająca jedynie identyfikator i nazwę tej kategorii, a ilość newsów w tej kategorii ściślej dotyczy samych newsów. Zatem dodanie dodatkowej kolumny (count_news) w tabeli kategorii nazwiemy denormalizacją, bowiem liczbę newsów możemy uzyskać za pomocą wspomnianego COUNT i nie musimy jej przechowywać - oczywiście z punktu widzenia normalizacji. Natomiast w przypadku kilkudziesięciu lub setek kategorii taka denormalizacja jest nawet wskazana, bo wpływa w dużej mierze na wydajność aplikacji.
  Forum: Przedszkole · Podgląd postu: #1130465 · Odpowiedzi: 3 · Wyświetleń: 703

mortus
Napisane: 27.10.2014, 20:10:27





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

  1. $tablica_po_zmianie = array();
  2. foreach($tablica_przed_zmiana as $key => $value) {
  3. $region = $value['region'];
  4. $tablica_po_zmianie[$region] = $value;
  5. unset($tablica_po_zmianie[$region]['region']);
  6. }
  Forum: Przedszkole · Podgląd postu: #1129918 · Odpowiedzi: 2 · Wyświetleń: 237

mortus
Napisane: 27.10.2014, 21:05:41





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Jeśli używasz dropdown menu z Wordpres'a, to:
  1. ul.dropdown > li.current-menu-item.menu-item-667 > a {
  2. color: red !important;
  3. }
  4. ul.dropdown > li.current-menu-parent.menu-item-667 > a {
  5. color: red !important;
  6. }
  7. ul.dropdown > li.current-menu-item.menu-item-831 > a {
  8. color: #45D820 !important;
  9. }
  10. ul.dropdown > li.current-menu-parent.menu-item-831 > a {
  11. color: #45D820 !important;
  12. }
  13. ul.dropdown > li.current-menu-item.menu-item-710 > a {
  14. color: #17CEEA !important;
  15. }
  16. ul.dropdown > li.current-menu-parent.menu-item-710 > a {
  17. color: #17CEEA !important;
  18. }

Gdyby to było menu bez rozwijania, to można śmiało usunąć znaki >, które oznaczają przynależność lub relację parent - children (jak kto woli).
  Forum: CSS · Podgląd postu: #1129923 · Odpowiedzi: 4 · Wyświetleń: 925

mortus
Napisane: 25.10.2014, 16:20:05





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Na przykład tak:
  1. $name_table = "zexercise_".$id;
  2. $sql = 'CREATE TABLE `'.$name_table.'` (
  3. `id` INT NOT NULL AUTO_INCREMENT,
  4. `pl` VARCHAR(255) NOT NULL,
  5. `eng` VARCHAR(255) NOT NULL,
  6. `use` INT NOT NULL,
  7. `comment` VARCHAR(255) NOT NULL
  8. )';


Sugeruję zajrzeć do tematu "Jak poprawnie zadać pytanie", zapoznać się z nim i zastosować do wskazówek na temat wyświetlania błędów zapytań SQL.
  Forum: Przedszkole · Podgląd postu: #1129696 · Odpowiedzi: 4 · Wyświetleń: 989

mortus
Napisane: 25.10.2014, 16:09:20





Grupa: Zarejestrowani
Postów: 2 170
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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

Nazwa tabeli w cudzysłowach.
  Forum: Przedszkole · Podgląd postu: #1129693 · Odpowiedzi: 4 · Wyświetleń: 989

87 Stron V   1 2 3 > » 

New Posts  Nowe odpowiedzi
No New Posts  Brak nowych odpowiedzi
Hot topic  Popularny temat (Nowe)
No new  Popularny temat (Brak nowych)
Poll  Sonda (Nowe)
No new votes  Sonda (Brak nowych)
Closed  Zamknięty temat
Moved  Przeniesiony temat
 

RSS Wersja Lo-Fi Aktualny czas: 19.09.2018 - 08:52