Waar zit hier een syntax fout??

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Harry H Arends

Harry H Arends

23/07/2017 19:27:06
Quote Anchor link
LS,

Regel 7 genereerd deze fout: Parse error: syntax error, unexpected 'gender' (T_STRING)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
?>

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
 
PHP hulp

PHP hulp

30/11/2024 08:44:54
 
Rob Doemaarwat

Rob Doemaarwat

23/07/2017 19:44:07
Quote Anchor link
Dag Harry,

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.
 
Harry H Arends

Harry H Arends

23/07/2017 20:03:30
Quote Anchor link
Ik gebruik Rapid PHP en toch gaat het fout. Een stukje uitgeligt waar ik nog mee zit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 />";
?>

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
 
Adoptive Solution

Adoptive Solution

23/07/2017 20:15:29
Quote Anchor link
Moeten de schuine strepen in regel 3 niet de andere kant op wijzen?

En in regel 6 ontbreekt een " om de src=" mee af te sluiten.

Het lijkt wel therapie.
 
- Ariën  -
Beheerder

- Ariën -

23/07/2017 20:28:31
Quote Anchor link
En font-tags zijn inmiddels behoorlijk bejaard. Gebruik gewoon CSS om alles te stylen.
 
Harry H Arends

Harry H Arends

23/07/2017 21:05:31
Quote Anchor link
- 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
 
- Ariën  -
Beheerder

- Ariën -

23/07/2017 21:35:45
Quote Anchor link
Daar heb je gelijk in...
Of heeft TCPDF zelf een method voor font-sizes?
 
Harry H Arends

Harry H Arends

24/07/2017 13:41:47
Quote Anchor link
Ik heb de eerste template werkend. Is wel een ander report geworden, is iets eenvoudiger.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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 .= '&nbsp; ('.$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
 
Marthijn Buijs

Marthijn Buijs

24/07/2017 14:12:37
Quote Anchor link
Ja, SQL-injection is mogelijk, zie regel 4.
 
Harry H Arends

Harry H Arends

24/07/2017 14:58:33
Quote Anchor link
PHP Maarten op 24/07/2017 14:12:37:
Ja, SQL-injection is mogelijk, zie regel 4.
Hoe kan ik dit beveiligen??
 
- Ariën  -
Beheerder

- Ariën -

24/07/2017 15:23:47
Quote Anchor link
mysqli_real_escape_string()
 
Harry H Arends

Harry H Arends

24/07/2017 15:55:43
Quote Anchor link
- Ariën - op 24/07/2017 15:23:47:
mysqli_real_escape_string()

Regel 4 als volgt aagepast:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?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 =  '".mysqli_real_escape_string($dblink, $_GET['horseFEIid'])."'";

?>
 
- Ariën  -
Beheerder

- Ariën -

24/07/2017 16:04:05
Quote Anchor link
Je vergeet de eerste parameter voor de connection identifier
mysqli_real_escape_string
Gewijzigd op 24/07/2017 16:05:06 door - Ariën -
 
Ben van Velzen

Ben van Velzen

24/07/2017 16:22:23
Quote Anchor link
Ik zie nog een leuke.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$numberCombination
= mysqli_affected_rows($dblink);
?>

Huh? Nee. Gewoon nee. mysqli_affected_rows heeft geen enkele zin bij een SELECT query.
 
Harry H Arends

Harry H Arends

24/07/2017 16:25:52
Quote Anchor link
- Ariën - op 24/07/2017 16:04:05:
Je vergeet de eerste parameter voor de connection identifier
mysqli_real_escape_string

Ik krijg hier geen foutmelding op??



Toevoeging op 24/07/2017 16:27:01:

Ben van Velzen op 24/07/2017 16:22:23:
Ik zie nog een leuke.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$numberCombination
= mysqli_affected_rows($dblink);
?>

Huh? Nee. Gewoon nee. mysqli_affected_rows heeft geen enkele zin bij een SELECT query.
Hoe weet ik dan hoeveel regels er geselecterrd zijn??
 
Ben van Velzen

Ben van Velzen

24/07/2017 16:28:56
Quote Anchor link
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.
Gewijzigd op 24/07/2017 16:29:58 door Ben van Velzen
 
Harry H Arends

Harry H Arends

24/07/2017 17:01:40
Quote Anchor link
Ben van Velzen op 24/07/2017 16:28:56:
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.
De manual zelf zegt:
For SELECT statements mysqli_affected_rows() works like mysqli_num_rows().
 
Ben van Velzen

Ben van Velzen

24/07/2017 17:21:34
Quote Anchor link
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.

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
 
- Ariën  -
Beheerder

- Ariën -

24/07/2017 17:24:37
Quote Anchor link
Volgens mij is het een equivalent van:
"Het kan wel, maar voor deze manier is het er eigenlijk niet voor bedoeld".
 
Willem vp

Willem vp

24/07/2017 19:48:40
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

26/07/2017 10:33:34
Quote Anchor link
Harry H Arends op 23/07/2017 21:05:31:
- 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

Dus bejaarde HTML kan je dus strippen. ;-)
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.