Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Problem z warning i notice
Forum PHP.pl > Forum > Przedszkole
eminiasty
Bledy:
  1. Warning: trim() expects parameter 1 to be string, array given in C:\xampp\htdocs\M\inc\inc_other\functions.php on line 36
  2. Notice: Undefined index: active in C:\xampp\htdocs\M\inc\script\categories.php on line 64
  3. Notice: Use of undefined constant active - assumed 'active' in C:\xampp\htdocs\M\inc\script\categories.php on line 82
  4. Notice: Undefined offset: 0 in C:\xampp\htdocs\M\inc\script\categories.php on line 101


Chce dodawac do bazy kategorie o kilku typach.


Robie to w nastepujacy sposob:

  1. $query2="
  2. INSERT INTO ".$prefix."categories (`categories_id` ,`users_id`,`categories_name`,`categories_colorText`, `categories_colorBg`,`categories_active`, `categories_dateAdd`)
  3. VALUES('','".$user."','".$name."','".$colortext."','".$colorbg."','".active."', NOW())
  4. ";
  5.  
  6. $result= mysqli_query($link,$query2) or die(mysqli_error());
  7.  
  8.  
  9. $categories = mysqli_insert_id($link);
  10.  
  11. if(!empty($_POST['type'])) {
  12. $type = array();
  13. $work = 0;
  14. foreach($_POST['type'] as $i ) {
  15. $type[$i] = filtrujDane($link,$_POST['type'][$i]);
  16. $work=$work+1;
  17. }
  18.  
  19. for($i=0;$i<$work;$i++){
  20. $query3="
  21. INSERT INTO ".$prefix."categoriestype (`categoriestype_id`, `categories_id`)
  22. VALUES('".$categories."','".$type[$i]."')";
  23. $result = mysqli_query($link,$query3) or die(mysqli_error());
  24. }
  25. }


Kod niby dziala, aczkowlwiek, wystepuja powyze bledy, chcialbym wiedziec jak je wyeliminowac?

w name formularza mam name='type()'
viking
Czy to nie tobie juz z miesiąc temu mówiłem żebyś zrezygnował z nic nie wynoszącej funkcji filtrujDane?
Błędy wystarczy przetłumaczyć. Do trim dajesz tablicę zamiast stringa. Nie ma indeksu active ani stałej. Tablica nie ma klucza 0.
eminiasty
Nie ja gdzieś na necie wyczaiłem ta funkcje.

dlaczego taka funkcja jest nic nie wnosi?

'".active."' - tu był błąd z active.

Cytat
Tablica nie ma klucza 0.


Czyli powinienem zdefiniowac tablice jako null na poczatku? nie pomga to

Cytat
Do trim dajesz tablicę zamiast stringa


Dodanie tablicy wiaze sie z jakas petla tak po mojemu, a jak zaimplementowac takie cos w funkcji, prosil bym o jakis przyklad
viking
Nie czaj gdzieś w necie tylko szukaj w dokumentacji http://php.net/manual/pl/mysqli-stmt.bind-param.php
Twoja funkcja nie zabezpieczała przed sql injection i do tego niepotrzebne dawała trim jak dobrze pamiętam. Przez to masz jeszcze kolejne problemy. Jak zrobisz to w końcu dobrze połowa tego kodu nie będzie potrzebna.

Jak decydujesz się iterować po $_POST['type'] to najpierw sprawdź czy jest to tablica.
eminiasty
  1. foreach($_POST['type'] as $i => $key) {
  2.  
  3. $temp = implode('', $_POST['type'][$i]);
  4.  
  5. $type[$i] = mysqli_real_escape_string($link,trim($temp));
  6. $work=$work+1;
  7. }


Probuje to rozwiazac w ten sposob ale chyba jezcze bardziej komplikuje.

  1. Warning: trim() expects parameter 1 to be string, array given ...
viking
Co masz w $_POST['type']?
eminiasty
  1. array(4) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" [3]=> string(1) "4" } string(1) "1"



No i jest to tablica.., bo tak sie chyba to sprawdza..
  1. if(is_array($_POST['type'])){
  2. var_dump($_POST['type']);
viking
  1. if ($stmt = mysqli_prepare($link, "INSERT INTO ".$prefix." categories (`users_id`,`categories_name`,`categories_colorText`, `categories_colorBg`,`categories_active`, `categories_dateAdd`) VALUES(?, ?, ?, ?, ?, NOW())")) {
  2. mysqli_stmt_bind_param($stmt, "issss", $user, itd....);
  3. if (mysqli_stmt_execute($stmt)) {
  4. $category = mysqli_insert_id($link);
  5. $sql = "INSERT INTO ".$prefix."categoriestype (`categoriestype_id`, `categories_id`) VALUES(?, ?)";
  6. if (!empty($_POST['type'] && is_array($_POST['type'])) {
  7. $stmt2 = mysqli_prepare($link, $sql);
  8. foreach ($_POST['type'] as $type) {
  9. mysqli_stmt_bind_param($stmt2, "is", $category, $type);
  10. mysqli_stmt_execute($stmt2);
  11. }
  12. }
  13. }
  14. }


Czy jakoś tak. Polecam użyć stylu obiektowego i try/catch + commit / rollback bo się można pociąć tak pisząc.
eminiasty
Mgógłbyś to rozjaśnic? Pierwszy raz widze cos pokroju mysqli_stmt..
viking
Masz wszystko w dokumentacji z dużą ilością przykładów.
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.