Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Niedodawanie tego samego
Forum PHP.pl > Forum > Przedszkole
-anonim-
Witam, jak zrobić, aby do bazy nie dodawało się drugi raz np. takie samo imię i nazwisko? Próbowałem to zrobić w taki sposób, ale nie działa:

  1. $ins=mysql_query("SELECT * FROM `tabela` WHERE imie='$imie', nazwisko='$nazwisko'",$connection);
  2.  
  3. if(mysql_num_rows($ins)==0){
  4. mysql_query("INSERT INTO `tabela` SET imie='$imie', nazwisko='$nazwisko'");
  5. echo "dodano!";
  6. } else {
  7. echo "blad! podane imie i nazwisko znajduje sie w bazie";
  8. }
Kużdo
Po pierwsze, to mylisz składnię INSERT i UPDATE.
Po drugie, w SELECT nie rozdziela się warunków przecinkiem tylko operatorami logicznymi np. AND.

Więc kod powinien przynajmniej tak wyglądąć:
  1. $ile = mysql_query("SELECT * FROM `tabela` WHERE `imie` = '$imie' AND `nazwisko` = '$nazwisko'");
  2.  
  3. if(!mysql_num_rows($ile))
  4. {
  5. $dodaj = mysql_query("INSERT INTO `tabela` (`imie`, `nazwisko`) VALUES ('$imie', '$nazwisko')");
  6. echo 'Dodano!';
  7. }
  8. else echo "Blad! Podane Imie i Nazwisko jest juz w bazie!";
Niktoś
Jeśli nie chcesz dodawać drugi raz tego samego użytkownika do bazy ,musisz najpierw sprawdzić jego występowanie w bazie danych.Proponowałbym zainteresować się poleceniem EXISTS w MySQL.
gothye
Lub założeniem klucza UNIQUE na pola imie ,nazwisko
Niktoś
Cytat
Lub założeniem klucza UNIQUE na pola imie ,nazwisko

Ale czy to coś zmieni?Czy nie wysypie błędem podczas próby dodania tego samego użytkownika?Na pewno kwerenda zwróci false ,ale czy dodatkowo nie wysypie jakimś wyjątkiem?
mortus
Cytat(Kużdo @ 2.05.2012, 14:13:44 ) *
Po pierwsze, to mylisz składnię INSERT i UPDATE.
Mylisz się. Taka składnia zapytania INSERT również jest dozwolona i prawidłowa, sam sprawdź.

Cytat(Niktoś @ 2.05.2012, 14:55:58 ) *
Jeśli nie chcesz dodawać drugi raz tego samego użytkownika do bazy ,musisz najpierw sprawdzić jego występowanie w bazie danych.Proponowałbym zainteresować się poleceniem EXISTS w MySQL.
W MySQL EXISTS używamy raczej do czegoś innego i tylko z podzapytaniami lub poleceniami DDL (jak CREATE DATABASE, CREATE TABLE, itp.). W tak banalnym przypadku wystarczy zwykły SELECT zaproponowany przez Kużdo. Nie ma tutaj potrzeby dodatkowo obciążać bazy danych.

Cytat(Niktoś @ 2.05.2012, 15:01:41 ) *
Ale czy to coś zmieni?Czy nie wysypie błędem podczas próby dodania tego samego użytkownika?Na pewno kwerenda zwróci false ,ale czy dodatkowo nie wysypie jakimś wyjątkiem?
Tutaj masz rację, zapytanie się nie wykona i zostanie zwrócony odpowiedni komunikat błędu. Klucz UNIQUE to raczej "wsparcie" dla bazy danych, a nie aplikacji, która z tej bazy danych korzysta.


Pomijając to wszystko. W powiecie, w którym mieszkam mieszkają również co najmniej cztery osoby, które noszą takie samo imię i takie samo nazwisko, jak ja. Imię i nazwisko wbrew pozorom wcale nie muszą być czymś unikalnym.
Kużdo
Cytat(mortus @ 2.05.2012, 18:49:06 ) *
Mylisz się. Taka składnia zapytania INSERT również jest dozwolona i prawidłowa, sam sprawdź.

Faktycznie. Całe życie używałem pierwszego sposobu, a tego drugiego do tej pory nie znałem... Aż wstyd. Dzięki za info.
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.