Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][sql] Jak umieścić wartość NULL w bazie danych, Przy pomocy zmiennej...
charlie-cherry
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
charlie-cherry
post
Post #2





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?
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 12.10.2025 - 04:54