Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z warunkiem
Forum PHP.pl > Forum > PHP
brutal1985
Witam.
Mam problem z warunkiem podczas walidacji formularza.
Mój kod:
  1. $query_ask = 'SELECT `Dzial_ID`, `Tytul` FROM `Dzial` WHERE `Tytul` = "' . $_POST['tytul'] . '";';
  2. $query_ask_result = mysql_query($query_ask);
  3. $query_ask_row = mysql_fetch_assoc($query_ask_result);
  4.  
  5. if($_GET['ID'] != $query_ask_row['Dzial_ID'])
  6. {
  7. $error = true;
  8. $error_name = 'Nie można zmienić nazwy działu. Dział o podanym tytule już istnieje w bazie danych i jest inny niż dział, który edytujesz. ';
  9. }

I sprawdzam warunek błędu:
  1. if($error!=true)
  2. {
  3. // Tu właściwy kod do wykonania w przypadku braku błędu
  4. }
  5. else
  6. {
  7. echo '<div class="edit_content">
  8. Błąd. ' . $error_name . ' ' . '
  9. <a href="index.php?dzial=panel&link=edit_user&ID='. $_GET['ID'] .'" class="blank_link">Powrót do edycji danych.</a>
  10. </div>';
  11. }

W ten sposób sprawdzam, czy ktoś nie chce zmienić nazwy działu na inny już istniejący w bazie (ale nie ten, który edytuję).
I wszystko byłoby pięknie, gdyby nie fakt, że poprzez zapytanie, które wykonuję, nie można dodać nazwy działu, której nie ma w bazie danych.
Jak przerobić to zapytanie, aby można było zmienić nazwę działu na inną (nieistniejącą w bazie danych) i jednocześnie uniemożliwić zmianę nazwy na już istniejącą w bazie danych (ale inną niż tą, którą edytuję). Oczywiście ponadto musiałaby pozostać możliwość braku zmiany nazwy.

Trochę to zawile napisałem. Mam nadzieję, że jest to zrozumiałe.

Z góry dzięki za pomoc.
-jarek-
Cytat(brutal1985 @ 31.08.2011, 17:03:07 ) *
  1. $query_ask = 'SELECT `Dzial_ID`, `Tytul` FROM `Dzial` WHERE `Tytul` = "' . $_POST['tytul'] . '";';
  2. $query_ask_result = mysql_query($query_ask);
  3. if(!$query_ask_result){
  4. $sql = mysql_query("INSERT INTO `Dzial` (Tytul) VALUES ('" . $_POST['tytul'] . "')");
  5. }
  6.  
  7. $query_ask_row = mysql_fetch_assoc($query_ask_result);
  8.  

Jeśli Cię dobrze zrozumiałem
brutal1985
No nie do końca o to mi chodziło. Nie potrzebuje wstawiać tych danych do tabeli w bazie danych.
One mają być tylko sprawdzone, czy są właściwe.

Zilustruję to na przykładzie.
Mam dwa działy: Adres i Kontakt.
Klikam i wybieram do edycji np. Adres. (przekazuje w zmiennej GET ID działu Adres)
Wyświetla się formularz wraz z wstawionymi tam informacjami z bazy danych (dane, które dotychczas były w bazie danych przypisane do działu Adres).
W formularzu jest pole Tytuł.
Domyślnie podświetli się wpisane w polu Tytuł: "Adres"

I teraz chciałbym, aby można było zmienić Tytuł "Adres" na jakikolwiek inny niż "Kontakt" lub zostawić Tytuł "Adres" bez zmian.
Jeśli wpiszę w pole Tytuł "Kontakt", to wyświetlić ma się błąd (czyli wartość zmiennej $error ma być true)
  1. $error = true;
  2. $error_name = 'Nie można zmienić nazwy działu';

Celem takiego rozwiązania jest to, żeby w bazie nie było dwóch działów o tej samej nazwie, a różnym ID.
-jarek-
Cytat(brutal1985 @ 31.08.2011, 17:48:22 ) *
No nie do końca o to mi chodziło. Nie potrzebuje wstawiać tych danych do tabeli w bazie danych.
One mają być tylko sprawdzone, czy są właściwe.
Zilustruję to na przykładzie.
Mam dwa działy: Adres i Kontakt.
Klikam i wybieram do edycji np. Adres. (przekazuje w zmiennej GET ID działu Adres)
Wyświetla się formularz wraz z wstawionymi tam informacjami z bazy danych (dane, które dotychczas były w bazie danych przypisane do działu Adres).
W formularzu jest pole Tytuł.
Domyślnie podświetli się wpisane w polu Tytuł: "Adres"

Celem takiego rozwiązania jest to, żeby w bazie nie było dwóch działów o tej samej nazwie, a różnym ID.

  1. // umieść przed wysłaniem nagłówków
  2. $query_ask = 'SELECT `Dzial_ID`, `Tytul` FROM `Dzial` WHERE `Tytul` = "' . $_POST['tytul'] . '";';
  3. if(mysql_num_rows(mysql_query($query_ask))){
  4. header("Location: jakasstrona?error=Nie można zmienić nazwy działu. Dział o podanym tytule już istnieje w bazie danych i jest inny niż dział, który edytujesz");
  5. }
  6. else{
  7. // ........
  8. }
  9. // gdzieś dalej przechwycenie
  10.  
  11. isset($_GET['error']) {
  12. echo $_GET['error'];
  13. }



może o to Ci codziło??
brutal1985
Poradziłem sobie w inny sposób. Po prostu zmieniłem zapytanie do bazy danych. Teraz wyciągam z bazy wszystkie rekordy, które mają ID równe przekazanemu w zmiennej $_GET oraz te, które mają tytuł taki sam, jak wpisany w formularzu.
Następnie w warunku odrzucam wszystkie te, które mają inne ID od oczekiwanego.

Oto mój kod:
  1. $query_ask = 'SELECT `Dzial_ID`, `Tytul` FROM `Dzial` WHERE `Dzial_ID` = "' . $_GET['ID'] . '" OR `Tytul` = "' . $_POST['tytul'] . '";';
  2. $query_ask_result = mysql_query($query_ask);
  3. $query_ask_row = mysql_fetch_assoc($query_ask_result);
  4. if($_GET['ID'] != $query_ask_row['Dzial_ID'])
  5. {
  6. $error = true;
  7. $error_name = 'Nie można zmienić nazwy działu. Dział o podanym tytule już istnieje w bazie danych i jest inny niż dział, który edytujesz. ';
  8. }


Mimo to, dziękuje za próbę pomocy. Pozdrawiam.
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.