Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Błąd w trakcie zapisywania
Forum PHP.pl > Forum > Przedszkole
pawel06281990
Witam,

dostaje taki błąd
Incorrect integer value: '' for column `grobnet_01`.`wyszukiwarka_posts`.`post_comments`
chodź w bazie mam ustawione TINYINT(1) bo w tej tabeli będę zapisywał 1 lub 0 zawsze mi działało teraz mi działać nie chce co to może być questionmark.gif
Johnas
a można fragmento kodu i treść zapytania... Zobacz też jakie dane są w zmiennej i spróbuj dodać wykonywane zapytanie przez phpmyadmin
pawel06281990
Moj kod wygląda tak
  1. $post_comments = isset($_POST['post_comments']) ? '1': "0";

a tak wygląda checkbox
  1. echo"<input type='checkbox' name='post_comments' value='yes' onclick='SetRatings();'".$post_comments." />";


Przez phpmyadmin dodaje
Johnas
pokaż całe zapytanie które sie wykonuje

Cytat(pawel06281990 @ 5.01.2023, 19:09:00 ) *
Moj kod wygląda tak
  1. $post_comments = isset($_POST['post_comments']) ? '1': "0";

to powinno być przy walidacji

Cytat(pawel06281990 @ 5.01.2023, 19:09:00 ) *
  1. echo"<input type='checkbox' name='post_comments' value='yes' onclick='SetRatings();'".$post_comments." />";

a tutaj powinieneś mieć checked, a nie 0/1


Cytat( @ 5.01.2023, 19:09:00 )
Przez phpmyadmin dodaje


to znaczy że wina leży po stronie PHP
pawel06281990
Ja te pola wyboru zrobiłem we function.

tak wygląda moja function
  1. function form_checkbox_switch_succes($input_name, $label = '',$wyniki_wyświetlanie ='', array $options = []){
  2.  
  3. $default_options = [
  4. 'type' =>'checkbox',
  5. 'input_id' => $input_name,
  6. 'required' => FALSE,
  7. 'onclick_id' =>'',
  8. 'option' => [],
  9. 'class' => '',
  10. 'id' => '',
  11. ];
  12. $options += $default_options;
  13. $disabled='';
  14. $opt= '';
  15. foreach($options['option'] as $key => $name){
  16.  
  17.  
  18. $chackbox ="<div class='form-group'>";
  19. $chackbox .="<div class='icheck-success d-inline'>";
  20. $chackbox .="<input type='".$options['type']."' name='".$input_name."' value='".$key."' ".$disabled." class='".$options['class']."' id='".$options['id']."' ".($options['onclick_id'] ? " onclick='".$options['onclick_id']."' " : '')." ".($wyniki_wyświetlanie ? " checked='checked' " : '').">";
  21. $chackbox .="<label for='".$options['id']."'>".$name."</label>";
  22. $chackbox .="</div>";
  23. $chackbox .="</div>";
  24. }
  25. return $checkbox;
  26.  
  27. }


A tak kieruje zapytanie do function
  1. echo form_checkbox_switch_succes('post_comments', $post_comments, '',
  2. ['option' => ['yes' => $locale['516']],'id' => 'checkbox'.$locale['516']]);


i mi to działało normalnie.
Johnas
dobrze, gdzieś wykonuje sie również zapytanie do bazy danych... Zobacz czy niezaznaczony Ci dodaje też do bazy... i czy przypadkiem
  1. $chackbox .="<input type='".$options['type']."' name='".$input_name."' value='".$key."' ".$disabled." class='".$options['class']."' id='".$options['id']."' ".($options['onclick_id'] ? " onclick='".$options['onclick_id']."' " : '')." ".($wyniki_wyświetlanie ? " checked='checked' " : '').">";




.($name ? " checked='checked' " : '').

bo $key => $value bo value nie powinno być key tylko 0 albo 1 w html, nie wiem jakie masz wartości w $key i $value- Weź to zamień na

  1. $chackbox .="<input type='".$options['type']."' name='".$input_name."' value='".$key."' ".$disabled." class='".$options['class']."' id='".$options['id']."' ".($options['onclick_id'] ? " onclick='".$options['onclick_id']."' " : '')." ".($wyniki_wyświetlanie ? " checked='checked' " : '')."> To jest $key=>".$key;
nospor
Cytat
Incorrect integer value: '' for column `grobnet_01`.`wyszukiwarka_posts`.`post_comments`

Komunikat bled wyraznie mowi ze wstawiasz pusty tekst '' w miejscie gdzie powinien byc INT. Wiec albo wkoncu podaj kod gdzie tworzysz zapytanie, albo sam szukaj co zepsules
Johnas
Cytat(nospor @ 5.01.2023, 19:34:58 ) *
Komunikat bled wyraznie mowi ze wstawiasz pusty tekst '' w miejscie gdzie powinien byc INT. Wiec albo wkoncu podaj kod gdzie tworzysz zapytanie, albo sam szukaj co zepsules



naprawdę? a ja myślałem że kod mówi że wartość dodawana nie jest integerem
nospor
Cytat
naprawdę? a ja myślałem że kod mówi że wartość dodawana nie jest intrigerem

No ludzie, przeciez tam w bledzie zapytania wyraznie jest podane co jest wstawiane: ''
I posrednio tak, blad mowi, ze pusty tekst nie jest integerem.
pawel06281990
Cytat(nospor @ 5.01.2023, 19:34:58 ) *
Komunikat bled wyraznie mowi ze wstawiasz pusty tekst '' w miejscie gdzie powinien byc INT. Wiec albo wkoncu podaj kod gdzie tworzysz zapytanie, albo sam szukaj co zepsules


Kod, który ma sprawdzić czy checkbox jest zaznaczony.

  1. $post_comments = isset($_POST['post_comments']) ? '1': '0';


Jak sprawdzam go var_dump(); to pokazuje mi 0 tak jak powinno, bo checkbox jest nie zaznaczony jak zaznaczę checkbox to się ładuje problem tkwi, że on nie chce zapisać mi wartości 0 do bazy.

a tak wygląda sprawdzanie zapisu do bazy
  1. ["post_type"]=>string(5) "posts"
  2. ["post_category"]=>string(1) "1"
  3. ["post_comments"]=>string(1) "0"
  4. ["minaturs"]=>string(41) ""
  5. ["minaturs_t1"]=>string(44) ""
  6. ["minaturs_t2"]=>string(44) ""


No i pobiera ale nie zapisuje.
Johnas
  1. function form_checkbox_switch_succes($input_name, $label = '',$wyniki_wyświetlanie ='', array $options = []){
  2.  
  3. $default_options = [
  4. 'type' =>'checkbox',
  5. 'input_id' => $input_name,
  6. 'required' => FALSE,
  7. 'onclick_id' =>'',
  8. 'option' => [],
  9. 'class' => '',
  10. 'id' => '',
  11. ];
  12. $options += $default_options;
  13. $disabled='';
  14. $opt= '';
  15. foreach($options['option'] as $key => $name){
  16.  
  17. if (strlen($key) == 0)
  18. $key = 0;
  19. else
  20. $key = 1;  
  21.  
  22.  
  23. $chackbox ="<div class='form-group'>";
  24. $chackbox .="<div class='icheck-success d-inline'>";
  25. $chackbox .="<input type='".$options['type']."' name='".$input_name."' value='".$key."' ".$disabled." class='".$options['class']."' id='".$options['id']."' ".($options['onclick_id'] ? " onclick='".$options['onclick_id']."' " : '')." ".($wyniki_wyświetlanie ? " checked='checked' " : '').">";
  26. $chackbox .="<label for='".$options['id']."'>".$name."</label>";
  27. $chackbox .="</div>";
  28. $chackbox .="</div>";
  29. }
  30. return $checkbox;
  31.  
  32. }


ten kod powinien działać... napisane na szybko wiec nie jest idealny tongue.gif Piwko mi wisisz tongue.gif
nospor
Chlopie... pokaz wkoncu kod ktory tworzy twoje zapytanie. Jesli twoj nastepny post bedzie bez tego kodu to temat zamkne bo dalsza dyskusja nie ma sensu smile.gif

@Johnas cos ty sie tak zafiksowal na te value ze musi tam byc 0 albo 1 wylacznie? Value w checkbox moze byc dowolne.
Johnas
Cytat(nospor @ 5.01.2023, 19:49:33 ) *
@Johnas cos ty sie tak zafiksowal na te value ze musi tam byc 0 albo 1 wylacznie? Value w checkbox moze byc dowolne.


Bo to coś czego nienawidzę - Wordpress i wydawało mi się że on nie tworzy zapytania tylko funkcja sama dedukuje co ma wstawić biggrin.gif

Dobra ja lece bo biblioteke mi zamykają
pawel06281990
Już wiem co jest grane kod który ma zapisać w array nie pobiera mi 0 i robi puste pole w zapisie

Kod zapisu do bazy w array wygląda tak

  1. function insert($table, $data, $exclude = array()){
  2. $fields = $values = array();
  3.  
  4. if( !is_array($exclude) ) $exclude = array($exclude);
  5.  
  6. foreach( array_keys($data) as $key ) {
  7. if( !in_array($key, $exclude) ) {
  8. $fields[] = "`$key`";
  9. $values[] = "'" . mysqlirealescapestring($data[$key]) . "'";
  10. }
  11. }
  12.  
  13. $fields = implode(",", $fields);
  14. $values = implode(",", $values);
  15. $sql = "INSERT INTO `$table` ($fields) VALUES ($values)";
  16.  
  17.  
  18. return dbquery($sql);
  19. }


jak sprawdziłem go array to mam taki wynik

  1. string(260) "INSERT INTO `wyszukiwarka_posts` (`post_author`,`post_date`,`post_title`,`post_visibility`,`page_content`,`po
    st_type`,`post_category`,`post_comments`,`minaturs`,`minaturs_t1`,`minaturs_t2`) VALUES ('1','1672944686','Test zapisu','1','','posts','1','','','','')"


dla tego mi daje komunikat błędu bo pole jest puste w zapisie

Coz brakuje w zapisie że usuwa mi 0
nospor
Cytat
Już wiem co jest grane kod który ma zapisać w array nie pobiera mi 0 i robi puste pole w zapisie

Juz ci to od dawna mowilem....
pawel06281990
Pytanie moje brzmi teraz takie czemu tak się dzieje??
nospor
POkaz dokladnie co zawiera $data

print_r($data);
pawel06281990
Po sprawdzieniu mamy to
  1. string(1) "0"
  2. (
  3. [post_author] => 1
  4. [post_date] => 1672945212
  5. [post_title] => Test zapisu
  6. [post_visibility] => 1
  7. [page_content] =>
  8. [post_type] => posts
  9. [post_category] => 0
  10. [post_comments] => 0
  11. [minaturs] =>
  12. [minaturs_t1] =>
  13. [minaturs_t2] =>
  14. )


nospor
znaczy ze to
$values[] = "'" . mysqlirealescapestring($data[$key]) . "'";

a dokladnie mysqlirealescapestring ci zamienia tekst 0 na pusty tekst. Wywal to mysqlirealescapestring dla testu.
Swoja droga tak beznadziejnego sposobu tworzenia zapytania nie widzialem juz od wiekow. Jak mozna tak robic jeszcze :/
pawel06281990
Cytat(nospor @ 5.01.2023, 20:06:51 ) *
znaczy ze to
$values[] = "'" . mysqlirealescapestring($data[$key]) . "'";

a dokladnie mysqlirealescapestring ci zamienia tekst 0 na pusty tekst. Wywal to mysqlirealescapestring dla testu.

Tak masz rację to mysqlirealescapestring(); mi zmienia 0 na puste pole
Bo jak dodałem samo zapytanie $data[$key] To pokazało mi 0
Cytat(nospor @ 5.01.2023, 20:06:51 ) *
Swoja droga tak beznadziejnego sposobu tworzenia zapytania nie widzialem juz od wiekow. Jak mozna tak robic jeszcze :/


Możesz sprecyzować swoją uwagę i co jest źle w mojej function questionmark.gif
nospor
Cytat
Możesz sprecyzować swoją uwagę i co jest źle w mojej function

To ze wszystko traktujesz jako tekst, niewazne czy to tekst, czy to liczba. wszystko leci przez jeden mechanim. Tak sie nie robi. ja wiem, ze to jest kuszace, ze masz jedna funkcje ktore w teorii upraszcza ci zycie, ale tak nie jest. To sie zemsci predzej czy pozniej, co przykladem miales wlasnie teraz.
NIe nalezy korzystac z funkcji ktore robia wszystko bo w zgodzie z przyslowiem: jak cos jest do wszystkiego to jest do niczego
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.