Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [regex][mysql] Problem z wpisaniem danych do bazy
Forum PHP.pl > Forum > PHP
Dinth
Witam. Od wczoraj kombinuje z prostym kodem
  1. <?php
  2. preg_match('/(http://)?(www.)?([w.]+).*q=([ws+]*).*/',$http_referer, $matches);
  3.  
  4. $query = "INSERT INTO wejscia (`strona`, `wyszukiwarka` ,`slowo` ,`datetime`) VALUES ('".$page_id."','".$matches[3]."','".$matches[4]."','".time()."')";
  5. ?>


Niestety do tablicy wpisywane sa rekordy zawierające jedynie $page_id sad.gif Reszta danych się gdzieś gubi sad.gif

Regex powinnien wyciągać dane ze stringów typu: "http://www.google.pl/search?hl=pl&q=pozycjonowanie+stron&btnG=Szukaj+w+Google&lr", a query powinno wrzucac z tego do bazy dane: google->wyszukiwarka oraz pozycjonowanie+stron->slowo.
Prym
proponuje przetestować wyrażenie regularne tutaj Sprawdzacz wyrażeń regularnych bo na 90% jesli nie ma wpisów z matches to wyrazenie masz padniete
Dinth
Nie wiem czemu w poprzednim kodzie przez kopiuj-wklej zniknely mi z regexpa wyescapowane znaki blink.gif

Wyrazenie z wyescapowanymi znakami, takie jak mam w kodzie PHP, wedlug strony podanej przez ciebie zwraca:
  • http://www.google.pl/search?hl=pl&q=pozycjonowanie+stron&btnG=Szukaj+w+Google&lr
  • http://
  • www.
  • google
  • pozycjonowanie+stron
Prym
to wychodzi ze poprawnie wydobywa dane 3 i 4 punkt tablicy wskazuje to co chcesz, a mimo to nie masz nic w bazie ? to teraz pytanie cz y w zmiennej $http_referer masz to co trzeba winksmiley.jpg moze strzel echo $http_referer przed pregiem a po pregu zrob echo matcha 3 i 4 to zobaczysz czy poprawnie dane sie przebudowują bo tak to rzeczywiscie wyrazenie jest jako takie poprawne
Kod
(http:\/\/)?(www\.)?([\w]+).*q=([\w\s\+]*).*
Dinth
Problem z echo jest taki ze nie bardzo mam jak zrobic echo bo skrypt jest wywolany z JS z referrerem wyslanym jako _GET, ale wedlug narzedzia diagnozujacego elementy DOM referer jest wysylany poprawnie.

A czy INSERT INTO jest poprawny ? Moze uzylem jakis nawiasow zlych albo cos? Przeciez powinno przynajmniej time() wrzucac do komorki TIMESTAMP w bazie, a ta tez zostaje pusta.
Prym
hmm jesli wszelkie dane przekazuje poprawnie a nie ma zadnego wpisu do danych to pytanie czy skryptowi udaje sie wogle utworzyc polaczenie z baza. druga sprawa to to ze jesli nadales kolumnie datetime TIMESTAMP to pzy dodawaniu ta wartosc MUSI byc pusta - jest na automatycznie generowana w momencie dziłania na wierszu - pozatym format timestamp jesli sie nie myle to data i gdzina nie sama godzina wiec tu moze byc caly problem. primo spróbuj z pustym wpisem dodac wiersz do bazy
Kod
$query = "INSERT INTO wejscia (`strona`, `wyszukiwarka` ,`slowo` ,`datetime`) VALUES ('".$page_id."','".$matches[3]."','".$matches[4]."','')";

albo zamiast time dodac
Kod
date("Y-m-d H:i:s")
Dinth
Cytat(Prym @ 31.10.2007, 14:24:07 ) *
hmm jesli wszelkie dane przekazuje poprawnie a nie ma zadnego wpisu do danych to pytanie czy skryptowi udaje sie wogle utworzyc polaczenie z baza.


Rekord jest tworzony. Wartość $page_id jest dodawana do komorki "slowo". Reszta komorek zostaje pustych.

Cytat
druga sprawa to to ze jesli nadales kolumnie datetime TIMESTAMP to pzy dodawaniu ta wartosc MUSI byc pusta


Mimo wszystko zawsze jest rowna zero.
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.