Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Co robię źle z zapisem do bazy - Serializer, Array
designez
post 18.12.2018, 16:50:01
Post #1





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

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


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


Ten post edytował designez 18.12.2018, 16:56:35
Go to the top of the page
+Quote Post
nospor
post 18.12.2018, 17:25:16
Post #2





Grupa: Moderatorzy
Postów: 36 442
Pomógł: 6290
Dołączył: 27.12.2004




Pokaz caly kod jak wladasz do bazy. To raz.
A dwa po grzyba tam jest typ BLOB?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
designez
post 18.12.2018, 17:44:02
Post #3





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

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


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ą

Ten post edytował designez 18.12.2018, 17:41:31
Go to the top of the page
+Quote Post
nospor
post 18.12.2018, 17:50:17
Post #4





Grupa: Moderatorzy
Postów: 36 442
Pomógł: 6290
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
designez
post 19.12.2018, 12:16:34
Post #5





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

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


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.

Ten post edytował designez 19.12.2018, 12:23:45
Go to the top of the page
+Quote Post
nospor
post 19.12.2018, 12:22:43
Post #6





Grupa: Moderatorzy
Postów: 36 442
Pomógł: 6290
Dołączył: 27.12.2004




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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
designez
post 19.12.2018, 12:30:04
Post #7





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

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


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.
Go to the top of the page
+Quote Post
nospor
post 19.12.2018, 12:37:17
Post #8





Grupa: Moderatorzy
Postów: 36 442
Pomógł: 6290
Dołączył: 27.12.2004




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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
designez
post 19.12.2018, 12:59:14
Post #9





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

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


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?
Go to the top of the page
+Quote Post
nospor
post 19.12.2018, 13:02:16
Post #10





Grupa: Moderatorzy
Postów: 36 442
Pomógł: 6290
Dołączył: 27.12.2004




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);


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
designez
post 19.12.2018, 13:06:03
Post #11





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

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


bool(true)
Go to the top of the page
+Quote Post
nospor
post 19.12.2018, 13:10:54
Post #12





Grupa: Moderatorzy
Postów: 36 442
Pomógł: 6290
Dołączył: 27.12.2004




No to niemozliwe. tam musi byc cos jeszcze, czego nie widac w tym co pokazujesz


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
designez
post 19.12.2018, 19:00:55
Post #13





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

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


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]
Go to the top of the page
+Quote Post
nospor
post 19.12.2018, 20:18:13
Post #14





Grupa: Moderatorzy
Postów: 36 442
Pomógł: 6290
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 18.04.2024 - 06:09