login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Parse error: parse error, unexpected T_VARIABLE

Offline gerjoris - 25/02/2010 21:09 (laatste wijziging 25/02/2010 21:52)
Avatar van gerjorisNieuw lid Heren experts,
Ik kom er niet uit. Heb een systeem gemaakt waarmee mensen zich voor een kamp kunnen aanmelden. Nu is de griet op de administratie vrij dom, ze conformeert met dezelfde gang dubbele aanmeldingen. Ik probeer nu in de bestaande pagina een kolom bij te maken waarin eventuele dubbele aanmeldingen aangegeven staan. Tot zover heb ik dit staan:


  1. $sql = 'SELECT * '
  2. . ' FROM `inschrijvingen` '
  3. . ' WHERE `confirmed` = \'LEEG\' '
  4. . ' AND `geannuleerd` = \'nee\' '
  5. . ' ORDER BY `datuminschrijving` ';
  6.  
  7. if ($result = mysql_query($sql))
  8. {
  9. echo "<div id=\"overzicht\">\n";
  10. echo "<table border=1>\n";
  11. echo "<tr id=\"table-header\"><td> </td><td>Inschrijfdatum</td><td>ID</td><td>Dubbel</td><td>Naam</td><td>Geslacht</td><td>Kampkeuze</td><td>Geboortedatum</td><td>Woonplaats</td><td>Opmerkingen</td><td>Telefoonnummer</td><td>Emailadres</td></tr>\n";
  12. // alle resultaten doorlopen ...
  13. while ($record = mysql_fetch_object($result))
  14. {
  15. // gegevens bepalen ...
  16. $ID = $record->ID;
  17. $datuminschrijving = $record->datuminschrijving;
  18. $naam = $record->voornaam." ".$record->tussenvoegsel." ".$record->achternaam;
  19. $geslacht = $record->geslacht;
  20. $gebdat = $record->gebdat;
  21. $woonplaats = $record->woonplaats;
  22. $woonplaats = $record->woonplaats;
  23. $telefoon = $record->telefoon;
  24. $opmerkingen = $record->opmerkingen;
  25. $email = $record->email; $email = ($email<>""?"<a href=\"mailto:{$email}\">{$email}</a>":"&nbsp;"); // van e-mail een link maken ...
  26. $kampkeuze = $record->kampkeuze;
  27. $confirmed=$record->confirmed;
  28.  
  29. $sql2 = 'SELECT * FROM `inschrijvingen` WHERE `gebdat` = \'$gebdat\' AND `email` = \'$email\' AND `ID` !=\'$ID\' ';
  30.  
  31. if ($result2 = mysql_query($sql2))
  32. {
  33. while ($record = mysql_fetch_object($result2))
  34.  
  35. {
  36. $ID2 = $record->ID;
  37. $voornaam2 = $record->voornaam;
  38. $kampkeuze2 = $record->kampkeuze;
  39.  
  40. // per record een regel in de tabel aanmaken ...
  41. $row = "<tr><td><a href=/secure/conformeren_bewerken_inschrijving.php?ID=$ID>klik</a></td>
  42. <td>{$datuminschrijving}</td><td>{$ID}</td><td>{$ID2} {$voornaam2} {$kampkeuze2}</td>
  43. <td>{$naam}</td><td>{$geslacht}</td>
  44. <td>{$kampkeuze}</td><td>{$gebdat}</td><td>{$woonplaats}</td><td>{$opmerkingen}</td><td>{$telefoon}</td>
  45. <td>{$email}</td></tr>\n";
  46.  
  47. echo $row;
  48. }
  49. }
  50. else
  51.  
  52. // per record een regel in de tabel aanmaken ...
  53. $row = "<tr><td><a href=/secure/conformeren_bewerken_inschrijving.php?ID=$ID>klik</a></td>
  54. <td>{$datuminschrijving}</td><td>{$ID}</td><td>&nbsp;</td>
  55. <td>{$naam}</td><td>{$geslacht}</td>
  56. <td>{$kampkeuze}</td><td>{$gebdat}</td><td>{$woonplaats}</td><td>{$opmerkingen}</td><td>{$telefoon}</td>
  57. <td>{$email}</td></tr>\n";
  58.  
  59. }
  60.  
  61.  
  62. }

Ik snap er geen worst meer van, ongetwijfeld doe ik iets verkeerd?

10 antwoorden

Gesponsorde links
Offline vinTage - 25/02/2010 21:31
Avatar van vinTage Nieuw lid $kampkeuze2 = $record->kampkeuze

; vergeten op het einde ?

Offline gerjoris - 25/02/2010 21:51
Avatar van gerjoris Nieuw lid vinTage,

Thanks, de T_variable error is eruit, en ik heb beeld. Echter is de pagina nog niet gevuld.

Het lastige is, dat niet natuurlijk niet iedere inschrijving dubbel wordt gedaan, echter o.b.v. het emailadres en de geboortedatum had ik m.i. redelijk unieke waarden om op te zoeken.

De bedoeling is dat hij bij de dubbele inschrijving in de tabel deze weergeeft (ID2, naam2 en kampkeuze2) en bij normale aanmeldingen gewoon dat veld leeglaat en de gegevens van de aanmelding weergeeft.
Hij geeft nu geen enkele inschrijving weer...
Offline larssy1 - 26/02/2010 08:37
Avatar van larssy1 MySQL beginner Je laatste else heeft geen { om te beginnen.
Offline Milo - 26/02/2010 10:24
Avatar van Milo Nieuw lid    

Ik wil nu echt niet overkomen alsof ik veel perfecte dingen maak enzo, maar dit slaat echt alles:

1- Vars niet buiten de quotes
2- HTML escape terwijl dat niet nodig is!
3- Foutafhandeling query's?
4- HTML word behoorlijk triest geëchood
5- Je sluit je if statement niet af
5- Je sluit je tabel niet af
6- Je sluit je div niet af....

Het zou volgens mij zoiets moeten worden:
  1. <?php
  2. $sql = 'SELECT
  3. *
  4. FROM
  5. inschrijvingen
  6. WHERE
  7. confirmed = LEEG
  8. AND
  9. geannuleerd = nee
  10. ORDER BY
  11. datuminschrijving';
  12.  
  13. if($result = mysql_query($sql))
  14. {
  15. echo '<div id="overzicht">';
  16. echo '<table border=1>';
  17. echo '<tr id="table-header">
  18. <td>#</td>
  19. <td>Inschrijfdatum</td>
  20. <td>ID</td>
  21. <td>Dubbel</td>
  22. <td>Naam</td>
  23. <td>Geslacht</td>
  24. <td>Kampkeuze</td>
  25. <td>Geboortedatum</td>
  26. <td>Woonplaats</td>
  27. <td>Opmerkingen</td>
  28. <td>Telefoonnummer</td>
  29. <td>Emailadres</td>
  30. </tr>';
  31.  
  32. // alle resultaten doorlopen ...
  33. while ($record = mysql_fetch_object($result))
  34. {
  35. // gegevens bepalen ...
  36. $ID = $record->ID;
  37. $datuminschrijving = $record->datuminschrijving;
  38. $naam = $record->voornaam.' '.$record->tussenvoegsel.' '.$record->achternaam;
  39. $geslacht = $record->geslacht;
  40. $gebdat = $record->gebdat;
  41. $woonplaats = $record->woonplaats;
  42. $telefoon = $record->telefoon;
  43. $opmerkingen = $record->opmerkingen;
  44. $email = '<a href="mailto:'.$record->email.'>'.$record->email.'</a>';
  45. $kampkeuze = $record->kampkeuze;
  46. $confirmed=$record->confirmed;
  47.  
  48. $sql2 = 'SELECT
  49. *
  50. FROM
  51. inschrijvingen
  52. WHERE
  53. gebdat = "'.$gebdat.'"
  54. AND
  55. email = "'.$email.'"
  56. AND
  57. id <> "'.$ID.'"';
  58.  
  59. if($result2 = mysql_query($sql2))
  60. {
  61. while ($record = mysql_fetch_object($result2))
  62. {
  63. // Vars aanmaken
  64. $ID2 = $record->ID;
  65. $voornaam2 = $record->voornaam;
  66. $kampkeuze2 = $record->kampkeuze;
  67.  
  68. // Per record 1 regel in de tabel en die echoën
  69. echo '<tr>
  70. <td><a href=/secure/conformeren_bewerken_inschrijving.php?ID='.$ID.'>klik</a></td>
  71. <td>'.$datuminschrijving.'</td>
  72. <td>'.$ID.'</td>
  73. <td>'.$ID2.' '.$voornaam2.' '.$kampkeuze2.'</td>
  74. <td>'.$naam.'</td>
  75. <td>'.$geslacht.'</td>
  76. <td>'.$kampkeuze.'</td>
  77. <td>'.$gebdat.'</td>
  78. <td>'.$woonplaats.'</td>
  79. <td>'.$opmerkingen.'</td>
  80. <td>'.$telefoon.'</td>
  81. <td>'.$email.'</td>
  82. </tr>\n';
  83. }
  84. }
  85. else
  86. {
  87. // Per rec 1 regel in de tabel
  88. echo '<tr>
  89. <td><a href=/secure/conformeren_bewerken_inschrijving.php?ID='.$ID.'>klik</a></td>
  90. <td>'.$datuminschrijving.'</td>
  91. <td>'.$ID.'</td>
  92. <td>&nbsp;</td>
  93. <td>'.$naam.'</td>
  94. <td>'.$geslacht.'</td>
  95. <td>'.$kampkeuze.'</td>
  96. <td>'.$gebdat.'</td>
  97. <td>'.$woonplaats.'</td>
  98. <td>'.$opmerkingen.'</td>
  99. <td>'.$telefoon.'</td>
  100. <td>'.$email.'</td>
  101. </tr>\n';
  102. }
  103. }
  104.  
  105. echo '<table>';
  106. echo '<div>';
  107. }
  108. ?>


Ik smeek je leer ervan en doe het de volgende keer iets netter, want netjes coderen is echt geen kunst hoor dat bestaat alleen maar uit goede tabs, enters, spaties, vars buiten quotes e.d.

Verder kunnen er nog wat kleine foutjes inzitten in dat geval vraag maar raak 

Gr,
Offline larssy1 - 26/02/2010 10:31
Avatar van larssy1 MySQL beginner Hiernaastis het ook handig om een anti-sql injection functie te gebruiken.

Ikzelf gebruik hiervoor:
  1. function dbWrite($string){
  2. $string_final = get_magic_quotes_gpc($string)
  3. $string_final = stripslashes($string);
  4. $string_final = mysql_real_escape_string($string);
  5.  
  6. return $string_final;
  7. }


Niet al te goed, maar het doet zijn werk 
Offline gerjoris - 27/02/2010 11:45
Avatar van gerjoris Nieuw lid He Milo,

Thanks voor je hulp! Je hebt gelijk, het is slordig gemaakt. Echter, het werkte, en voor een amateur als ik is dat al een zegen. Sorry he...

Ik heb in de eerste query de zoekwaarden toch maar weer tussen haakjes gezet, anders deed hij het niet. Verder heb ik je \n na de tabel er ook weer uitgehaald. Daar deed hij niets mee, die kwam als tekst boven de tabel terecht.

Inmiddels heb ik resultaat. Ik heb in de testdatabase drie aanmeldingen staan, waarvan twee identiek zijn. Probleem nu is alleen, hij doet het volgende:

- Met inbegrip van de tweede query geeft hij enkel de twee dubbele aanmeldingen, netjes met de dubbele gegevens in de tabel. Die ene unieke aanmelding geeft hij niet weer.
- Zonder de tweede query geeft hij netjes alle drie de aanmeldingen weer, uiteraard zonder gegevens in de kolom 'dubbel'.

Ik heb (met mijn amateurverstand) het idee dat er ergens een { of } verkeerd moet staan, het lijkt er m.i. op dat hij op z'n bek gaat als er een unieke aanmelding inzit, alsof hij die tweede if-else niet snapt. Heb je nog even om me verder te helpen?
  1. if($result = mysql_query($sql))
  2. {
  3.  
  4. // alle resultaten doorlopen ...
  5. while ($record = mysql_fetch_object($result))
  6. {
  7. // gegevens bepalen ...
  8. $ID = $record->ID;
  9. $datuminschrijving = $record->datuminschrijving;
  10. $naam = $record->voornaam.' '.$record->tussenvoegsel.' '.$record->achternaam;
  11. $geslacht = $record->geslacht;
  12. $gebdat = $record->gebdat;
  13. $woonplaats = $record->woonplaats;
  14. $telefoon = $record->telefoon;
  15. $opmerkingen = $record->opmerkingen;
  16. $email = $record->email;
  17. $kampkeuze = $record->kampkeuze;
  18. $confirmed=$record->confirmed;
  19.  
  20. $sql2 = 'SELECT
  21. *
  22. FROM
  23. inschrijvingen2
  24. WHERE
  25. gebdat = "'.$gebdat.'"
  26. AND
  27. email = "'.$email.'"
  28. AND
  29. id <> "'.$ID.'"';
  30.  
  31. if($result2 = mysql_query($sql2))
  32. {
  33. while ($record2 = mysql_fetch_object($result2))
  34. {
  35. // Vars aanmaken
  36. $ID2 = $record2->ID;
  37. $voornaam2 = $record2->voornaam;
  38. $kampkeuze2 = $record2->kampkeuze;
  39.  
  40. // Per record 1 regel in de tabel en die echoën
  41. echo '<tr>
  42. <td><a href=/secure/conformeren_bewerken_inschrijving.php?ID='.$ID.'>klik</a></td>
  43. <td>'.$datuminschrijving.'</td>
  44. <td>'.$ID.'</td>
  45. <td>'.$ID2.' '.$voornaam2.' '.$kampkeuze2.'</td>
  46. <td>'.$naam.'</td>
  47. <td>'.$geslacht.'</td>
  48. <td>'.$kampkeuze.'</td>
  49. <td>'.$gebdat.'</td>
  50. <td>'.$woonplaats.'</td>
  51. <td>'.$opmerkingen.'</td>
  52. <td>'.$telefoon.'</td>
  53. <td>'.$email.'</td>
  54. </tr>';
  55. }
  56. }
  57. else
  58. {
  59. // Per rec 1 regel in de tabel
  60. echo '<tr>
  61. <td><a href=/secure/conformeren_bewerken_inschrijving.php?ID='.$ID.'>klik</a></td>
  62. <td>'.$datuminschrijving.'</td>
  63. <td>'.$ID.'</td>
  64. <td>&nbsp;</td>
  65. <td>'.$naam.'</td>
  66. <td>'.$geslacht.'</td>
  67. <td>'.$kampkeuze.'</td>
  68. <td>'.$gebdat.'</td>
  69. <td>'.$woonplaats.'</td>
  70. <td>'.$opmerkingen.'</td>
  71. <td>'.$telefoon.'</td>
  72. <td>'.$email.'</td>
  73. </tr>';
  74. }
  75. }
  76. }
  77. echo '</table>';
  78. echo '</div>';
Offline Martijn - 27/02/2010 12:58
Avatar van Martijn Crew PHP
larssy1 schreef:
Hiernaastis het ook handig om een anti-sql injection functie te gebruiken.

Ikzelf gebruik hiervoor:
[..code..]

Niet al te goed, maar het doet zijn werk 


Je weet dat dit niet werkt hae?
  1. $string_final = mysql_real_escape_string($string);

dat is de enige die word returned, want je doet het steeds op $string, je geeft je $final_string niet door. Je herschrijft $string dus gewoon 3x
Offline Koen - 28/02/2010 11:47
Avatar van Koen PHP expert
Martijn schreef:
[..quote..]

Je weet dat dit niet werkt hae?
[..code..]
dat is de enige die word returned, want je doet het steeds op $string, je geeft je $final_string niet door. Je herschrijft $string dus gewoon 3x

Als we dan toch gaan mierenneuken: bij de meeste PHP configuraties staat "magic_quotes" reeds aan. Vandaar kunnen we met een gerust hart de volgende code gaan gebruiken:
  1. <?php
  2. function escape_string($input)
  3. {
  4. {
  5. return $input;
  6. }
  7. else
  8. {
  9. return addslashes($input);
  10. }
  11. }
  12.  
  13. // en ja, deze functie kan korter:
  14. function escape_string($input)
  15. {
  16. return get_magic_quotes_gpc() ? $input : addslashes($input);
  17. }
Offline gerjoris - 28/02/2010 16:12
Avatar van gerjoris Nieuw lid [offtopic]Eeh, leuk hoor, dat over mysql_real_escape_string enzo, maar kortweg gezegd gaat dit topic over iets anders geloof ik. Ik ga in ieder geval mysql_real_escape_string niet gebruiken, het zit allemaal verstopt achter een prima werkende login en als men die kraakt geloof ik niet dat ik ga voorkomen dat mijn database naar de filistijnen gaat.[/offtopic]

Weet iemand hoe ik mijn script werkend ga krijgen, Milo, larssy1 en vinTage hebben me al aardig op weg geholpen, maar ik ben er nog niet!

Offline TotempaaltJ - 28/02/2010 18:08
Avatar van TotempaaltJ PHP interesse Als je script zonder escaping de database queriet kan je makkelijk voorkomen dat je database naar de filistijnen gaat. Je kan ook inloggen en dan je database naar de filistijnen helpen!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.337s