![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 0 Dołączył: 21.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam mam problem z dodawaniem wpisów. tzn konkretnie z 'powielaniem' wybranego wpisu. Chodzi o to, że mam tekst np: ala ma kota <-- ten tekst się dodaje, kiedy wpisuje np.: pies ma ale to dodają się tylko "pies" i "ale", "ma" jako że jest już w bazie zostaje pominięte podczas dodawania.... wydawało mi się, że tak jest...niestety tak jest tylko na localhost na którym zawsze pisze skrypty a dopiero później wrzucam na serwer. Więc tak: na localhost skrypt pomija w dodawaniu istniejący w bazie wyraz natomiast na serwerze dodaje wszystkie wyrazy jakie występują w formularzu (którego kodu tutaj nie podałem ale za to jest niżej podana zmienna $_POST). Co zrobić aby i na serwerze pomijał podczas dodawania istniejące w bazie wpisy? Tak żebym nie miał w bazie kilkudziesięciu takich samych wpisów...
$dodaj=Zabezpiecz($_POST['dodaj']) <-- dane z formularza i zabezpieczenie przy pomocy funkcji Zabezpiecz. Funkcja Zabezpiecz:
Bardzo proszę o pomoc...pozdrawiam Ten post edytował bl4ck_b0x 24.01.2008, 08:13:05 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 50 Pomógł: 4 Dołączył: 6.05.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Na początek sprawdziłbym czy słowa dodane do bazy, które NIBY są takie same, czy są rzeczywiście takie samy, czyli np. czy "ma" nie jest po raz drugi dodane jako "ma " - ze spacją np. na końcu, albo innym białym znakiem.
PS Poza tym, nie wiem jak podchodzisz do kwestii wydajności, ale chodzi o zapytanie do bazy: jesli bedziesz miał 500 elementów w $add to bedzie to oznaczać do 1000 zapytań (select i input, gdzie ilosc inputow powinna sie zmniejszac, bo slowa beda sie stopniowo dodawać). I jeszcze: CODE <?php $linijka=str_replace(...); .... $linijka=str_replace(...); ?> zastąpiłbym jednym: CODE <?php
$linijka=preg_replace(...);?> Ten post edytował wojckr 24.01.2008, 08:58:46 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 0 Dołączył: 21.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
właśnie chodzi o to, że zdaję sobie sprawę z tego, że będzie aż tyle zapytań jednak właśnie o to chodzi, że będę wklejał całe teksty, felietony, artykuły itd. więc domyślam się, że będzie aż tyle zapytań. poza tym jakbyś nie zauważył linijka:
$dodaj = eregi_replace(' {2,}',' ',$dodaj); właśnie to robi, usuwa więcej niż jedną spacje itd. więc białe znaki są eliminowane... chyba ze moglbym skorzystac jeszcze z trim(); tyle, że np. dodając pojedyńczy wyraz 2 razy np. "ja" faktycznie zostaje dodany 2 razy pomimo, że istnieje już w bazie Ten post edytował bl4ck_b0x 24.01.2008, 09:10:08 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 50 Pomógł: 4 Dołączył: 6.05.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Okey, pomijamy kwestię wydajności.
Biały znak to nie tylko spacja. To także znak nowej linii, tabulator i inne dziwne, których nie widać. Np. znak nowej linii może być oznaczony w wyrażeniu regualrnym jako \n LUB \r LUB \n\r To może: W tabeli polu "nohash" nadaj atrybut UNIQE, czyli w przypadku próby dodania takiego samego wyrazu, próba taka zostanie odrzucona. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 0 Dołączył: 21.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
możesz powiedziec jak to wygląda? bo nie czytałem nigdy o tym UNIQE, zresztą myślałem, że ten kod:
pozbędzie się spacji i entera podczas dodawania wpisu. niby tak jest ale tylko na localhost, na serwerze już działa inaczej |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 50 Pomógł: 4 Dołączył: 6.05.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Można użyć odpowiedniego zapytania SQL, ale nie znam go (tzn nie pamiętam w tej chwili i nie mam możliwości sprawdzić), atrybut UNIQE nadaję zawsze z poziomu PHPAdmina przy zakładaniu tabeli (ale można też później nadać, ale tylko wtedy się uda nadać, gdy w kolumnie nie ma powtarzających sie wpisów).
Po polsku w PHPMyAdminie to jest nazwane "jednoznaczny" (ikonka z literą "U"), zaznaczasz i kolumna bedzie mogla miec tylko wartosci unikalne. Potem można to edytować w zakładce "Struktura" danej tabeli tu: -------------------------------- Indeksy: Nazwa klucza | Typ | Moc | Pole a | UNIQUE | 0 | a ----------------------------------- Natomiast biały znak następnej linii może sie różnić na różnych komputerach o różnych systemach operacyjnych (upraszczając). Ten post edytował wojckr 24.01.2008, 17:18:12 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 20:02 |