Waar zit hier een syntax fout??
Regel 7 genereerd deze fout: Parse error: syntax error, unexpected 'gender' (T_STRING)
Code (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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
if($numberCombination > 0) {
for($i=0; $i<$numberCombination; $i++) {
$Row= mysqli_fetch_assoc($Result);
$riderNFtxt ='<img border="0" src="images/Flags/".$Row['competing_for_country'].".png" height="20"> <font size="+4"><b>'.$country_name.'</b></font> ('.$Row['competing_for_country'].')<br />
if($Row['gender'] == "Female") $genderHorse = "(M)";
elseif($Row['gender'] == "Male" && $Row['is_castrated'] == "yes") $genderHorse = "(G)";
elseif($Row['gender'] == "Male" && $Row['is_castrated'] == "unknown") $genderHorse = "(?)";
else $genderHorse = "(S)";
$html .= $countryName = $Row['e_country'];
$tbl .= ' <tr>
<td width="30">'.$Row['compNumber'].'</td>
<td width="170">'.ucwords(strtolower($Row['first_name'])).' '.ucwords(strtolower($Row['family_name'])).'</td>
<td width="200">'.ucwords(strtolower($Row['complete_name'])).' '.$genderHorse.'</td>
<td width="310">'.ucwords(strtolower($Row['owner_name'])).'</td>
<td width="">'.$riderNFtxt.'</td>
</tr>';
} // end for-loop
} // end records present
?>
if($numberCombination > 0) {
for($i=0; $i<$numberCombination; $i++) {
$Row= mysqli_fetch_assoc($Result);
$riderNFtxt ='<img border="0" src="images/Flags/".$Row['competing_for_country'].".png" height="20"> <font size="+4"><b>'.$country_name.'</b></font> ('.$Row['competing_for_country'].')<br />
if($Row['gender'] == "Female") $genderHorse = "(M)";
elseif($Row['gender'] == "Male" && $Row['is_castrated'] == "yes") $genderHorse = "(G)";
elseif($Row['gender'] == "Male" && $Row['is_castrated'] == "unknown") $genderHorse = "(?)";
else $genderHorse = "(S)";
$html .= $countryName = $Row['e_country'];
$tbl .= ' <tr>
<td width="30">'.$Row['compNumber'].'</td>
<td width="170">'.ucwords(strtolower($Row['first_name'])).' '.ucwords(strtolower($Row['family_name'])).'</td>
<td width="200">'.ucwords(strtolower($Row['complete_name'])).' '.$genderHorse.'</td>
<td width="310">'.ucwords(strtolower($Row['owner_name'])).'</td>
<td width="">'.$riderNFtxt.'</td>
</tr>';
} // end for-loop
} // end records present
?>
Het enige wat ik mij kan indenken wat deze fout veroorzaakt is $Row['gender'] maar deze waarde is aanwezig. Ziet iemand waar het dan fout kan gaan??
Gewijzigd op 23/07/2017 19:30:55 door Harry H Arends
Als je al naar de code highlight van je eigen code hierboven kijk zie je al wat er fout gaat (in de regel $riderNFtxt = ... gaat het niet goed met de quootjes).
Ik weet niet welk editor je nu gebruikt, maar als je bijvoorbeeld Notepad++ met syntax highlighting gebruikt, zie je dit meteen al in je editor.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$imageFile = $_SERVER['DOCUMENT_ROOT'];//
$imageFile .= "event\images\Flags\" ;
$imageFile .=$Row['competing_for_country'];
$riderNFtxt ='<img border="0" src=".$imageFile.' height="20"> <font size="+4"><b>'.$country_name.'</b></font> ('.$Row['competing_for_country'].")<br />";
?>
$imageFile = $_SERVER['DOCUMENT_ROOT'];//
$imageFile .= "event\images\Flags\" ;
$imageFile .=$Row['competing_for_country'];
$riderNFtxt ='<img border="0" src=".$imageFile.' height="20"> <font size="+4"><b>'.$country_name.'</b></font> ('.$Row['competing_for_country'].")<br />";
?>
wat is er nu fout in regel 3 waardoor regel 4 en volgend niet mee doet??
Gewijzigd op 23/07/2017 20:04:06 door Harry H Arends
En in regel 6 ontbreekt een " om de src=" mee af te sluiten.
Het lijkt wel therapie.
En font-tags zijn inmiddels behoorlijk bejaard. Gebruik gewoon CSS om alles te stylen.
- Ariën - op 23/07/2017 20:28:31:
En font-tags zijn inmiddels behoorlijk bejaard. Gebruik gewoon CSS om alles te stylen.
Ik ben niet zeker of TCPDF wel goed werkt met CSS en dan moet ik weer een kunstje leren. Ben op dit moment allang blij dat mij dit lukt met hulp
Of heeft TCPDF zelf een method voor font-sizes?
Code (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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
<?php
// Vul hier een rapport specifiek clausule in.
// In dit rapport gaat het om welke combinaties hebben een onderkomen in de caravan nodig
$sqlCombiWHERE = " WHERE 2010Combination.horseFEIid = '".$_GET['horseFEIid']."'";
$report = $_GET['report']; // report name/template
$horseID = $_GET['horseFEIid']; // Horse FEI passport number/id
$sqlCombiBASIC = "
SELECT person.*, horse.*, 2010Combination.*, country.* , country.*
FROM FEIPerson AS person
JOIN 2010Combination ON person.fei_id = 2010Combination.personFEIid
JOIN FEIHorse horse ON horse.fei_id = 2010Combination.horseFEIid
JOIN country ON country.ISO_A3 = person.competing_for_country ";
$sqlCombiORDER = "
ORDER BY person.competing_for_country, 2010Combination.compNumber ASC "; // not always neede, can do no harm
$sqlCombination = $sqlCombiBASIC . $sqlCombiWHERE . $sqlCombiORDER;
if(!$Result = mysqli_query($dblink, $sqlCombination)) {
$html = "There is een error opening table for ". $report. "; ".mysqli_error($dblink)."<br />";
} else {
$numberCombination = mysqli_affected_rows($dblink); // must be at least 1
// ---------------------------------------------------------
// Template layout starts here
$pdf->setJPEGQuality(75); // set JPEG quality
$pdf->SetFont('helvetica', '', 12);// set font
// set some text to print
if($numberCombination < 0)
{ // report some error
}
elseif($numberCombination > 0)
{
$pdf->AddPage();// add a page
$Row = mysqli_fetch_assoc($Result);
$countryFlag = 'images/Flags/'.$Row['e_country'].'.png';
// $pdf->Cell(0,23, '','N',1,'L');
$html = '<table border="1" width="100%" cellpadding="10"><tr><td>';
$html .= '<table border="0" width="100%">
<tr>
<td nowrap="nowrap">';
// This section changed on August 5th 2014
if($Row['is_waitingList'] == 'Yes' ) {
$html .= 'On WAITING-list';
} else {
if($Row['is_nc'] == 'Yes' ) {
$html .= 'Horse is NON competing';
}
else {
$html .= 'Combination is competing' ;
}
}
// End changed section
$html .= ' for:<p STYLE="font-size: 18pt;">'.$Row['compNumber'].'</p> </td>
<td>'.$Row['competing_for_country'].' ( '.$RowC['e_country'].')</td>
<td><img src="'.$countryFlag.'" border="0" height="80" /><br /></td>
</tr>
</table>';
// Get the Horse data
$DOBE = explode('-',$Row['date_birth']);
$date_birth = $DOBE[2]."-".$DOBE[1]."-".$DOBE[0];
$age = GetAge($Row['date_birth'], $Row['date_death']);
if($Row['gender'] == "Female") { $gender = "Mare";}
elseif($Row['gender'] == "Male") {
if($Row['is_castrated'] == "yes") { $gender = "Gelding";}
elseif($Row['is_castrated'] == "no") {$gender = "Stalion";}
else {$gender = "Unknown";}
} else { $gender = "Unknown";}
$html .= '<table border="0" width="100%">
<tr><td widtd="20%">Horse name</td><td>'.$Row['complete_name'].'</td></tr>
<tr><td>FEI id</td><td>'.$Row['fei_id'].'</td></tr>
<tr><td>Gender</td><td>'.$gender.'</td></tr>
<tr><td>Color</td><td>'.$Row['color'].'</td></tr>
<tr><td>Age</td><td>'.$Row['date_birth'].' / '.$age.'</td></tr>
<tr><td>Owner</td><td>'.$Row['owner_name'].' ( '.$Row['owner_nationality'].' )</td></tr>
<tr><td></td><td></td></tr>
</table>';
$DOBE = explode('-',$Row['date_birth']);
$date_birth_p = $DOBE[2]."-".$DOBE[1]."-".$DOBE[0];
$age = GetAge($Row['date_birth_p'], $Row['date_death']);
if($Row['gender_p'] == "Male") { $name="Mr. ";} else { $name="Ms. ";}
$name .= $Row['first_name'].' '.ucfirst(strtolower($Row['family_name']));
$html .= '<table border="0" width="100%">
<tr><td widtd="20%">Rider name</td><td>'.$name.'</td></tr>
<tr><td>FEI id</td><td>'.$Row['personFEIid'].'</td></tr>
<tr><td>Date of Birth</td><td>'.$Row['date_birth_p'].' ( '.$age.' )</td></tr>
<tr><td>Mobile</td><td>+'.$Row['e_private_mobile'].' </td></tr>
<tr><td>Private E-mail</td><td>'.$Row['e_private_email'].' </td></tr>
<tr><td></td><td></td></tr>
</table>';
$html .= '</td></tr><tr><td>';
$html .= '<table border="0" width="100%">
<tr><td widtd="20%">Bedding</td><td>'.$Row['horseBedding'].'</td></tr>
<tr><td>Arrival date</td><td>'.$Row['arivalPeriod'].'</td></tr>
<tr><td>Departure date</td><td>'.$Row['departurePeriod'].'</td></tr>
<tr><td>Qualification</td><td>'.$Row['combinationNominate'].'</td></tr>
<tr><td>Payment by</td><td>'.$Row['paymentType'].'</td></tr>
<tr><td>Rider stays in HorseBox</td><td>'.$Row['stayHorseBox'].'</td></tr>';
$missingBox = '<br /><br />____________________';
if($Row['stayHorseBox'] == "No") {
$html .='<tr><td>Requires bed in B-Boekelo</td><td>'.$Row['appartmentBB'].'</td></tr>'; }
$html .= '<tr><td></td><td></td></tr>
<tr><td>Groom</td><td>';
if($Row['nameGroom'] != "")
{ $html .= $Row['nameGroom']; }
else{ $html .= $missingBox;}
$html .= ' ('.$Row['genderGroom'].')</td></tr>
<tr><td>Cell Groom</td><td>+';
if($Row['cellGroom'] != "")
{ $html .= $Row['cellGroom']; }
else{ $html .= $missingBox;}
$html .= '</td></tr>
<tr><td>Accomodation in caravan</td><td>'.$Row['accomGroom'].'</td></tr>
<tr><td></td><td></td></tr>
</table>';
$html .= '<table border="0" width="85%">
<tr><td><b>Comments</b><br /><br /><br /><br /></td></tr><tr><td>'.$Row['comment_c'].'</td></tr>
</table>';
$html .= '</td></tr></table>';
$pdf->writeHTML($html, true, false, true, false, ' ');
}
$report .= $horseID;
}
?>
// Vul hier een rapport specifiek clausule in.
// In dit rapport gaat het om welke combinaties hebben een onderkomen in de caravan nodig
$sqlCombiWHERE = " WHERE 2010Combination.horseFEIid = '".$_GET['horseFEIid']."'";
$report = $_GET['report']; // report name/template
$horseID = $_GET['horseFEIid']; // Horse FEI passport number/id
$sqlCombiBASIC = "
SELECT person.*, horse.*, 2010Combination.*, country.* , country.*
FROM FEIPerson AS person
JOIN 2010Combination ON person.fei_id = 2010Combination.personFEIid
JOIN FEIHorse horse ON horse.fei_id = 2010Combination.horseFEIid
JOIN country ON country.ISO_A3 = person.competing_for_country ";
$sqlCombiORDER = "
ORDER BY person.competing_for_country, 2010Combination.compNumber ASC "; // not always neede, can do no harm
$sqlCombination = $sqlCombiBASIC . $sqlCombiWHERE . $sqlCombiORDER;
if(!$Result = mysqli_query($dblink, $sqlCombination)) {
$html = "There is een error opening table for ". $report. "; ".mysqli_error($dblink)."<br />";
} else {
$numberCombination = mysqli_affected_rows($dblink); // must be at least 1
// ---------------------------------------------------------
// Template layout starts here
$pdf->setJPEGQuality(75); // set JPEG quality
$pdf->SetFont('helvetica', '', 12);// set font
// set some text to print
if($numberCombination < 0)
{ // report some error
}
elseif($numberCombination > 0)
{
$pdf->AddPage();// add a page
$Row = mysqli_fetch_assoc($Result);
$countryFlag = 'images/Flags/'.$Row['e_country'].'.png';
// $pdf->Cell(0,23, '','N',1,'L');
$html = '<table border="1" width="100%" cellpadding="10"><tr><td>';
$html .= '<table border="0" width="100%">
<tr>
<td nowrap="nowrap">';
// This section changed on August 5th 2014
if($Row['is_waitingList'] == 'Yes' ) {
$html .= 'On WAITING-list';
} else {
if($Row['is_nc'] == 'Yes' ) {
$html .= 'Horse is NON competing';
}
else {
$html .= 'Combination is competing' ;
}
}
// End changed section
$html .= ' for:<p STYLE="font-size: 18pt;">'.$Row['compNumber'].'</p> </td>
<td>'.$Row['competing_for_country'].' ( '.$RowC['e_country'].')</td>
<td><img src="'.$countryFlag.'" border="0" height="80" /><br /></td>
</tr>
</table>';
// Get the Horse data
$DOBE = explode('-',$Row['date_birth']);
$date_birth = $DOBE[2]."-".$DOBE[1]."-".$DOBE[0];
$age = GetAge($Row['date_birth'], $Row['date_death']);
if($Row['gender'] == "Female") { $gender = "Mare";}
elseif($Row['gender'] == "Male") {
if($Row['is_castrated'] == "yes") { $gender = "Gelding";}
elseif($Row['is_castrated'] == "no") {$gender = "Stalion";}
else {$gender = "Unknown";}
} else { $gender = "Unknown";}
$html .= '<table border="0" width="100%">
<tr><td widtd="20%">Horse name</td><td>'.$Row['complete_name'].'</td></tr>
<tr><td>FEI id</td><td>'.$Row['fei_id'].'</td></tr>
<tr><td>Gender</td><td>'.$gender.'</td></tr>
<tr><td>Color</td><td>'.$Row['color'].'</td></tr>
<tr><td>Age</td><td>'.$Row['date_birth'].' / '.$age.'</td></tr>
<tr><td>Owner</td><td>'.$Row['owner_name'].' ( '.$Row['owner_nationality'].' )</td></tr>
<tr><td></td><td></td></tr>
</table>';
$DOBE = explode('-',$Row['date_birth']);
$date_birth_p = $DOBE[2]."-".$DOBE[1]."-".$DOBE[0];
$age = GetAge($Row['date_birth_p'], $Row['date_death']);
if($Row['gender_p'] == "Male") { $name="Mr. ";} else { $name="Ms. ";}
$name .= $Row['first_name'].' '.ucfirst(strtolower($Row['family_name']));
$html .= '<table border="0" width="100%">
<tr><td widtd="20%">Rider name</td><td>'.$name.'</td></tr>
<tr><td>FEI id</td><td>'.$Row['personFEIid'].'</td></tr>
<tr><td>Date of Birth</td><td>'.$Row['date_birth_p'].' ( '.$age.' )</td></tr>
<tr><td>Mobile</td><td>+'.$Row['e_private_mobile'].' </td></tr>
<tr><td>Private E-mail</td><td>'.$Row['e_private_email'].' </td></tr>
<tr><td></td><td></td></tr>
</table>';
$html .= '</td></tr><tr><td>';
$html .= '<table border="0" width="100%">
<tr><td widtd="20%">Bedding</td><td>'.$Row['horseBedding'].'</td></tr>
<tr><td>Arrival date</td><td>'.$Row['arivalPeriod'].'</td></tr>
<tr><td>Departure date</td><td>'.$Row['departurePeriod'].'</td></tr>
<tr><td>Qualification</td><td>'.$Row['combinationNominate'].'</td></tr>
<tr><td>Payment by</td><td>'.$Row['paymentType'].'</td></tr>
<tr><td>Rider stays in HorseBox</td><td>'.$Row['stayHorseBox'].'</td></tr>';
$missingBox = '<br /><br />____________________';
if($Row['stayHorseBox'] == "No") {
$html .='<tr><td>Requires bed in B-Boekelo</td><td>'.$Row['appartmentBB'].'</td></tr>'; }
$html .= '<tr><td></td><td></td></tr>
<tr><td>Groom</td><td>';
if($Row['nameGroom'] != "")
{ $html .= $Row['nameGroom']; }
else{ $html .= $missingBox;}
$html .= ' ('.$Row['genderGroom'].')</td></tr>
<tr><td>Cell Groom</td><td>+';
if($Row['cellGroom'] != "")
{ $html .= $Row['cellGroom']; }
else{ $html .= $missingBox;}
$html .= '</td></tr>
<tr><td>Accomodation in caravan</td><td>'.$Row['accomGroom'].'</td></tr>
<tr><td></td><td></td></tr>
</table>';
$html .= '<table border="0" width="85%">
<tr><td><b>Comments</b><br /><br /><br /><br /></td></tr><tr><td>'.$Row['comment_c'].'</td></tr>
</table>';
$html .= '</td></tr></table>';
$pdf->writeHTML($html, true, false, true, false, ' ');
}
$report .= $horseID;
}
?>
Ik weet alleen niet of mijn code een M<YSQL-injectie mogelijk maakt en of daar nog wat aan moet doen??
Harry
Ja, SQL-injection is mogelijk, zie regel 4.
PHP Maarten op 24/07/2017 14:12:37:
Hoe kan ik dit beveiligen??Ja, SQL-injection is mogelijk, zie regel 4.
mysqli_real_escape_string()
- Ariën - op 24/07/2017 15:23:47:
mysqli_real_escape_string()
Regel 4 als volgt aagepast:
Huh? Nee. Gewoon nee. mysqli_affected_rows heeft geen enkele zin bij een SELECT query.
- Ariën - op 24/07/2017 16:04:05:
Je vergeet de eerste parameter voor de connection identifier
mysqli_real_escape_string
mysqli_real_escape_string
Ik krijg hier geen foutmelding op??
Toevoeging op 24/07/2017 16:27:01:
Hoe weet ik dan hoeveel regels er geselecterrd zijn??
Gewijzigd op 24/07/2017 16:29:58 door Ben van Velzen
Ben van Velzen op 24/07/2017 16:28:56:
De manual zelf zegt:Door mysqli_num_rows te gebruiken. Je wilt niet weten hoeveel rijen er geraakt zijn door een actie, maar hoeveel er in je resultset zitten. Dit heb ik ook al in een eerder topic aangehaald.
For SELECT statements mysqli_affected_rows() works like mysqli_num_rows().
Gebruik functies waar ze voor bedoeld zijn, en dit kun je zien aan de naam van de functie.
Gewijzigd op 24/07/2017 17:24:48 door Ben van Velzen
"Het kan wel, maar voor deze manier is het er eigenlijk niet voor bedoeld".
Ben van Velzen op 24/07/2017 17:21:34:
Wat de manual ervan zegt interesseert me niks. Dit hebben ze later gedaan omdat achterlijke figuren constant dezelfde fout maakten en bijhorende bugreports bleven insturen.
Het is duidelijk dat je geen weet hebt van de internals van MySQL ;-)
mysqli_num_rows werkt op een result-object, terwijl mysqli_affected_rows een niveau hoger zit, op het mysql-object. Wanneer je een SELECT-statement uitvoert, is na het uitvoeren van de query niet bekend hoeveel rows de query teruggeeft; daarvoor moeten eerst de resultaten worden opgehaald (resultmode MYSQLI_STORE_RESULT, wat de default is). Wanneer je query de resultmode MYSQLI_USE_RESULT gebruikt, zal mysqli_num_rows ook pas het juiste aantal rows bevatten wanneer het laatste record is gefetcht.
Eigenlijk zou je mysqli_num_rows een gemankeerde variant van mysqli_affected_rows kunnen noemen, aangezien hij alleen werkt op queries die een resultset genereren. mysqli_affected_rows werkt op zowel select-queries als non-select-queries.
Harry H Arends op 23/07/2017 21:05:31:
Ik ben niet zeker of TCPDF wel goed werkt met CSS en dan moet ik weer een kunstje leren. Ben op dit moment allang blij dat mij dit lukt met hulp
- Ariën - op 23/07/2017 20:28:31:
En font-tags zijn inmiddels behoorlijk bejaard. Gebruik gewoon CSS om alles te stylen.
Ik ben niet zeker of TCPDF wel goed werkt met CSS en dan moet ik weer een kunstje leren. Ben op dit moment allang blij dat mij dit lukt met hulp
Ik heb even gekeken en ik las dus dit:
Quote:
TCPDF has a very limited CSS support. It doesn't support all attributes.
Currently, only the following CSS attributes are supported:
font-family
font-size
font-weight
font-style
color
background-color
text-decoration
width
height
text-align
Currently, only the following CSS attributes are supported:
font-family
font-size
font-weight
font-style
color
background-color
text-decoration
width
height
text-align
Dus bejaarde HTML kan je dus strippen. ;-)