Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

Kan syntaxfout niet vinden

Pagina: 1
Acties:
  • 310 views

Verwijderd

Topicstarter
Ik heb een boek geleend van de bieb (Wrox PHP) en ben begonnen met de oefeningen uit het boek te doen.

Het betreft een kleine testwebsite waarbij ik een lijstje met films heb, en daarbij op de titel van de film zou moeten kunnen klikken en dan details over die film te zien zou moeten krijgen. Dat lukt echter niet.

Ik heb de code EXACT zo geschreven als in het boek aangegeven staat maar toch krijg ik een syntaxfout.
Ik zit al twee uur mijn hoofd tegen de muur te slaan en het is nu niet leuk meer.

Misschien dat mijn mede-tweakers de fout kunnen vinden.

Hieronder de code en alvast bedankt!

Hugo.

N.B. De fout zit hem waarschijnlijk in movie_details.php.

De betreffende foutmelding is:
code:
1
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3


Tabel met films: (table2.php) (Deze werkt, dus zou dan toch foutloos moeten zijn?):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?php
// Define functions that will turn id numbers into labels:

// 1: Take in the id of a director and return his/her full name:
    function get_director($director_id) {

        global $db;
        $query = 'SELECT people_fullname
                  FROM people
                  WHERE people_id = ' . $director_id;
        
        $result = mysql_query($query, $db) or die(mysql_error($db));
        $row = mysql_fetch_assoc($result);
        extract($row);
        return $people_fullname;
        }
        
// 2: Take in the id of a lead actor and return his/her full name:
    function get_leadactor($leadactor_id) {

        global $db;
        $query = 'SELECT people_fullname
                  FROM people
                  WHERE people_id = ' . $leadactor_id;
        
        $result = mysql_query($query, $db) or die(mysql_error($db));
        $row = mysql_fetch_assoc($result);
        extract($row);
        return $people_fullname;
        }
        
// 3: Take in the id of a movie type and return the meaningful textual description:
    function get_movietype($type_id) {

        global $db;
        $query = 'SELECT movietype_label
                  FROM movietype
                  WHERE movietype_id = ' . $type_id;
        
        $result = mysql_query($query, $db) or die(mysql_error($db));
        $row = mysql_fetch_assoc($result);
        extract($row);
        return $movietype_label;
        }
?>


<?php
// Connect to MySQL:
$db = mysql_connect('localhost','bp6am','bp6ampass') or die('Unable to connect.');

// Select correct database:
mysql_select_db('moviesite', $db) or die(mysql_error($db));

// Retrieve information:
$query = 'SELECT movie_id, movie_name, movie_year, movie_director, movie_leadactor, movie_type
          FROM movie
          ORDER BY movie_name ASC, movie_year DESC';
$result = mysql_query($query, $db) or die(mysql_error($db));

// Determine number of rows in result:
$num_movies = mysql_num_rows($result);
?>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Table 1</title>
</head>

<body>

<?php
$table = <<<ENDHTML
<div style="text-align: center;">
<h2>Movie Review Database</h2>
<table border="1" cellpadding="2" cellspacing="2" style="width: 70%; margin-left: auto; margin-right: auto;">
<tr>
<th>Movie Title</th>
<th>Year of Release</th>
<th>Movie Director</th>
<th>Movie Lead Actor</th>
<th>Movie Type</th>
</tr>
ENDHTML;

// Loop through the results and use above defined functions to turn id's into labels:
while ($row = mysql_fetch_assoc($result)) {
extract($row);
$director = get_director($movie_director);
$leadactor = get_leadactor($movie_leadactor);
$movietype = get_movietype($movie_type);

$table .= <<<ENDHTML
<tr>
<td><a href="movie_details.php?movie_id=$movie_id" title="Click here to find out more about $movie_name">$movie_name</a></td>
<td>$movie_year</td>
<td>$director</td>
<td>$leadactor</td>
<td>$movietype</td>
</tr>
ENDHTML;

}

$table .= <<<ENDHTML
</table>
<p>$num_movies Movies</p>
</div>
ENDHTML;

echo $table;
?>

</body>
</html>


Film Details (movie_details.php) (Zodra ik naar deze pagina ga krijg ik de syntaxfout):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php
// Function to turn director id into full name:
function get_director($director_id) {
    
    global $db;
    $query = 'SELECT people_fullname
              FROM people
              WHERE people_id = ' . $director_id;
    $result = mysql_query($query, $db) or die(mysql_error($db));

    $row = mysql_fetch_assoc($result);
    extract($row);
    return $people_fullname;
}

// Function to turn actor id into full name:
function get_leadactor($leadactor_id) {
    
    global $db;
    $query = 'SELECT people_fullname
              FROM people
              WHERE people_id = ' . $leadactor;
    $result = mysql_query($query,$db) or die(mysql_error($db));
    
    $row = mysql_fetch_assoc($result);
    extract($row);
    return $people_fullname; 
}

// Function to display textual movietype description:
function get_movietype($type_id) {
    
    global $db;
    $query = 'SELECT movietype_label
              FROM movietype
              WHERE movietype_id = ' . $type_id;
    $result = mysql_query($query,$db) or die(mysql_error($db));
    
    $row = mysql_fetch_assoc($result);
    extract($row);
    return $movietype_label;
}
    
// Function to calculate profits of the movie:
function calculcate_differences($takings, $cost) {
    
    $difference = $takings - $cost;
    
    if ($difference < 0) {
        $color = 'red';
        $difference = '$' . abs($difference) . 'million';
    }
    elseif ($difference > 0) {
        $color = 'green';
        $difference = '$' . $difference . 'million';
    }
    else {
        $color = 'blue';
        $difference = 'broke even';
    }

    return '<span style="color: ' . $color . ';">' . $difference . '</span>';
    }   
    
// Connect to MySQL database:
$db = mysql_connect('localhost','bp6am','bp6ampass') or die('Unable to connect.');

// Select correct database:
mysql_select_db('moviesite',$db) or die(mysql_error($db));

// Retrieve information:
$query = 'SELECT movie_name, movie_year, movie_director, movie_leadactor, movie_type, movie_running_time, movie_cost, movie_takings
          FROM movie
          WHERE movie_id = ' . $GET_['movie_id'];
$result = mysql_query($query,$db) or die(mysql_error($db));
$row = mysql_fetch_assoc($result);

$movie_name         = $row['movie_name'];
$movie_director     = get_director($row['movie_director']);
$movie_leadactor    = get_leadactor($row['movie_leadactor']);
$movie_year         = $row['movie_year'];
$movie_running_time = $row['movie_running_time'] . ' mins.';
$movie_takings      = $row['movie_takings'] . ' million';
$movie_cost         = $row['movie_cost'] . ' million';
$movie_health       = calculate_differences($row['movie_takings'],$row['movie_cost']);

// Display the information:
echo <<<ENDHTML
<html>
    <head>
        <title>Details - $movie_name</title>
    </head>
<body>
 <div style="text-align: center;">
  <h2>$movie_name</h2>      
  <h3><em>Details</em></h3>
  <table cellpadding="2" cellspacing="2" style="width:70%; margin-left:auto; margin-right:auto;">
    <tr>
     <td><strong>Title</strong></td>
     <td>$movie_name</td>
     <td><strong>Release Year</strong></td>
     <td>$movie_year</td>
    </tr>
    <tr>
     <td><strong>Movie Director</strong></td>
     <td>$movie_director</td>
     <td><strong>Cost</strong></td>
     <td>$movie_cost<td/>
    </tr>
    <tr>
     <td><strong>Lead Actor</strong></td>
     <td>$movie_leadactor</td>
     <td><strong>Takings</strong></td>
     <td>$movie_takings<td/>
    </tr>
    <tr>
     <td><strong>Running Time</strong></td>
     <td>$movie_running_time</td>
     <td><strong>Health</strong></td>
     <td>$movie_health</td>
    </tr>
  </table>
 </div>
</body>
</html>
ENDHTML;
?>


Sorry voor de lange post.

Verwijderd

Wat een vreselijke code. Zo werk je niet met relationele databases.

Je kunt in table2.php met een enkele query alle gewenste informatie opvragen:
SQL:
1
2
3
4
5
6
7
8
9
10
SELECT     movie_id, movie_name, movie_year,
           director.people_fullname AS director_name,
           actor.people_fullname AS actor_name,
           movietype_label
FROM       movie
INNER JOIN people AS director ON movie.movie_director = director.people_id
INNER JOIN people AS actor ON movie.movie_leadactor = actor.people_id
INNER JOIN movietype ON movie.movie_type = movietype.movietype_id
ORDER BY   movie_name ASC,
           movie_year DESC


De tweede pagina kan met dezelfde query werken, met als toevoeging: WHERE movie_id = (nummertje hier)

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 21:19

The Eagle

I wear my sunglasses at night

Devschuur® Beleid al gezien?

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


Verwijderd

Topicstarter
@ Cheatah: Ik doe ook maar wat de oefeningen in het boek me vertellen. Maar ik neem aan dat ze zo uitgebreid de code schrijven om het overzichtelijk te houden voor de beginnende lezer. Op die manier kun je de stappen terugzien en bedenken waarom iets gebeurt.

Anders weet ik het ook niet hoor :P maar als je een beter boek kunt aanbevelen dan hoor ik het graag van je !!!

@ The Eagle: Dank voor die link, ik zal daar allereerst eens beginnen met lezen. Ik hoop wel dat admins mijn post niet direct deponeren :P

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Dat ga ik dus wel doen. Ga eerst maar eens zelf debuggen en uitvinden waar je probleem in zit. Je dumpt nu 250 regels code en verwacht dat wij even een syntaxfout voor je gaan debuggen, terwijl syntaxfouten per definitie fouten zijn die je zelf kan uitvinden. Daarnaast staat je topic ook nog eens op de foute plek, Waar hoort mijn topic? staat niet voor niks bovenaan elk forum in de Devschuur.

Ga eerst maar even debuggen en reduceer je probleem naar een paar regels. Hoe je dat doet staat in de link van The Eagle hierboven. Als je dat gedaan hebt kun je je probleem waarschijnlijk zelf al oplossen maar als je er echt niet uitkomt kun je dan alsnog een nieuw topic openen op de goeie plek. Maar dan niet met 250 regels code. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Dit topic is gesloten.