Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL]Zapytanie nie działa
Forum PHP.pl > Forum > Przedszkole
kujol
Witam, przy próbie dodania rekordu do tabeli mysql wypełnia wszystkie pola zerem.

  1. mysql_query("INSERT INTO `kursy_walut`(`id`, `euro_kupno`, `euro_sprzedarz`, `usd_kupno`, `usd_sprzedarz`, `chf_kupno`, `chf_sprzedarz`, `gbp_kupno`, `gbp_sprzedarz`)
  2. VALUES ('', '".zamien($euroKupno[0])."', '".zamien($euroSprzdarz[0])."', '".zamien($usdKupno[0])."', '".zamien($usdSprzdarz[0])."', '".zamien($chfKupno[0])."', '".zamien($chfSprzdarz[0])."', '".zamien($gbpKupno[0])."', '".zamien($gbpSprzdarz[0])."')");


Gdy zrobię tak:

  1. mysql_query("INSERT INTO `kursy_walut`(`id`, `euro_kupno`, `euro_sprzedarz`, `usd_kupno`, `usd_sprzedarz`, `chf_kupno`, `chf_sprzedarz`, `gbp_kupno`, `gbp_sprzedarz`)
  2. VALUES ('', '".zamien('3,7362')."', '".zamien('3,7362')."', '".zamien('3,7362')."', '".zamien('3,7362')."', '".zamien('3,7362')."', '".zamien('3,7362')."', '".zamien('3,7362')."', '".zamien('3,7362')."')");


To już działa normalnie, wszystkie tablice zwracają prawidłowe wyniki. Jak temu zaradzić?
YourFrog
Jeżeli możesz to pokaż ciało funkcji zamien. Po za tym ja biedny całe życie w php myślałem żel liczby z przecinkami pisze się za pomocą kropki ;o
nospor
Tyle postow i jeszcz z czyms takim leciec.....

Skoro zwraca ci zero, znaczy ze tutaj:
$euroSprzdarz[0]
sa zle dane.
Sprawdz
kujol
Dane są dobre, echo pokazuje np. 5,0535 (z przecinkiem), a funkcja zamien() zamienia ten przecinek na kropkę
  1. echo $chfKupno[0] //5,0535
  2.  
  3. echo zamien($chfKupno[0]) //5.0535
nospor
pewnie są jakies spacje w tej liczbie.
sprawdz przy pomocy var_dump() a bedziesz wiedzial dokladnie.
markuz
Może:
  1. mysql_query("INSERT INTO ... VALUES ('', ".(float)zamien($chfKupno[0])." , ... )");
kujol
Spacji nie ma, var_dump zwraca:

string(45) "4.1810"
Pole w bazie jest na float. Markuz niestety nadal to nie pomaga.
Dodam, że ta tablica jest z preg_match()
nospor
facepalmxd.gif
Masz wyraznie napisane ze masz 45 znakow a widac tylko 4.1810. uwasz ze to jest 45 znakow?? Reszta jest niewidoczna. Uzyj trim()
kujol
Dodaję ten trim() i nic nie usuwa.

  1. var_dump(zamien($euroKupno[0])); //string(45) "4.1810"
  2. $tek = trim(zamien($euroKupno[0]));
  3. var_dump($tek); //string(45) "4.1810"
markuz
  1. var_dump((float)trim(zamien($euroKupno[0])));

A teraz co zwróci?
ghost1511
TRIM po stronie bazy danych w zapytaniu SQL.
kujol
Cytat(markuz @ 21.03.2014, 14:57:39 ) *
  1. var_dump((float)trim(zamien($euroKupno[0])));

A teraz co zwróci?


  1. var_dump(zamien($euroKupno[0])); //string(45) "4.1810"
  2. $tek = (float)trim(zamien($euroKupno[0]));
  3. var_dump($tek); float(0)


W zapytaniu sql nic to nie zmienia.
nospor
To jakies dziwne masz te biales znaki....

to w funkcji zamien() dopisz kod, ktory zamieniasz wszystko co nie jest cyfrą i przecinkiem na "nic" smile.gif
kujol
Coś takiego?

  1. function zamien($kurs){
  2. $kurs = str_replace(',', '.', $kurs);
  3. $kurs = str_replace(' ', '', $kurs);
  4. $kurs = trim($kurs);
  5. return $kurs;
  6. }
nospor
Nie, wyraznie napisalem "wszystko co nie jest...."
Musisz uzyc preg_replace
markuz
Pewnie pobierasz kursy z innej strony - zrób jeszcze raz var_dump() i wejdź w źródło strony i dopiero wtedy skopiuj zawartość zmiennej - wtedy zobaczysz jakie znaki są niechciane i być może znajdziesz prosty sposób na rozwiązanie tego problemu smile.gif
nospor
Hehe, pewnie jest tam   wink.gif

Ale wowczas w var_dump bylaby widoczna duuuuuza przerwa, a nie jest.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.