Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Problem z warning i notice
eminiasty
post
Post #1





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


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()'

Ten post edytował eminiasty 25.06.2016, 11:44:39
Go to the top of the page
+Quote Post
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


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.
Go to the top of the page
+Quote Post
eminiasty
post
Post #3





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


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
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


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.
Go to the top of the page
+Quote Post
eminiasty
post
Post #5





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


  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 ...


Ten post edytował eminiasty 25.06.2016, 13:01:17
Go to the top of the page
+Quote Post
viking
post
Post #6





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Co masz w $_POST['type']?
Go to the top of the page
+Quote Post
eminiasty
post
Post #7





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


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


Ten post edytował eminiasty 25.06.2016, 13:10:48
Go to the top of the page
+Quote Post
viking
post
Post #8





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


  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.
Go to the top of the page
+Quote Post
eminiasty
post
Post #9





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


Mgógłbyś to rozjaśnic? Pierwszy raz widze cos pokroju mysqli_stmt..
Go to the top of the page
+Quote Post
viking
post
Post #10





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Masz wszystko w dokumentacji z dużą ilością przykładów.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 15:56