Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> 2 takie same rekordy w bazie., Jak temu zapobiec?
Macok
post
Post #1





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 31.08.2006

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


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?

Ten post edytował Macok 7.09.2006, 10:51:36
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
My4tic
post
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 4.08.2005

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


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.


--------------------
Załóż konto na dropbox.
Go to the top of the page
+Quote Post
macbirdie
post
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 7.09.2006
Skąd: Poznań

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


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


--------------------
NotePad++ / Eclipse 3.3 (+PDT+PyDev+WTP) / VS 2005 Standard (+WTL 8.0+WM 2003 SDK/WM 5.0 SDK) / Glassfish / php 5.2.3 / Apache 2.2.x / MySQL 5.0.x / PostgreSQL 8.2.x / cvsd / violin 2.0 / piano 0.7-pre :P
Go to the top of the page
+Quote Post
Macok
post
Post #4





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 31.08.2006

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


Ok. dzieki
Tylko jak zrobic zeby mysql nie wywalal swojego komunikatu tylko taki jaki ja napisze?
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Tu masz topic jak sie zabezpieczyc przed refreshem:
http://forum.php.pl/index.php?showtopic=44383


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Macok
post
Post #6





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 31.08.2006

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


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





Grupa: Zarejestrowani
Postów: 153
Pomógł: 2
Dołączył: 28.05.2007
Skąd: Stamtąd

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


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


--------------------
Raz, dwa, trzy, baba Jaga patrzy!
http://trelemorele.cba.pl
Go to the top of the page
+Quote Post
Athlan
post
Post #8





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


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/


--------------------
Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij pod postem.
Go to the top of the page
+Quote Post
Ludvik
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


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.


--------------------
Go to the top of the page
+Quote Post
Macok
post
Post #10





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 31.08.2006

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


Dziękuję wszystkim,
zastosowałem się do pomysłu Glardena
Go to the top of the page
+Quote Post
kleszczoscisk
post
Post #11





Grupa: Zarejestrowani
Postów: 164
Pomógł: 3
Dołączył: 13.12.2007

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


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


--------------------

Siedź cicho, kiedy śpi licho.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 09:25