Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL]problem z update w bazie
shtoc
post
Post #1





Grupa: Zarejestrowani
Postów: 128
Pomógł: 0
Dołączył: 18.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


mam taki kod
  1. <?PHP
  2. $pdo = new PDO('mysql:host=localhost;dbname=wrzuta', 'admin', 'xxx');
  3. $pdo -> query ('SET NAMES utf8');
  4. $sql = "select * from filmy where key is null limit 1";
  5. $statement = $pdo->query($sql);
  6.  
  7. $row = $statement->fetch(PDO::FETCH_ASSOC);
  8. unset($statement);
  9.  
  10. $adres=$row['web'];
  11. #$adres ='http://daria24.wrzuta.pl/film/wdKctZmPkJ/';
  12.  
  13. $url = curl_init($adres);
  14. curl_setopt($url, CURLOPT_USERAGENT, 'holmes/3.10.1 (OnetSzukaj/5.0; +http://szukaj.onet.pl)');
  15. curl_setopt($url, CURLOPT_RETURNTRANSFER, 1);
  16. curl_setopt($url, CURLOPT_CONNECTTIMEOUT, 5);
  17. curl_setopt($url, CURLOPT_HEADER, 0);
  18. $strona=curl_exec($url);
  19. #curl_close($url);
  20.  
  21. $DOM = new DOMDocument();
  22. @$DOM->LoadHTML(iconv("ISO-8859-2","UTF-8",$strona));
  23. $tablica = array();  #deklaracja tablicy
  24.  
  25. foreach ($DOM->getElementsByTagName('input') as $input)
  26. {
  27.    $id = $input->getAttribute('id');
  28.    if($id == 'new_cmnt_key')
  29.    {
  30.        $key = $input->getAttribute('value');
  31.    }
  32.  
  33. }
  34.  
  35. foreach ($DOM->getElementsByTagName('input') as $input)
  36. {
  37.    $id = $input->getAttribute('id');
  38.    if($id == 'link_do_pliku')
  39.    {
  40.        $web = $input->getAttribute('value');
  41.        #$web = str_replace('"http://', 'www.', $webe->nodeValue);
  42.  
  43.    }
  44.  
  45. }
  46. #var_dump($web);
  47. #exit;
  48. foreach ($DOM->getElementsByTagName('input') as $input)
  49. {
  50.    $id = $input->getAttribute('id');
  51.    if($id == 'miniatura_embed')
  52.    {
  53.        $object = $input->getAttribute('value');
  54.    }
  55.  
  56. }
  57. foreach ($DOM->getElementsByTagName('title') as $title)
  58. {
  59.    $tytul = str_replace('Wrzuta.pl - ', '', $title->nodeValue);
  60. }
  61.  
  62.  
  63. foreach ($DOM->getElementsByTagName('meta') as $meta)
  64. {
  65.    $tag = $meta->getAttribute('name');
  66.    if($tag == 'keywords')
  67.    {
  68.        $tagi = $meta->getAttribute('content');
  69.    }
  70. }
  71.  
  72.  
  73.    $sql = "INSERT INTO filmy(`tytul`, `tag`, `url`, `web`, `created_at`) VALUES(:tytul, :tag, :url, :web, :created_at)";
  74.    $statement = $pdo->prepare($sql);
  75.    $statement->bindValue(':tytul', $tytul, PDO::PARAM_STR);
  76.    $statement->bindValue(':tag', $tagi, PDO::PARAM_STR);
  77.     $statement->bindValue(':url', $object, PDO::PARAM_STR);
  78.    $statement->bindValue(':web', $web, PDO::PARAM_STR);
  79.   # $statement->bindValue(':key', $key, PDO::PARAM_STR);
  80.    $statement->bindValue(':created_at', date( 'Y-m-d H:i:s', time()), PDO::PARAM_STR);
  81.    $statement->execute();
  82.    var_dump($statement->errorInfo());
  83.  
  84.  
  85. $sql = "update filmy set key = :key where id = :id";
  86. $statement = $pdo->prepare($sql);
  87. $statement->bindValue(':key', $key, PDO::PARAM_STR);
  88. $statement->bindValue(':id', $row['id'], PDO::PARAM_INT);
  89. $statement->execute();
  90. ?>



i do tego baze :
id INT unsigned notnull auto_increment
tytul text notnull
tag text notnull
url text notnull
web text notnull
key text null
created_at datatime notnull

do bazy mam wrzucone 3 rekordy w ktorych podane jest :
id tytul url web created_at

i idea kodu jest pobranie 1 filmiku z bazy ktory nie ma uzupelnionego key
pobranie jego adresu i z adresu pobranie jego key i wpisanie go do bazy.

ale nie dziala siedze nad tym caly dzien i lipa:/
dostaje blad

Fatal error: Call to a member function fetch() on a non-object in C:\Program Files\WebServ\httpd\pobieranie4.php on line 7

prosze pomozcie jak ktos wie gdzie jest blad??
Go to the top of the page
+Quote Post
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(shtoc @ 8.12.2008, 15:51:13 ) *
Fatal error: Call to a member function fetch() on a non-object in C:\Program Files\WebServ\httpd\pobieranie4.php on line 7
Cytat
Fatal error Wywołanie funkcji fetch() na czymś co nie jest obiektem w pliku C:\Program Files\WebServ\httpd\pobieranie4.php w linii 7

Jaki wniosek Ci się nasuwa? Taki, że PDO::query() nie zwróciło obiektu klasy PDOStatement tak jak to miało się stać. Jakieś pomysły na debuggowanie?
1. Wpisz zapytanie w phpMyAdmina. Może coś jest z nim nie tak.
2. Zaraz po wykonaniu PDO::query() i jeszcze prze użyciem feralnego PDOStatement::fetch() skorzystaj z PDO::errorInfo(), żeby dowiedzieć się czy coś poszło źle.
Go to the top of the page
+Quote Post
shtoc
post
Post #3





Grupa: Zarejestrowani
Postów: 128
Pomógł: 0
Dołączył: 18.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


zrobilem tak :

  1. <?PHP
  2. echo '<pre>';
  3. $pdo = new PDO('mysql:host=localhost;dbname=wrzuta', 'admin', 'szymon69'); #połączenie z baza danych
  4. $pdo -> query ('SET NAMES utf8');
  5. $sql = "select * from filmy where key is null limit 1"; # pobranie 1 filmiku z bazy
  6. $statement = $pdo->query($sql);
  7.  
  8. print_r($pdo->errorInfo());
  9.  
  10. $row = $statement->fetch(PDO::FETCH_ASSOC);
  11.  
  12. unset($statement);
  13. ?>


i dostalem wynik :
Array
(
[0] => 42000
[1] => 1064
[2] => Something is wrong in your syntax obok 'key is null limit 1' w linii 1
)


Fatal error: Call to a member function fetch() on a non-object in C:\Program Files\WebServ\httpd\pobieranie4.php on line 11
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(shtoc @ 8.12.2008, 21:47:12 ) *
[2] => Something is wrong in your syntax obok 'key is null limit 1' w linii 1
No widzisz. Zapytanie jest niepoprawne. Dlaczego skoro składnia jest jak najbardziej OK?
Otóż dlatego, że każdy z silników bazodanowych ma pewną pulę zarezerwowanych słów. Zerknij na MySQL :: Reserved Words a dowiesz się że key jest na tej liście co oznacza, że musisz tą nazwę specyficznie zapisywać w zapytaniach.
Jak? Komentarze pod tekstem dadzą Ci odpowiedź.

---edytowane---
Podmieniłem link
~mike
Go to the top of the page
+Quote Post
shtoc
post
Post #5





Grupa: Zarejestrowani
Postów: 128
Pomógł: 0
Dołączył: 18.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


no fajnie szkoda ze jeden znika a 2 sie pojawia

Array
(
[0] => 00000
)
array(3) {
[0]=>
string(5) "23000"
[1]=>
int(1048)
[2]=>
string(33) "Kolumna 'tytul' nie może być null"
}
skad tu wogole sie bierzez tytul??

Ten post edytował shtoc 8.12.2008, 22:02:47
Go to the top of the page
+Quote Post
mike
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(shtoc @ 8.12.2008, 22:01:02 ) *
[2]=> string(33) "Kolumna 'tytul' nie może być null"
Skoro sobie założyłeś, że tytuł musi zawsze być to teraz zadbaj o to by był.
Jeśli nie uda Ci się go pobrać z pliku XML to wstaw jakiś inny, domyślny.

W liniach 58-61 masz bezcelową pętlę, wewntrz której jest tworzona zmienna $tytul, którą to później chcesz wstawić. Sprawdź dlaczego jest pusta.
Go to the top of the page
+Quote Post
webmaniak
post
Post #7





Grupa: Zarejestrowani
Postów: 371
Pomógł: 30
Dołączył: 14.04.2010

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


Witam!
Mam taki kod:
  1. <a href="admin.php?page=zmien&id='.$row['id'].'">[Zmien]</a>

oczywiście także jest switch który odwołuje się do wybranej funkcji.
Funkcja wygląda tak:
  1. function zmien($id)
  2. {
  3. $y=mysql_query("SELECT opublikowane FROM articles");
  4.  
  5. if($wyn['opublikowane']==1)
  6. {
  7. $zmien = mysql_query("UPDATE `articles` SET opublikowane='0' WHERE id='$id'");
  8. }
  9. else
  10. {
  11. $zmien = mysql_query("UPDATE `articles` SET opublikowane='1' WHERE id='$id'");
  12. }
  13.  
  14.  
  15. if(mysql_query($zmien)) {
  16.  
  17. header( "refresh:2;url=admin.php" );
  18. }
  19. else echo 'blad';
  20. }

Kłopot z tym że nie zmienia mi wszystkiego i od razu. Mianowicie jest ciągle problem z pierwszym artykułem. Mianowicie jeśli pierwszy artykuł nie zmienię to drugi też nie idzie zmienić. Jednak jeśli zmienię ów pierwszy to drugi też da się zmienić. Natomiast pierwszy mogę zmieniać swobodnie. Będę wdzięczny za wszelką pomoc.

Znowu trochę próbowałem coś zmienić i nadal nie potrafię nic wymyśleć. Bardzo proszę o pomoc, bo rozwiązanie jest chyba blisko, ale nie potrafię znaleźć błędu.

Ten post edytował webmaniak 25.05.2010, 17:24:12
Go to the top of the page
+Quote Post
zend
post
Post #8





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


  1. function zmien($id)
  2. {
  3. $y=mysql_query("SELECT opublikowane FROM articles WHERE `id`=" . ((int)$id));
  4.  
  5. if($wyn['opublikowane']==1)
  6. {
  7. $zmien = mysql_query("UPDATE `articles` SET opublikowane='0' WHERE id='$id'");
  8. }
  9. else
  10. {
  11. $zmien = mysql_query("UPDATE `articles` SET opublikowane='1' WHERE id='$id'");
  12. }
  13.  
  14.  
  15. if(mysql_query($zmien)) {
  16.  
  17. header( "refresh:2;url=admin.php" );
  18. }
  19. else echo 'blad';
  20. }


Brakowało Ci WHERE w seleccie
Go to the top of the page
+Quote Post
webmaniak
post
Post #9





Grupa: Zarejestrowani
Postów: 371
Pomógł: 30
Dołączył: 14.04.2010

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


Zrobiłem tak:
  1. $y=mysql_query("SELECT * FROM articles WHERE id=".((int)$id)."");

i ... działa (IMG:style_emoticons/default/guitar.gif) (IMG:style_emoticons/default/biggrin.gif) jesteś (IMG:style_emoticons/default/Rkingsmiley.png) . Dzięki bo się z tym męczyłem i w końcu mogę się zająć dalszą częścią (IMG:style_emoticons/default/smile.gif) Jeszcze raz dziękuję.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 17:30