Dziwne, nie mogę przekonwertować stringa na INT

0

Witam, nie wiem czy mój post nie powinien być w dziale dla początkujących ale natknąłem się na dziwny problem. Mianowicie mam plik TXT no w sumie to jest xml, za pomocą funckji strpos i substr wycinam interesujace mnie częscie i wrzucam do tablicy. Wszystko jest ok i tablica po wylistowaniu wygląda tak:
tab[0]['cena'] => 2500
tab[0]['id'] => 20
tab[1]['cena'] => 1800
tab[1]['id'] => 12

Po wyświetleniu tablicy poprzez var_dump wszystkie wartości są typu string.

I wszystko pieknie ladnie teraz w petli foreach wrzucilem zapytanie ktore odczytuje aktualna cenę w bazie i ta która wyciagnąłem z xmla i tutaj zonk, cena z bazy zawsze jest pusta pomimo ze zapytanie po wyswietleniu i wrzuceniu w sqla wskazuje poprawną wartosc, tak samo jak na sztywno w zapytanie wpisze konkretne ID tez jest ok.
Spróbowałem może przekonwertować otrzymną wartość na int : intval($tab[$i]['id']) i tutaj kolejny zonk, wynik zawsze zero. Wyrzuciłem sobie juz wartości z tabeli po czym wyrzuciłem wartości po konwersji intval i wygląda to tak:
23 => (po intval) 0
26 => (po intval) 0

Pewnie tu jest problem ze zapytanie nie zwraca poprawnej wartości, tylko nie wiem czemu tak sie dzieje, bo przeciez wartosci wycinane z pliku sa tekstowe i sa poprawne, bez zadnych spacji , znakow konca linii itd...

Pierwszy raz stanałem na czymś takim, ktoś wie w czym może być problem albo jakaś podpowiedź gdzie szukać ?

0

Wklej trochę kodu, pewnie jest tam mały błąd, który ciężko zauważyć ;)

0
$xmlStr = file_get_contents($xmlUrl);

$znacznik=1;
$i=1;
$start=microtime(true);
while($znacznik!=false){

$poczatek_id = strpos($xmlStr,'<id>',$znacznik);
$koniec_id = strpos($xmlStr,'</id>',$znacznik);
if($poczatek_id && $koniec_id)
$wynik[$i]['id'] = substr($xmlStr,$poczatek_id,$koniec_id-$poczatek_id);	
	
	
$poczatek_price = strpos($xmlStr,'<price>',$znacznik);
$koniec_price = strpos($xmlStr,'</price>',$znacznik);
if($poczatek_price && $koniec_price)
$wynik[$i]['cena1'] = trim(substr($xmlStr,$poczatek_price,$koniec_price-$poczatek_price));
if($koniec_price)
		$znacznik = $koniec_price+6;
else 
		$znacznik = $koniec_price;
$i++;
if($i==1000)
		break;
}
$stop = microtime(true);

echo round($stop-$start,5);  

$j=1;
	foreach($wynik as $key=>$val){

	$wyk1 = mysql_query("select cena from moja_tabela where  id_produktu_dostawcy='".$val['id']."'");

	$wiersz1 = mysql_fetch_array($wyk1);


	echo $j.'.  id: '.$val['id'].' -> cena: '.$val['cena1'].' => stara cena: '.$wiersz1['cena'].'<br>';
$j++;
}

Z tego co zauważyłem zapytanie zawsze przyjmuje where id_produktu_dostawcy='0' tylko czemu ?

Tutaj listing: http://glina.h2.pl/portal/xml.php po lewej stronie wartości id z tablicy a po prawej wynik z zapytania co widać powyżej w kodzie.
Co wartości $val['id'] już próbowałem trim($val['id']) , intval(trim($val['id'])) ale zawsze zwraca zero.

Po wszelkich próbach można stwierdzić że wartość pobrana przez substr , pomimo że var_dump pokazuje wartość string nie można jej przekonwertować na INT pomimo ze są to poprawne wartości liczbowe, tak samo gdy wywołujemy zapytanie z tymi wartościami wchodzą one do zapytania jako 0 - nie rozumiem co tu jest grane.

0

Sprawdziłem cały kod i jedyne miejsce gdzie dorzucamy coś do tablicy $wynik jest tu:

if($poczatek_id && $koniec_id)
   $wynik[$i]['id'] = substr($xmlStr,$poczatek_id,$koniec_id-$poczatek_id);        

Tak więc sprawdź czy w $wynik[$i]['id'] przechowywane są odpowiednie dane. Innego pomysłu tymczasowo nie mam.

0
bieniomajster napisał(a)

Sprawdziłem cały kod i jedyne miejsce gdzie dorzucamy coś do tablicy $wynik jest tu:

if($poczatek_id && $koniec_id)
   $wynik[$i]['id'] = substr($xmlStr,$poczatek_id,$koniec_id-$poczatek_id);        

Tak więc sprawdź czy w $wynik[$i]['id'] przechowywane są odpowiednie dane. Innego pomysłu tymczasowo nie mam.

Są prawidłowe dane właśnie, nawet listowałem je przez var_dump i jest info ze dane są typu string.
Poza tym zamiast zapisywać dane do tablicy w tym miejscu co podałeś wstawiłem zapytanie i jest to samo.
Zrobiłem też echo-wanie parametru w mysql_query, czyli wyrzucam treść zapytanie i to jest najdziwniejsze że zapytanie są dobre czyli id-ki się przenoszą , nawet jak zwyczajnie kopiuje wrzucam do phpmyadmina to zapytanie wię wykonuje. Nie mam pojęcia co jest grane, czemu wartość pobierana metodą substr typu string nie da się przekonwertować na int bo zwraca 0 ? Hmmm dziwna sprawa, zazwyczaj w takich sytuacjach jest banalny błąd którego sami nie zauważamy ale tutaj no patrze na to 2 godziny i nie wiem co jest grane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1