![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 5 Dołączył: 15.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Chcę umieścić w niektórych polach wartości Null. Oczywiście już uwzględniłem taką możliwość w bazie danych. Mam już działające rozwiązanie, ale mój aktualny kod jest bardzo długi:
CODE mysql_connect(localhost, xxxxx, xxxxxx) or die(mysql_error()); mysql_select_db("xxxx") or die(mysql_error()); mysql_query('SET CHARACTER SET utf8'); mysql_query('SET NAMES utf8'); $numer = NULL; $tytul = addslashes($_GET['tytul']);; $rodzaj = "Tipsy i kody"; $komputer = addslashes($_GET['komputer']); $tresc= addslashes($_GET['tresc']); $autor = addslashes($_GET['autor']); $zrodlo = addslashes($_GET['zrodlo']); if (empty($autor) && empty($zrodlo)) { $query = "INSERT INTO `wilq`.`tnt` ( `numer` , `tytul` , `tresc` , `rodzaj` , `komputer` , `autor` , `zrodlo`) VALUES ( '$numer' , '$tytul', '$tresc', '$rodzaj', '$komputer', null, null)"; $result = mysql_query($query); echo $query;} elseif (empty($autor)) { $query = "INSERT INTO `wilq`.`tnt` ( `numer` , `tytul` , `tresc` , `rodzaj` , `komputer` , `autor` , `zrodlo`) VALUES ( '$numer' , '$tytul', '$tresc', '$rodzaj', '$komputer', null, '$zrodlo')"; $result = mysql_query($query); echo $query;} elseif (empty($zrodlo)) { $query = "INSERT INTO `wilq`.`tnt` ( `numer` , `tytul` , `tresc` , `rodzaj` , `komputer` , `autor` , `zrodlo`) VALUES ( '$numer' , '$tytul', '$tresc', '$rodzaj', '$komputer', '$autor', null)"; $result = mysql_query($query); echo $query;} else { $query = "INSERT INTO `wilq`.`tnt` ( `numer` , `tytul` , `tresc` , `rodzaj` , `komputer` , `autor` , `zrodlo`) VALUES ( '$numer' , '$tytul', '$tresc', '$rodzaj', '$komputer', '$autor', '$zrodlo')"; $result = mysql_query($query); echo $query;} ?> Jak to skrócić? Próbowałem eksperymentować w tym kierunku, ale niestety nie do końca to działa. Dane są przekazywane, ale w bazie danych nie pojawiają się wartości null, a jedynie puste pola. Kod mysql_connect(localhost, xxxx, xxxxx) or die(mysql_error());
mysql_select_db("xxxx") or die(mysql_error()); mysql_query('SET CHARACTER SET utf8'); mysql_query('SET NAMES utf8'); $numer = NULL; $tytul = addslashes($_GET['tytul']);; $rodzaj = "Tipsy i kody"; $komputer = addslashes($_GET['komputer']); $tresc= addslashes($_GET['tresc']); $autor = addslashes($_GET['autor']); $zrodlo = addslashes($_GET['zrodlo']); if (empty($autor)) {$autor == 'null';} if (empty($zrodlo)) {$zrodlo == 'null';} $query = "INSERT INTO `wilq`.`tnt` ( `numer` , `tytul` , `tresc` , `rodzaj` , `komputer` , `autor` , `zrodlo` ) VALUES ( '$numer' , '$tytul', '$tresc', '$rodzaj', '$komputer', '$autor', '$zrodlo')"; $result = mysql_query($query); echo $query; ?> Ten post edytował charlie-cherry 26.01.2008, 07:27:34 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 67 Pomógł: 12 Dołączył: 20.01.2008 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem czy zauważyłeś, ale:
Pozdrawiam Inti |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 5 Dołączył: 15.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Niestety, nie pomaga, gdyż w bazie danych pojawia się czysto-tekstowa wartość 'null', a nie prawdziwy Null.
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 240 Pomógł: 17 Dołączył: 28.12.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
posłuchaj się pomyśl, zrób przypisanie wartości a nie porównanie, nie == tylko =
Ten post edytował Chrom 26.01.2008, 08:53:03 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 67 Pomógł: 12 Dołączył: 20.01.2008 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Szczerze mówiąc to najprościej by było, gdybyś podczas konstrukcji tabeli w bazie, dodał klauzulę do tych pól - DEFAULT NULL, co sprawi że jak nic nie dodasz do tablicy w tych polach, to automatycznie przyjmą wartość NULL.
Zatem tworzysz sobie tabele w ten sposób:
W tym wypadku już nie musisz sprawdzać warunku, czy zmienne $autor lub $zrodlo są puste, gdyż jeśli będą to i tak w bazie zostaną ustawione te pola na NULL. Swoją drogą zrozum, że:
w lini 3 i 6 nie ustawiasz żadnej wartości zmiennym $autor oraz $zrodlo, gdyż nie dokonujesz instrukcji przypisania, a porównania logicznego - odsyłam do google, jeśli nie widzisz w tym różnicy. Pozdrawiam Inti Ten post edytował Inti 26.01.2008, 09:17:36 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 67 Pomógł: 12 Dołączył: 20.01.2008 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
phpion
Możliwość przypisania zmiennej $autor = NULL oraz $zrodlo = NULL jest oczywiście mało drobiazgową zmianą, ale polecam ją jedynie, jeśli nie mamy dostępu do zmiany ustawieć bazy - nie musimy przecież od nowa tworzyć tabeli, a jedynie uaktualnić lub z modyfikować już isniejące rekordy. Owszem, mimo że takie sztywne przypisanie daje swoje reultaty, to niestety nie jest to poprawne podejście do problemu. Sprawdzanie, czy wartość jest pusta i ewentualne ustawianie jej jako NULL to w tym wypadku czyności mijające się z celem - działa, ale koszta operacji są większe. Jeśli dana czynność później wykonywać będzie się dajmy na to w pętli, to raz obciąża to skrypt i narzuca niepotrzebnych obliczeń i przekształeceń. Według mnie porawniej jest podejście do problemu z poziomu bazy danych i ustawienie konkretnych wartości domyślnie, co znacznie mniej wpłynie na wagę kodu. Pozrawiam Inti |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
@Inti:
Oczywiście, zgadzam się. Ja zawsze wychodzę z założenia, że jeśli można coś zrobić na samej bazie to zdecydowanie lepiej jest to zrobić właśnie na bazie, a nie w PHP. Chodzi tu oczywiście o ograniczenia dla kolumn, ograniczenia dla tabel, procedury, triggery itd. Rozwiązaniem w tym przypadku będzie po prostu:
![]() |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 5 Dołączył: 15.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za pomocy, acz należą się wam pewne wyjaśnienia:
$autor i $zrodlo miały ustawione wartość domyślną NULL od samego początku, gdyż miały być to pola "opcjonalne" - czyli informacja w nich może być, ale nie musi. Sęk w tym, że jeśli wpisywałem dane prosto z phpmyadmin i zostawiałem je puste, to pojawiała się w nich (wpisana italikami) wartość <i>null</i>, czyli zero. W przypadku wpisywania danych z mojego formularza, nie pojawiało nic (czyli w sumie też zero). Myślałem, że to błąd, ale wynika z tego, że tak to interpretuje Mysql. Niezależnie od tego czy używałem $autor = NULL, czy $autor = ' ', czy też w ogóle nic nie pisałem, w bazie danych po prostu pojawiała się pusta wartość. Moje zaniepokojenie (i próba otwarcia drzwi otwartych na oścież) wywołał fakt, że zarówno w PHPmyadmin, jak i czystym Mysql możliwe są dwie puste wartości - NULL i puste pole. Stąd też moje głupoty w stylu używania ==, gdyż próbowałem już każdej możliwej kombinacji, by ujrzeć wartość Null w bazie danych, w rekordzie dodanym za pomocą mojego formularza. Napisałem taką funkcję, która działa za każdym razem niezależnie od tego, czy w pola są puste, czy jest NULL: Kod echo "<strong>$tytul</strong>"." - "."$komputer"."<br> "; if (empty($autor)) {echo '<h6>'.$zrodlo.'</h6>';} elseif (empty($zrodlo)) {echo '<h6>'.$autor.'</h6>';} else { echo '<h6 class="extra">'.$autor.", ".$zrodlo.'</h6>';} echo nl2br($tresc)."<br><hr> "; Z poprawnego działania funkcji empty() wynika, że NULL = puste pole w SQL, mimo że może być dwojako oznaczone. A może się mylę? Czy jest jakaś realna różnica między NULL, a pustym polem, które miało wcześniej ustawione default NULL? |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 749 Pomógł: 37 Dołączył: 3.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
a czy wziąłeś pod uwagę że ' '!='', czyli że spacja nie jest równa pustemu polu?
-------------------- |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 5 Dołączył: 15.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Wziąłem, ale eksperymentując zauważyłem, że powyższy skrypt i tak działa. I dalej nie wiem czy jest jakaś różnica między NULL a pustym polem..
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Wziąłem, ale eksperymentując zauważyłem, że powyższy skrypt i tak działa. I dalej nie wiem czy jest jakaś różnica między NULL a pustym polem.. Puste pole to ciąg znaków o długości równej 0. Po prostu nic. Natomiast NULL to wartość nieznana. Ciekawostką jest, że przyrównanie dwóch pól o wartościach NULL (czyli np. pole1=pole2, gdzie zarówno pole1 to NULL jak i pole2 to NULL) zawsze zwróci fałsz. Może się wydawać to dziwne, że NULL != NULL (NULL NULLowi nie równy ![]() ![]() |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 749 Pomógł: 37 Dołączył: 3.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
a może po prostu lepiej będzie wszędzie mieć puste pola?
-------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 21.05.2025 - 08:10 |