Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Co robię źle z zapisem do bazy - Serializer, Array
Forum PHP.pl > Forum > PHP
designez
Witam, pewnie jakaś pierdoła ale do diabła nie mogę zapisać danych do bazy. Wysyłam formularzem wiele danych a poniższy foreach wyłapuje wartości checked (jest tego masa więc chcę wyłapać zaznaczone.
Chcę dodać do jednej kolumny w bazie same id postaci 1,2,3,4,5 itd a drugie jako serializer '1'=>'Piwnica', '2'=>'Podwórko' itd.

  1. foreach($_POST as $key => $value) {
  2. if(preg_match('@^home-@', $key)) {
  3.  
  4.  
  5. $books[$value];
  6. $tab[$_idk] = $value;
  7. $tabwithid[$value] = GetName($value);
  8. $_liczby .= $value.',';
  9. $_idk++;
  10.  
  11. }
  12. }
  13.  
  14. $serialized_data = serialize($tabwithid); // niby serializer ok ale nie dodaje się do bazy
  15. $serialized_data1 = serialize($tab); // niby serializer ok ale nie dodaje się do bazy

Zmienna $liczby zawiera dokładnie '841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,' nie mogę oddać tego bezpośrednio do bazy ze zmiennej '$_liczby'. Kiedy tworzę inną zmienną z tą samą zawartością to dodaj się do bazy..

Tak wygląda tabwithid
  1. array(15) { [841]=> string(6) "Balkon" [842]=> string(9) "Antresola" [843]=> string(17) "Oddzielna Kuchnia" [844]=> string(6) "Garaż" [845]=> string(5) "Taras" [846]=> string(5) "Winda" [847]=> string(7) "Piwnica" [848]=> string(6) "Strych" [849]=> string(8) "Ogródek" [850]=> string(18) "Miejsce Parkingowe" [851]=> string(5) "Alarm" [852]=> string(8) "Internet" [853]=> string(10) "Umeblowane" [854]=> string(32) "Przyjazne dla niepełnosprawnych" [855]=> string(10) "Gaz ziemny" }

serialized
  1. a:15:{i:841;s:6:"Balkon";i:842;s:9:"Antresola";i:843;s:17:"Oddzielna Kuchnia";i:844;s:6:"Garaż";i:845;s:5:"Taras";i:846;s:5:"Winda";i:847;s:7:"Piwnica";i:848;s:6:"Strych";i:849;s:8:"Ogródek";i:850;s:18:"Miejsce Parkingowe";i:851;s:5:"Alarm";i:852;s:8:"Internet";i:853;s:10:"Umeblowane";i:854;s:32:"Przyjazne dla niepełnosprawnych";i:855;s:10:"Gaz ziemny";}

I do bazy się nie zapisuje mimo że jest BLOB i wszystko działa bo sprawdzałęm inną funkcją więc dodają się prawidłowe serializery
nospor
Pokaz caly kod jak wladasz do bazy. To raz.
A dwa po grzyba tam jest typ BLOB?
designez
Korzystam z klasy Wrap PDO mniej kodu itd. Testowałem te same zapytania na normalnych zapytaniach PDO i też nie działa więc to nie jest po stronie zapytań.
Dla porównania mam starą funkcję SerializeInfo () i te wartości dodają się prawidłowo również do pół gdzie nie mogę wbić wartości jakie chcę.

  1. function GetTag($_id) {
  2.  
  3. $db = new Wrap_db();
  4. $rows = $db->select('id','nazwa')
  5. ->from('kategorie')
  6. ->where(['id','=',$_id])
  7. ->result();
  8. $row = $rows->fetch(PDO::FETCH_ASSOC);
  9. //var_dump($user);
  10.  
  11.  
  12. return $row['nazwa'];
  13.  
  14. }
  15.  

  1. function SerializeInfo ()
  2. {
  3.  
  4. $tab[0] = date("Y-m-d"); //data pełny rok
  5. $tab[1] = 9; //uytkownik dodał
  6. $tab[2] = date("Y-m-d H:i:s"); //data dodania
  7. $tab[3] = date("Y-m-d H:i:s"); //data modyfikacji
  8. $tab[4] = time();
  9. $tab[5] = 'Jakas wartosc';
  10. $serialize = serialize($tab);
  11.  
  12. return $serialize;
  13.  
  14. }



  1. $db = new Wrap_db();
  2. $values = ['dodatkowe_cechy' => $_liczby,'cechy_serialized'=>$serialized_data,'info'=>$seriaized2];
  3.  
  4. $db->update('o_nieruchomosci')
  5. ->set($values)
  6. ->where(['id','=',304])
  7. ->result('update');
  8.  


Zgłupiałem bo zmienna $liczby zawiera string '841,842,843,844,845,846,847,848,849,850,851,852,853,854,855' i nie mogę tego dodać do bazy. Natomiast tworząc zmienną o tej samej zawartości mogę ją dodać. Serializera mogę sobie odpuścić ale nie mogę oddać po prostu '841,842,843,844,845,846,847,848,849,850,851,852,853,854,855' ze zmiennej $_liczby zaraz za pętlą
nospor
Strasznie chaotycznie to wszystko opowiadasz

Pokaz dokladnie co zwraca var_dump za ta linijka

$values = ['dodatkowe_cechy' => $_liczby,'cechy_serialized'=>$serialized_data,'info'=>$seriaized2];
var_dump($values);

tuz przed dodaniem do bazy
designez
Tak wiem żona też mi marudzi że tłumaczę chaotycznie smile.gif

<!--Geshi:488749:php--><pre class="php-brief" style="font-family:monospace;"><div class="head">
  1. [topic=0]est= '841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,';
  2. dodaje się a poniżej przykład var_dump-a
  3.  
  4. [php]
  5. array(2) { ["dodatkowe_cechy"]=> string(60) "841,842,843,844,845,846,847,848,849,850,851,852,853,854,855," ["info"]=> string(155) "a:6:{i:0;s:10:"2018-12-19";i:1;i:9;i:2;s:19:"2018-12-19 12:09:07";i:3;s:19:"2018-12-19 12:09:07";i:4;i:1545217747;i:5;s:28:"Lukasz";}" }


Powyższe działa ale taki kod już nie

  1. $_idk=0;
  2. $_liczby='';
  3. $books[] = array();
  4. foreach($_POST as $key => $value) {
  5. if(preg_match('@^home-@', $key)) {
  6.  
  7. $books[$value];
  8.  
  9. $tabs[$value] = GetTag($value);
  10. $tabwithid[$_idk] = $value;
  11.  
  12. $_liczby .= $value.',';
  13.  
  14.  
  15. $_idk++;
  16.  
  17. }
  18. }
  19.  
  20. $values = ['dodatkowe_cechy' => $_liczby,'info'=>SerializeInfo()];
  21. echo '<br>/-/-/-/-/-/-/-/-/-/-/-/-/-/<br>';
  22. var_dump($values);
  23. echo '<br>/-/-/-/-/-/-/-/-/-/-/-/-/-/<br>';
  24. $db->update('o_nieruchomosci')
  25. ->set($values)
  26. ->where(['id','=',304])
  27. ->result('update');
  28.  


Daje takiego var_dump-a
  1. array(2) { ["dodatkowe_cechy"]=> string(60) "841,842,843,844,845,846,847,848,849,850,851,852,853,854,855," ["info"]=> string(155) "a:6:{i:0;s:10:"2018-12-19";i:1;i:9;i:2;s:19:"2018-12-19 12:14:10";i:3;s:19:"2018-12-19 12:14:10";i:4;i:1545218050;i:5;s:28:"Lukasz";}" }

Wartość 'dodatkowe_cechy' bazy jest pusta po takim update info się zmienia
Mam ustawioną wersję PHP 7.0.33 może tutaj coś się zmieniło w tablicach. Zmienię na 5.6 zobaczę jaka jest różnica.
nospor
czyli to
$values = ['dodatkowe_cechy' => $_liczby,'info'=>SerializeInfo()];
nie dziala

ale juz to:
$values = ['dodatkowe_cechy' => '841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,','info'=>SerializeInfo()];
dziala?
designez
Cytat(nospor @ 19.12.2018, 12:22:43 ) *
czyli to
$values = ['dodatkowe_cechy' => $_liczby,'info'=>SerializeInfo()];
nie dziala

ale juz to:
$values = ['dodatkowe_cechy' => '841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,','info'=>SerializeInfo()];
dziala?


1 przykład nie działa.
2 działa
poniższe też działają
  1. $_test= '841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,';
  2. $values = ['dodatkowe_cechy' => $_test,'info'=>SerializeInfo()];
  3. $values = ['dodatkowe_cechy' => SerializeInfo(),'info'=>SerializeInfo()];


Nie działa to dziadostwo

  1. foreach($_POST as $key => $value) {
  2. echo 23232323;
  3. if(preg_match('@^home-@', $key)) {
  4.  
  5. $books[$values];
  6.  
  7. $tabs[$value] = GetTag($value);
  8. $tabwithid[$_idk] = $value;
  9.  
  10. $_liczby .= $value.',';
  11.  
  12.  
  13. echo $_idk++;
  14.  
  15. }
  16. }
  17. $values = ['dodatkowe_cechy' => $_liczby,'info'=>SerializeInfo()];
  18. czy nawet
  19. $serialized = serialize($tabs);
  20. $values = ['dodatkowe_cechy' => $serialized ,'info'=>SerializeInfo()];


Mimo że var_dump daje identyczny wynik nie mogę dodać nic co pochodzi z foreach do bazy mimo że echo czy var_dump zaraz za zapytaniem i za pętlą wygląda dobrze.
nospor
Wybacz za glupie pytania ktore bede ci zaraz zadawal ale no cos musi byc na rzeczy, a wiec:

jak wkladasz dane recxznie, np
$_test= '841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,';

to mimo wszystko foreach na liczby nadal sie wykonuje czy wowwczas juz go wylaczasz?
designez
Nie nie wyłączam to dopiero testuję taką funkcjonalność. Nie wyłączałem ponieważ zaraz za pętlą zmienna $_liczby ma taką samą wartość co $_test. Z tym że test się dodaje a _liczby nie. Może jest jakaś prostsza metoda na wyłapanie z tablicy post po prefiksie? i przypisanie do zmiennej?
nospor
Kurcze, nie wazne czy robisz to trudniej czy prosciej skoro wynik jest taki jaki ma byc - w tym akurat przypadku rzecz jasna.

Jeszcze pokaz wynik:

$por = $_liczby === '841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,';
var_dump($por);
designez
bool(true)
nospor
No to niemozliwe. tam musi byc cos jeszcze, czego nie widac w tym co pokazujesz
designez
Wieczorkiem wrzucę cały kod jak to wygląda. Też jestem zaskoczony działaniem tego

Chyba wiem jaka jest przyczyna. Ten test robiłem w pliku index.phtml korzystałem z klasy widoku nospor'a i tutaj nie wiem dlaczego po wysłaniu formularza plik index.phtml wykonuje się 4 razy. Jak mogę zweryfikować co odpowiada za nadmierne przekierowania. Nie korzystam z żadnych headerów a mimo to strona po wysłaniu formularza uruchamia się 4 razy. Nic nie zmieniałem w tej klasie.

htaccess
  1. RewriteEngine On
  2. RewriteCond %{HTTP_HOST} !^www\.
  3. RewriteRule ^(.*)$ <a href="https://www.%{HTTP_HOST}/$1" target="_blank">https://www.%{HTTP_HOST}/$1</a> [R=301,L]
  4. RewriteCond %{HTTPS} off
  5. RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  6. RewriteCond %{REQUEST_FILENAME} !-f
  7. RewriteCond %{REQUEST_FILENAME} !-d
  8. RewriteRule (.*) index.php/$1 [L]
nospor
Mozesz miec dolaczone jakies css/jss lub chociazby avatar i gdy tych plikow nie ma, to leci na index. Latwo to sprawdzic czy jest wolanie o jakis zasob ktory nie istnieje w konsoli przegladarki.

Zas twoj skrypt powinien byz zabezpieczony i odpalac powinien swoja tresc tylko gdy form czy cos tam jest wyslane. Bo z opisu wynika ze odpala sie za kazdym razem pomimo ze nie powinien
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.