Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Require i $_GET
Forum PHP.pl > Forum > Przedszkole
Osth
Witam, mam poniższy problem z funkcją require.

Plik 1 - admin.php
  1. if(($_GET['action']) <> '')
  2. {
  3. try
  4. {
  5. $file = 'Class/Admin/'.$_GET['action'].'.php';
  6. // if(!file_exists($file)) { throw new Exception('File not found'); }
  7. require_once $file;
  8. }
  9. catch (Exception $e)
  10. {
  11. echo 'Error: '. $e -> getMessage();
  12. }
  13. }


Plik 2 - Categories.php

  1. if(isset($_GET['cmd']))
  2. {
  3. if($_GET['cmd'] == 'add')
  4. {
  5. #code
  6. }
  7.  
  8. if($_GET['cmd'] == 'changeVisibility' && isset($_GET['id']))
  9. {
  10. $validation = $categories -> isVisible($_GET['id']);
  11. if($validation == 'Tak') { $change == 'Nie'; }
  12. if($validation == 'Nie') { $change == 'Tak'; }
  13. $categories -> setData('visibility', $change, $_GET['id']);
  14. // header('Location: admin.php?action=Categories');
  15. }
  16.  
  17. if($_GET['cmd'] == 'delete')
  18. {
  19. #code
  20. }
  21. }


Po kliknięciu w link, czyli wywołaniu adresu admin.php?action=Categories&cmd=changeVisibility&id=1 dostaję błąd:
  1. Warning: require_once(Class/Admin/Categories?cmd=changeVisibility?id=1.php): failed to open stream: No such file or directory



Jak ten problem najlepiej rozwiązać? Spośród rozwiązań z sieci nie znalazłem nic pomocnego..
nospor
kolejne parametry dodaje sie prze & a nie przez ?

czyli nie
strona.pl?cos=1?cos2=2?co3=2
tylko
strona.pl?cos=1&cos2=2&cos3=2

Osth
O matko, chyba bardziej idiotycznego błędu nie mogłem zrobić..
Nic dziwnego, że nie znalazłem wcześ niej rozwiązania..

Dzięki za pomoc wink.gif


EDIT - kolejny problem:

Nie wykonuje mi się zapytanie UPDATE, dlaczego?

Plik 1 - frangment klasy
  1. public function set($data, $value, $id)
  2. {
  3. try
  4. {
  5. $db = new Database;
  6. $db -> query('UPDATE categories SET `'.$data.'` = `'.$value.'` WHERE id = :id');
  7. $db -> bind(':id', $id);
  8. $db -> execute();
  9. }
  10. catch (Exception $e)
  11. {
  12. echo 'Error: '. $e -> getMessage();
  13. }
  14. }


Plik 2 - wywołanie metody
  1. if($_GET['cmd'] == 'changeVisibility' && isset($_GET['id']))
  2. {
  3. $validation = $categories -> isVisible($_GET['id']);
  4. if($validation == '1') { $categories -> set('visibility', '0', $_GET['id']); }
  5. if($validation == '0') { $categories -> set('visibility', '1', $_GET['id']); }
  6.  
  7. header('Location: admin?action=Categories');
  8. }
nospor
W `krzywe ciapki` to sie bierze nazwy kolumn i tabel a nie wartosc. Wartosci to co sie najwyzej bierze w 'ciapki'
A na przyszlosc wyswietlaj blad zapytania to bedziesz widzial o co pluje sie baza.

przenosze
Osth
Niezależnie od "ciapek", wciąż nie działa.
nospor
Jak juz mowilem, sprawdz czy nie zwraca bledu, sprawdz czy przekazyjesz poprawne ID. No wszystko trzeba powtarzac kilkukrotnie?
Osth
  1. Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''name' = 'Nowa' WHERE id = 1' at line 1


Kod:
  1. $category = new Categories;
  2. $category -> set('name', 'Nowa', 1);


Klasa:
  1. public function set($data, $value, $id)
  2. {
  3. try
  4. {
  5. $db = new Database;
  6. $db -> query('UPDATE categories SET :data = :value WHERE id = :id');
  7. $db -> bind(':data', $data);
  8. $db -> bind(':value', $value);
  9. $db -> bind(':id', $id);
  10. $db -> execute();
  11. }
  12. catch (Exception $e)
  13. {
  14. echo 'Error: '. $e -> getMessage();
  15. }
  16. }
nospor
Nazw kolumn sie nie binduje.
Osth
Kod klasy:
  1. public function set($data, $value, $email)
  2. {
  3. try
  4. {
  5. $db = new Database;
  6. $db -> query('UPDATE users SET '.$data.' = '.$value.' WHERE email = :email');
  7. $db -> bind(':email', $email);
  8. $db -> execute();
  9. }
  10. catch (Exception $e)
  11. {
  12. echo 'Error: '. $e -> getMessage();
  13. }
  14. }


Wywołanie kodu #1
  1. $category = new Categories;
  2. $category -> set('name', 'Nowa', 1);


Dostawałem wtedy błąd:
  1. Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Nowa' in 'field list'


Wywołanie kody #2
  1. $category = new Categories;
  2. $category -> set('name', 'name', 1);


Teraz nie dostaję żadnego błędu, a mimo to wartość w bazie się nie zmienia.
com
a ta twoja klasa Database wgl działa, sprawdź
Turson
Cytat(Osth @ 6.04.2016, 19:45:13 ) *
Wywołanie kodu #1
  1. $category = new Categories;
  2. $category -> set('name', 'Nowa', 1);


Dostawałem wtedy błąd:
  1. Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Nowa' in 'field list'


Wywołanie kody #2
  1. $category = new Categories;
  2. $category -> set('name', 'name', 1);


Teraz nie dostaję żadnego błędu, a mimo to wartość w bazie się nie zmienia.

#1
Masz
  1. '.$data.' = '.$value.'

czyli wstawiasz name = Nowa
Nowa musi być bindowane tak jak email

#2
Bo nie zmieniasz wartosci a ustawiasz na taka samą co jest, błąd spowodowany jak w #1
Osth
Problem rozwiązany, bardzo dziękuję smile.gif
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.