Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: 2 takie same rekordy w bazie.
Forum PHP.pl > Forum > PHP
Macok
Napisalem prosty skrypt ktory wysyla do bazy danych dane jakie wpisze sie w formularzu.
Problem w tym ze wystarczy odswiezyc strone, a w bazie pojawi sie nastepny, identyczny rekord. Co zrobic aby przy wysylaniu rekordow do bazy skrypt sprawdzal czy nie istnieje juz taki rekord i w razie jego istnienia zwrocil odpowiedni komunikat?
My4tic
Możesz nadać w SQL odpowiednim polom atrubut UNIQUE. Wtedy jesli bedziesz dodawał rekord, który już istnieje w bazie danych (np. takie same loginy) to zapytanie zwróci błąd ->> wyświetlasz odpowiedni komunikat.
macbirdie
I po wysłaniu danych z formularza przekierować użytkownika na inną stronę, by przy odświeżeniu nie próbował znowu wysyłać tych samych danych do aplikacji. (header -> Location: lub, co bardziej irytujące, przekierowanie w meta) winksmiley.jpg
Macok
Ok. dzieki
Tylko jak zrobic zeby mysql nie wywalal swojego komunikatu tylko taki jaki ja napisze?
nospor
Tu masz topic jak sie zabezpieczyc przed refreshem:
http://forum.php.pl/index.php?showtopic=44383
Macok
Mam jeszcze 1 pytanie:
Jak zapobiec zapisaniu w bazie 2 rekordów, w których 2 dane pola będą takie same?
Np. mam rekord "samochód"
Kod
Marka = Opel
Model = Astra
Uzywany = true
i próbuje dodać drugi, w którym marka i model będą takie same:
Kod
Marka = Opel
Model = Astra
Uzywany = false
2 rekord nie powinien sie dodać ponieważ taki samochód jest już w bazie.
To czy jest nowy czy uzywany nei ma znaczenia.
Glarden
Albo takie coś:
  1. <?php
  2. $ile = mysql_num_rows(mysql_query("select * from dane where warunek='wartosc_warunku'"));
  3. if ($ile > 0) {
  4. echo ("Taki rekord już istnieje!");
  5. }
  6. ?>
Athlan
A nie lepiej dodać na siłe ten rekord i wyrzicić i złapać wyjątek? Oczwiście pozwala na to tylko OOP i jakiś sterownik do baz danych na wyjątek w jakiejś metodzie Execute(), która robi mysql_query().

Fajnie opisła to niegdyś hwao na starym blogu. Możesz znaleźć to tutaj:
http://hwao.strefaphp.net/blog/2006/06/16/wyjatki/
Ludvik
A nie lepiej utworzyć po prostu klucz złożony z tych pól? W ten sposób już na poziomie bazy wykluczysz możliwość wpisania błędnych danych.
Macok
Dziękuję wszystkim,
zastosowałem się do pomysłu Glardena
kleszczoscisk
Witam
Dodatkowe pytanie w temacie:

Baza ma rekordy, powiedzmy z 15 pól każdy, blokuję warunkiem WHERE możliwosc dodania rekordu kiedy określone jedno z tych pól ma identyczną wartość.
Zależy mi aby spradzić czy pozostałe 14 pól ma wartości identyczne z danymi z formularza i jeśli choć jedno jest inne - umożliwić nadpisanie.
Czy robić to również za pomocą WHERE? Bo coś mi sie wydaje, że to jest nieprawifłowe, a conajmniej nieoptymalne (słabo wygląda taki wąż warunków smile.gif)
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.