Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] filtracja + edycja bazy.
Hpsi
post
Post #1





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


Witam mam pewien problem i nie wiem jak do niego w ogole się zabrać.
mam sobie tabele:
Kod
+------------+---------------+------+-----+---------+----------------+
| Field      | Type          | Null | Key | Default | Extra          |
+------------+---------------+------+-----+---------+----------------+
| id         | int(11)       | NO   | PRI | NULL    | auto_increment |
| ui_id      | int(11)       | NO   | MUL | NULL    |                |
| nazwa      | varchar(1024) | NO   |     | NULL    |                |
| data       | date          | NO   | MUL | NULL    |                |
| link       | varchar(255)  | NO   |     | NULL    |                |
+------------+---------------+------+-----+---------+----------------+


i problem mój polega na tym. że z powodu mi bliżej nieznanego (podejrzewam user fail) wpisy się źle dodały tj:

w polu nazwa mam na przykład coś takiego:

http://forum.php.pl/index.php?showtopic=17...mp;#entry876760 mysql_real_escape_string a PDO

no i problem polega na tym że jak widać nie powinno się dawać linka w nazwię tylko osobno w polu link.

Teraz moje pytanie jak to najlogiczniej zrobić taką mała filtracje, że jeżeli pierwszy ciąg znaków jest linkiem, wycina mi go i przenosi do pola link?
Problem polega głównie na tym iż mam ograniczony dostęp do serwera, także preferowałbym rozwiązać to jakoś zapytaniem sql, da się to zrobić?
Go to the top of the page
+Quote Post
lessi
post
Post #2





Grupa: Zarejestrowani
Postów: 89
Pomógł: 12
Dołączył: 1.12.2009

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


Jeżeli chodzi o przeniesienie to możesz dać

  1. UPDATE tabela SET link = nazwa WHERE nazwa LIKE "http://%"

To polecenie jak widać. Kopiuje zawartość z pola 1 do pola 2. Gdzie ciąg zaczyna się od http://

A jeżeli chcesz wymazać zawartość pola pierwszego to
  1. UPDATE tabela SET nazwa = "" WHERE nazwa LIKE "http://%"


Mogą być błędy. Oczywiście zadziała poprawnie jeżeli nie przekroczysz długości znaków.
Pozostaje tylko problem wycięcia ciągu. Ale postaram się coś jeszcze wykombinować

Ten post edytował lessi 28.06.2011, 10:23:45
Go to the top of the page
+Quote Post
Hpsi
post
Post #3





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


(IMG:style_emoticons/default/haha.gif) dzięki za propozycje ^^ ale nie o to chodzi
ja muszę wyciągnąc pierwszy ciąg znaków który jest linkiem, ten pierwszy ciąg znaków wklepić do link, a w nazwie wyrzucić tylko ten pierwszy ciąg znaków (IMG:style_emoticons/default/smile.gif)

Troszkę bardziej skomplikowane to musi byc (IMG:style_emoticons/default/smile.gif)

wytłumaczę jeszcze raz zęby nie było w palu nazwa mam

czasem:
`nazwa` -> "forum php najlepsze forum php"
`link` -> "http://forum.php.pl"
a czasem
`nazwa` -> "http://forum.php.pl/ forum php najlepsze forum o php"
`link` -> ""

Pierwszy przypadek jest poprawny natomiast z drugiego muszę zrobić coś takiego jak w pierwszym w tym że muszę uwzględnić wszelkie możliwe typy url'i czyli http://host.pl http://host.pl/index/cos/tam.php?a=cos lub http://host.pl/index/zielony.html
Go to the top of the page
+Quote Post
Magic WWW
post
Post #4





Grupa: Zarejestrowani
Postów: 123
Pomógł: 32
Dołączył: 9.09.2010
Skąd: Brzeg

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


Mi się wydaje, że za pomocą samego MySQL tego nie zrobisz, potrzebna jest tutaj funkcja podobna do preg_mathc, będziesz musiał zrobić skrypt w PHP, który CI to wszystko ładnie zrobi, innej opcji jak na razie nie widzę (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Hpsi
post
Post #5





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


Własnie w php to nie jest problem (IMG:style_emoticons/default/tongue.gif) tylko mówie ze mam ograniczony dostep do serwera, dlatego sie pytam czy idzie to z poziomu sql zrobic (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
lessi
post
Post #6





Grupa: Zarejestrowani
Postów: 89
Pomógł: 12
Dołączył: 1.12.2009

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


Może przydadzą się funkcje REGEXP lub REPLACE

Ten post edytował lessi 28.06.2011, 11:23:05
Go to the top of the page
+Quote Post
Hpsi
post
Post #7





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


w sumie o regexp tez myslalem, dobra lessi - dzieki za pomoc delikatna, jeszcze tematu nie koncze takze (IMG:style_emoticons/default/wink.gif) cierpliwosci jesli chodzi o pomogl (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
lessi
post
Post #8





Grupa: Zarejestrowani
Postów: 89
Pomógł: 12
Dołączył: 1.12.2009

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


Dobra wpadłem na pewien pomysł, bo nie udały mi się kombinacje z wyrażeniami regularnymi.
Jeżeli chodzi o link
Działa tylko jak powiedziałeś jeżeli na początku jest link i potem spacja

  1. UPDATE tabela SET link = SUBSTRING_INDEX(nazwa, ' ', 1)

To wszystko możemy ograniczyć dając

  1. UPDATE tabela SET link = SUBSTRING_INDEX(nazwa, ' ', 1) WHERE nazwa LIKE "http://%"


Mamy w ten sposób załatwiony problem linku.
Pozostała jeszcze sprawa że link nie może być w nazwie.
Tu już potrzeba wyrażeń regularnych. Próbowałem inaczej, jednakże to tylko eliminuje z przodu http://
Zostają jednakże wszelkie ukośniki

  1. UPDATE tabela SET nazwa = REPLACE ( `nazwa` , 'http://', '' ) WHERE nazwa LIKE "http://%"



Ten post edytował lessi 28.06.2011, 12:10:19
Go to the top of the page
+Quote Post
Hpsi
post
Post #9





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


thanks tak nie kombinowałem (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
lessi
post
Post #10





Grupa: Zarejestrowani
Postów: 89
Pomógł: 12
Dołączył: 1.12.2009

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


Trochę kombinowania i cierpliwości i coś wyszło. Nie wiem czy da się tak jak w php użyć do tego problemu wyrażeń regularnych. Raczej nie.
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: 16.09.2025 - 00:10