Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Pomoc w php oraz MySQL
Forum PHP.pl > Forum > Przedszkole
mpablo85
Witam uczę się dopiero kupiłem książkę php5, MySQL, apache od podstaw i utknąłem w rozdziale 4 - Wyświetlanie danych w PHP, nie wiem dlaczego pokazuje mi się taki błąd, przy uruchomieniu skryptu:"Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\usr\krasnal\www\testy\movie_details.php on line 82", nie wiem co jest grane wszystko do tej pory wychodziło dobrze. Poniżej przedstawiam cały kod:

CODE
$link = mysql_connect("localhost","root","root")
or die(mysql_error());
mysql_select_db("moviesite")
or die (mysql_error());

//Funkcja obliczająca, czy film okazał sie kasowym sukcesem czy raczej sromotną porażką
function calculate_differences($takings, $cost) {
$difference = $takings - $cost;
//LINIA 10
if ($difference < 0) {
$difference = substr($difference, 1);
$font_color = 'red';
$profit_or_loss = "$" . $difference . "m";
} else if ($difference > 0) {
$font_color ='green';
$profit_or_loss = "$" . $difference . "m";
} else {
$font_color = 'blue';
$profit_or_loss = "Równowaga"; //LINIA 20
}
return "" . $profit_or_loss . "";
}

//Funkcja pobierająca imie i nazwisko rezysera z tabeli people
function get_director() {
global $movie_director;
global $director;

$query_d = "SELECT people_fullname " . //LINIA 30
"FROM people " .
"WHERE people_id='$movie_director'";
$results_d = mysql_query($query_d)
or die(mysql_error());
$row_d = mysql_fetch_array($results_d);
extract($row_d);
$director = $people_fullname;
}

//Funkcja pobierajaca imie i nazwisko glownego aktora z tabeli "people" //LINIA 40
function get_leadactor() {
global $movie_leadactor;
global $leadactor;

$query_a = "SELECT people_fullname " .
"FROM people " .
"WHERE people_id='$movie_leadactor'";
$results_a = mysql_query($query_a)
or die(mysql_error());
$row_a = mysql_fetch_array($results_a); //LINIA 50
extract($row_a);
$leadactor = $people_fullname;
}

$movie_query = "SELECT * FROM movie " .
"WHERE movie_id='" . $_GET['movie_id'] . "'";
$movie_result = mysql_query($movie_query, $link)
or die(mysql_error());

$movie_table_headings=<<

Tytuł filmu
Rok produkcji
Reżyser
Główny aktor
Czas trwania
Zysk lub strata

EOD;
//LINIA 70
$review_table_headings=<<

Data wystawienia
Tytuł recenzji
Recenzent
Treść recenzji
Ocena

EOD;


while($review_row = mysql_fetch_array($review_result)) { //LINIA 82
$review_flag =1;
$review_title[] = $review_row['review_name'];
$reviewer_name[] = ucwords($review_row['review_reviewer_name']);
$review[] = $review_row['review_comment'];
$review_date[] = $review_row['review_date'];
$review_rating[] = generate_ratings($review_row['review_rating']);
}

$i = 0;
$review_details = '';
while ($i
$review_details .=<<

$review_date[$i]
$review_title[$i]
$review_name[$i]
$review[$i]
$review_rating[$i]

EOD;
$i++;
}

while ($row = mysql_fetch_array($movie_result)) {
$movie_name = $row['movie_name'];
$movie_director = $row['movie_director'];
$movie_leadactor = $row['movie_leadactor'];
$movie_year = $row['movie_year'];
$movie_running_time = $row['movie_running_time']." min. ";
$movie_takings = $row['movie_takings'];
$movie_cost = $row['movie_cost'];

//pobranie imienia i nazwiska reżysera z tabeli "people"
get_director();
//pobranie imienia i nazwiska glownego aktora z tabeli people
get_leadactor();

}

$review_query = "SELECT * FROM reviews " .
"WHERE review_movie_id ='" . $_GET['movie_id'] . "' " .
"ORDER BY review_date DESC";

$review_result = mysql_query($review_query, $link)
or die(mysql_error());

$movie_health = calculate_differences($movie_takings, $movie_cost);
$page_start =<<


Szczegóły i recenzja dla: $movie_name


EOD;

$movie_details =<<

cellpadding="2" align="center">


$movie_name: szczegóły


$movie_table_headings
$movie_name
$movie_year
$director
$leadactor
$movie_running_time
$movie_health






EOD;

if ($review_flag) {
$movie_details .=<<

$review_table_headings
$review_details

EOD;
}

$page_end =<<


EOD;
$detailed_movie_info =<<
$page_start
$movie_details
$page_end
EOD;

echo $detailed_movie_info;
mysql_close();

function generate_ratings($review_rating) {
$movie_rating = '';
for($i=0; $i<$review_rating; $i++) {
$movie_rating .= " ";
}
return $movie_rating;
}
?>
MMX3
1. nie polecam krasnala, dużo rzeczy działających pod krasnalem nie działa na produkcyjnych serwerach.
2. Na pewno albo masz pusty result z mysql_query(), albo błąd w składni sql
proste rozwiązanie za zapytaniem dodaj:
  1. <?php
  2. echo('<pre>'.print_r($result,1).'</pre>'.mysql error());
  3. ?>

jeżeli błędu nie będzie w sql'ce to zmień toszkę strukturę
  1. <?php
  2. $result = mysql_query($sql);
  3. if($result) {
  4. //wyświetlaj dane
  5. }else{
  6. // wynik pusty albo błąd sql
  7. }
  8. ?>

pozdro
mpablo85
1. Wiem, że krasnal nie jest za bardzo ok, bo już raz miałem z nim problem - po kilku dniach użytkowania okazało się ze nie mogę się zalogować, wiec musiałem odinstalować i zainstalowac jeszcze raz. podobno vertigoserv jest bardzo dobre, jednak po zainstalowaniu nie mogłem sobie dac z nim rady, nigdzie nie moglem znalesc zadych opisów dzialania, instrukcji itp

2. Dziekuje bardzo za pomoc, ale dopiero sie ucze php i mysql, wiec czy mozesz ma dokladniej napisac gdzie mam zmienic swoj kod, przez te błedy juz sam za bardzo nie wiem co i jak, dodam jeszcze ze znalazlem, strone z wszystkimi kodami z tej ksiażki, strona autorstwa wydawnictwa, i powiem Ci, że jak przekopiowałem ten orginalny kod nie napisany przezemnie bład był taki sam, co o tym myslisz? jak mozesz prosze o uściślenie gdzie mam dokonać zmian

pozdrawiam, z góry dziekuje za pomoc
bregovic
Ale dzióbek, na linii #82 odnosisz się do zmiennej $review_result - tą zmienną ustawiasz dopiero na linii #116 - więc masz tam jakąś kaszankę... Możesz podać nam linka do tej strony o której mówisz? Z kodem tego konkretnego przykładu?
mpablo85
http://mln-web.cs.odu.edu/~mln/code/ch04.htm - na samym dole, ostatni kod "Try It Out 12"


Ale nawet jak się uparłem i na sztywno przekopiowałem oryginalny kod do swojego pliku(oczywiście zmieniłem login, hasło oraz bazę na swoje) to nadal ma taki sam błąd z tą różnicą, że tym razem w linii 112. Zaznaczam że wszystkie wcześniejsze skrypty działały mi poprawnie, dokładnie tak jak opisano w książce.
bregovic
No, oczywiście errara humanum i tak dalej, ale IMHO to ten kod nie będzie działał. Nie można odnieść się do zmiennej przed jej deklaracją. Używając kodu z podanego linka jako referencji, zamień linię 112-131:
  1. <?php
  2. while($review_row = mysql_fetch_array($review_result))
  3. {
  4.     $review_flag =1;
  5.     $review_title[] = $review_row['review_name'];
  6.     $reviewer_name[] = ucwords($review_row['review_reviewer_name']);
  7.     $review[] = $review_row['review_comment'];
  8.     $review_date[] = $review_row['review_date'];
  9.     $review_rating[] = generate_ratings($review_row['review_rating']);
  10. }
  11.  
  12. $review_query = "SELECT
  13.                         *
  14.               FROM
  15.                         reviews
  16.               WHERE
  17.                          review_movie_id ='".$_GET['movie_id']."'
  18.               ORDER BY
  19.                          review_date DESC";
  20.  
  21. $review_result = mysql_query($review_query,$link) or die(mysql_error());
  22. ?>

Na:
  1. <?php
  2. $review_query = "SELECT
  3.                         *
  4.               FROM
  5.                         reviews
  6.               WHERE
  7.                          review_movie_id ='".$_GET['movie_id']."'
  8.               ORDER BY
  9.                          review_date DESC";
  10.  
  11. $review_result = mysql_query($review_query,$link) or die(mysql_error());
  12.  
  13. while($review_row = mysql_fetch_array($review_result))
  14. {
  15.     $review_flag =1;
  16.     $review_title[] = $review_row['review_name'];
  17.     $reviewer_name[] = ucwords($review_row['review_reviewer_name']);
  18.     $review[] = $review_row['review_comment'];
  19.     $review_date[] = $review_row['review_date'];
  20.     $review_rating[] = generate_ratings($review_row['review_rating']);
  21. }
  22. ?>

Ale nie przeczytałem całego kodu - to straszna kaszanka, może tam być więcej błędów.
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.