Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MSSQL][PHP]zamiana zmiennej "0" na "null"
pela222
post
Post #1





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

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


Cześć,

  1. ...
  2. $data = 'SELECT *
  3. FROM `leadsltd`
  4. WHERE `id` = "'.$contactid.'"
  5. UNION
  6. SELECT *
  7. FROM `contactsltd`
  8. WHERE `id` = "'.$contactid.'"';
  9. ...
  10. $query = mysql_query($data) or die("Couldn't execute query. ". mysql_error());
  11. $data2 = mysql_fetch_array($query);

Za pomocą powiedzmy że czegoś takiego pobieram dane z mojej bazy danych i wstawiam do formularza za pomocą:
  1. <input type="text" name="name1" value="<?php echo $data2[hosp2]?>">


Czy moge zrobić aby w zmienna tablicowej $data2 sprawdzić które zmienne są równe "0" i zamienić ich wartość na "null"? Jeżeli, tak to prosze kod jak to zrobić.

Chodzi mi o coś takiego dla zmiennej tablicowej:

  1. if ($data2['hosp2'] = ""){
  2. $data2['hosp2'] = NULL;
  3. }



Przy okazji czy powinienem odwoływać się do zmiennej $data2[hosp2] czy poprzez $data2['hosp2'] - jaka jest różnica bo obie formy działają?

Dzięki za informację

Prawdziwy przedszkolak ;-)

Ten post edytował pela222 31.08.2014, 11:03:43
Go to the top of the page
+Quote Post
golabow
post
Post #2





Grupa: Zarejestrowani
Postów: 53
Pomógł: 17
Dołączył: 4.07.2014

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


Jasne że można w taki sposób:

  1. foreach( $data2 as $k => $v )
  2. {
  3. if ( !$data2[$k] ) $data[$k] = NULL;
  4. }


A co do tablicy to powinno się odwoływać w sposób $data2['klucz'] bo jeżeli nie użyjesz apostrofów to PHP szuka stałej o takiej nazwie, jeżeli nie znajdzie to nada jej wartość taką jak jest jej nazwa, ale wywali ostrzeżenie i nie jest to dobra praktyka.
Go to the top of the page
+Quote Post
pela222
post
Post #3





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

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


Hej,

dzięki za szybką pomoc. Jak napisałem jestem mega przedszkolakiem i nawet prosta pętla jest wyzwaniem.
Niemniej jednak coś tu chyba nie tak jest:

Jeżeli dobrze czytam to co mi podałeś to w przypadku braku zmiennej nadana jest jej wartość null.

U mnie
  1. var_dump ($data2['hosp2']);

zwraca
string(1) "0"

i dlatego to nie działa. Bo zmienna jest ale ma wartość "0"

probowałem coś takiego:

  1. foreach( $data2 as $k => $v )
  2. {
  3. if ( $data2[$k] = 0 ) $data[$k] = NULL;
  4. }


i dostaje "int(0)" i wszystkie zmienne tablicowe są puste / zero.

Probowałem też:

  1. foreach( $data2 as $k => $v )
  2. {
  3. if ( empty($data2[$k]) ) $data[$k] = NULL;
  4. }


Ale cały czas mam dla var_dump ($data2['hosp2']); zwraca string(1) "0"

Ten post edytował pela222 31.08.2014, 11:54:51
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


$data2[$k] = 0
a
$data2[$k] == 0
Go to the top of the page
+Quote Post
pela222
post
Post #5





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

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


dla $data2[k] == 0 mam string(1) "0"

  1. foreach( $data2 as $k => $v )
  2. {
  3. if ( $data2[$k] == 0 ) $data[$k] = null;
  4. }
  5. var_dump ($data2['hosp2']);


dla jasności to zadowoli mnie albo
string(0) "" albo
NULL

Ten post edytował pela222 31.08.2014, 12:07:42
Go to the top of the page
+Quote Post
Pyton_000
post
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Zara zara...
Sprawdź to

  1. foreach( $data2 as &$v )
  2. {
  3. if ( empty($v['hosp2'] ))
  4. $v['hosp2'] = null;
  5. }
  6. unset($v);
Go to the top of the page
+Quote Post
pela222
post
Post #7





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

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


Teraz dla
  1. var_dump ($data2['hosp2']); echo '</br>';
  2.  
  3. foreach( $data2 as &$v )
  4. {
  5. if ( empty($v['hosp2'] ))
  6. $v['hosp2'] = null;
  7. }
  8. unset($v);
  9. var_dump ($data2['hosp2']); echo '</br>';
  10. echo 'Zmienna hosp2: ' .$data2['hosp2']. '</br>';
  11. echo 'Zmienna spousename: ' .$data2['spousename']. '</br>';
  12. var_dump ($data2['spousename']); echo '</br>';

dostaje:
string(1) "0"
string(1) ""
Zmienna hosp2:
Zmienna spousename: Array
array(1) { ["hosp2"]=> NULL }

ale:
1) inne zmienne tablicowe które miały wartośc null otrzymały wartość array

Podejrzewam że konstruujac taka pętle jak teraz sie tego spodziewałeś ale piszę dla jasności.

Ten post edytował pela222 31.08.2014, 13:11:30
Go to the top of the page
+Quote Post
Pyton_000
post
Post #8





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Pokaż var_dump($data2);
Go to the top of the page
+Quote Post
pela222
post
Post #9





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

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


wynik dla
  1. var_dump($data2);

array(94) { [0]=> string(18) "624745000000795035" ["id"]=> string(18) "624745000000795037" [1]=> string(18) "624745000000053003" ["ownerid"]=> string(18) "624745000000053003" [2]=> string(6) "Adrian" ["firstname"]=> string(6) "Adrian" [3]=> string(9) "Kowal" ["lastname"]=> string(9) "Kowal" [4]=> string(10) "0000-00-00" ["dob"]=> string(10) "0000-00-00" [5]=> string(14) "Firma" ["company"]=> string(14) "Firma" [6]=> string(12) "Worker" ["occupation"]=> string(12) "Worker" [7]=> string(5) "24000" ["income"]=> string(5) "24000" [8]=> array(1) { [""]=> NULL } ["spousename"]=> array(1) { [""]=> NULL } [9]=> array(1) { [""]=> NULL } ["spouselastname"]=> array(1) { [""]=> NULL } [10]=> string(10) "000-00-00" ["spousedob"]=> string(10) "000-00-00" [11]=> array(1) { [""]=> NULL } ["spousecompany"]=> array(1) { [""]=> NULL } [12]=> array(1) { [""]=> NULL } ["spouseoccupation"]=> array(1) { [""]=> NULL } [13]=> array(1) { [""]=> NULL } ["spouseincome"]=> array(1) { [""]=> NULL } [14]=> string(19) "Bheithe" ["street"]=> string(19) "Bheithe" [15]=> array(1) { [""]=> NULL } ["area"]=> array(1) { [""]=> NULL } [16]=> string(6) "Dub" ["city"]=> string(6) "Dub" [17]=> string(13) "Co. Dub" ["state"]=> string(13) "Co. Dub" [18]=> array(1) { [""]=> NULL } ["child1name"]=> array(1) { [""]=> NULL } [19]=> string(10) "000-00-00" ["child1dob"]=> string(10) "000-00-00" [20]=> array(1) { [""]=> NULL } ["child2name"]=> array(1) { [""]=> NULL } [21]=> string(10) "000-00-00" ["child2dob"]=> string(10) "000-00-00" [22]=> array(1) { [""]=> NULL } ["child3name"]=> array(1) { [""]=> NULL } [23]=> string(10) "000-00-00" ["child3dob"]=> string(10) "000-00-00" [24]=> array(1) { [""]=> NULL } ["child4name"]=> array(1) { [""]=> NULL } [25]=> string(10) "000-00-00" ["child4dob"]=> string(10) "000-00-00" [26]=> string(18) "624745000000795037" [27]=> string(18) "624745000000053003" [28]=> string(5) "36.44" ["premium"]=> string(5) "36.44" [29]=> string(2) "20" ["term"]=> string(2) "20" [30]=> string(11) "Accelerated" ["sictype"]=> string(11) "Accelerated" [31]=> string(10) "2014-08-15" ["closingdate"]=> string(10) "2014-08-15" [32]=> string(18) "624745000000795035" ["contactid"]=> string(18) "624745000000795035" [33]=> string(19) "Adrian IL" ["name"]=> string(19) "Adrian IL" [34]=> string(10) "Irish Life" ["provider"]=> string(10) "Irish Life" [35]=> string(8) "11785877" ["policyno"]=> string(8) "11785877" [36]=> string(5) "60000" ["life1"]=> string(5) "60000" [37]=> string(5) "30000" ["sic1"]=> string(5) "30000" [38]=> string(3) "100" ["hosp1"]=> string(3) "100" [39]=> string(3) "170" ["acc1"]=> string(3) "170" [40]=> string(4) "None" ["surg1"]=> string(4) "None" [41]=> string(4) "None" ["frac1"]=> string(4) "None" [42]=> string(1) "" ["life2"]=> string(1) "" [43]=> string(1) "" ["sic2"]=> string(1) "" [44]=> string(1) "" ["hosp2"]=> string(1) "" [45]=> string(1) "" ["acc2"]=> string(1) "" [46]=> string(4) "None" ["surg2"]=> string(4) "None" [47]=> string(4) "None" ["frac2"]=> string(4) "None" }

Ten post edytował pela222 31.08.2014, 16:48:21
Go to the top of the page
+Quote Post
Pyton_000
post
Post #10





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


zmień mysql_fetch_array na mysql_fetch_assoc

i zamiast pętli

if(empty($data2['hosp2'])) $data2['hosp2'] = null;
Go to the top of the page
+Quote Post
pela222
post
Post #11





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

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


  1. $query = mysql_query($data) or die("Couldn't execute query. ". mysql_error());
  2. $data2 = mysql_fetch_assoc($query);
  3. //pętla zastępująca 0 przez null
  4.  
  5. var_dump ($data2['hosp2']); echo '</br>';
  6.  
  7. if(empty($data2['hosp2'])) $data2['hosp2'] = null;
  8. var_dump ($data2['hosp2']); echo '</br>';
  9. echo 'Zmienna hosp2: ' .$data2['hosp2']. '</br>';
  10. echo 'Zmienna spousename: ' .$data2['spousename']. '</br>';
  11. var_dump ($data2['spousename']); echo '</br>';


dostaje:
string(1) "0"
NULL
Zmienna hosp2:
Zmienna spousename:
string(0) ""
Go to the top of the page
+Quote Post
Pyton_000
post
Post #12





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


czyli jest ok
Go to the top of the page
+Quote Post
pela222
post
Post #13





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

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


czyli jest ok dla jednej zmiennej hosp2 ale gdzie ta pętla?

dodam że tak samo jest dobrze dla
  1. $data2 = mysql_fetch_array($query);


PS.
@Pyton Dasz rade coś jeszcze podpowiedzieć co do tej pętli? Thx.

PS2...
jak kolega Pyton albo kroś inny ma czas na wrzucenie propozycji na pętlę to będę bardzo wdzięczny. :-)

Ten post edytował pela222 1.09.2014, 15:48:25
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Poprostu zajrzyj do manuala....
http://pl1.php.net/mysql_fetch_array
Masz tam napisane jak przy pomocy petli WHILE pobrac wszystkie dane z zapytania. Ty teraz pobierasz tylko jeden rekord, a chcesz pobrac wszystkie, wiec mysql_fetch_array masz dac w petli...
Go to the top of the page
+Quote Post
pela222
post
Post #15





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

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


Jak na razie po 1,5 godziny czytania i szperania mam niedziałąjące coś:

  1. while ($data2 = mysql_fetch_array($query)) {
  2. if(empty($data2[])) {
  3. $data2[] = null;
  4. }
  5. }


ten manual mówi mi tyle co nic...niestety. Jutro na świeżo zobacze czy coś kumam.
Dzięki mimo wszystko za podpowiedz co do użycie while...
Ps. podejżewam że jedyne co tu jest dobrze to while ($data2 = mysql_fetch_array($query)) hehe
Go to the top of the page
+Quote Post
Turson
post
Post #16





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


W tej chwili zamieniasz całą tablicę, a nie konkretną kolumnę

  1. while ($data2 = mysql_fetch_array($query)){
  2. if($data2['jakas_kolumna'] == 0)
  3. $data2['jakas_kolumna'] = null;
  4. }
Go to the top of the page
+Quote Post
pela222
post
Post #17





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

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


Ok dzieki za pomoc. Z racji że jest to dział przedszkole to opisze jeszcze raz bo wydaje mi się że twoja odpowiedz nie dokońca jest na mój problem:

Więc od początku:
Za pomocą zapytania do mysql:
  1. $data = 'SELECT *
  2. FROM contacts T1
  3. INNER JOIN potentials T2
  4. ON T1.id = T2.contactid
  5. WHERE T2.id="'.$_GET['saleid'].'"
  6. ';

otrzymuje zmienną $data, którą to następnie za pomocą polecenia:

  1. $data2 = mysql_fetch_array($query);

umieszczam w tablicy aby móc się w formularzu odwoływać do zmiennych i umieścić je w formularzu za pomocą
  1. $data2['nazwa_kolumny']

Moja tabla ma w tej chwili 48 kolumn (48 zmiennych) co widzę po wywołaniu
  1. var_dump ($data2);

wynik pokazany dwa posty wyżej

-----Moj problem / pytanie -------------

Ponieważ część zmiennych ma wartość równą "0" chcę, aby została wartość 0 zamieniona dla wszystkich zmiennych na null. Powinienem użyć zatem pętli która wykona:
"spawdz pokolei wszystkie kolumny i jeżeli wartość danej zmiennej jest równa 0 to zamień tą zmienną na null"
co przy zapisie dla pojedynczego rekordu sprowadza się do:
  1. if(empty($data2['nazwa_kolumny'])) {
  2. $data2['nazwa_kolumny'] = null;}


Ps Dodam że (przynajmniej na razie) zapytanie do dazy danych ma zrobione tak że otrzymuję zawsze jeden wiersz z 48 kolumnami (48 zmiennymi).

@Turson
  1. while ($data2 = mysql_fetch_array($query)){
  2. if($data2['jakas_kolumna'] == 0)
  3. $data2['jakas_kolumna'] = null;
  4. }

nie rozumiem dlaczego w pętli podajesz $data2['jakas_kolumna'] skoro mi chodzi oto żeby ta pętla wykonała się dla wszystkich kolum i sprawdzila która jest równa 0?

Ten post edytował pela222 3.09.2014, 10:53:15
Go to the top of the page
+Quote Post
Turson
post
Post #18





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Dlaczego po prostu nie zaktualizujesz tabeli i ustawisz 0 dla kolumn gdzie jest null?
Cytat
nie rozumiem dlaczego w pętli podajesz $data2['jakas_kolumna'] skoro mi chodzi oto żeby ta pela wykonała się dla wszystkich kolum i sprawdzila która jest równa 0?

więc musi być kolejny foreach

  1. $new = array();
  2. $i= 0;
  3. while ($data2 = mysql_fetch_array($query)){
  4. $new[$i] = $data2;
  5. foreach($new[$i] as $kolumna=>$wartosc){
  6. if($wartosc ==0)
  7. $new[$i][$kolumna] = NULL;
  8. }
  9. $i++;
  10. }

sprawdz $new

Ten post edytował Turson 3.09.2014, 10:28:09
Go to the top of the page
+Quote Post
pela222
post
Post #19





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

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


  1. var_dump ($new);
zwraca: array(0) { }
  1. var_dump ($data2);
zwraca:bool(false)
Co do twojego pytania:
"Dlaczego po prostu nie zaktualizujesz tabeli i ustawisz 0 dla kolumn gdzie jest null?"

jest bardzo zasadne pytanie, ale tego także nie potrafiłem zrobić :-) Przy czym ja chce aby wartość 0 została zastąpiona null a nie odwrotnie.

Myślałem że w php mogę prostą pętlą to zrobic a tu już 19 post i wciąż brak rezultatów :-)

Ten post edytował pela222 3.09.2014, 10:42:19
Go to the top of the page
+Quote Post
Turson
post
Post #20





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


UPDATE tabela SET nazwa_kolumny = null WHERE nazwa_kolumny = 0
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 14.09.2025 - 21:43