Parse error: parse error, unexpected T_VARIABLE
gerjoris - 25/02/2010 21:09 (laatste wijziging 25/02/2010 21:52)
Nieuw 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:
$sql = 'SELECT * '
. ' FROM `inschrijvingen` '
. ' WHERE `confirmed` = \'LEEG\' '
. ' AND `geannuleerd` = \'nee\' '
. ' ORDER BY `datuminschrijving` ';
if ($result = mysql_query($sql))
{
echo "<div id=\"overzicht\">\n";
echo "<table border=1>\n";
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";
// alle resultaten doorlopen ...
while ($record = mysql_fetch_object($result))
{
// gegevens bepalen ...
$ID = $record->ID;
$datuminschrijving = $record->datuminschrijving;
$naam = $record->voornaam." ".$record->tussenvoegsel." ".$record->achternaam;
$geslacht = $record->geslacht;
$gebdat = $record->gebdat;
$woonplaats = $record->woonplaats;
$woonplaats = $record->woonplaats;
$telefoon = $record->telefoon;
$opmerkingen = $record->opmerkingen;
$email = $record->email; $email = ($email<>""?"<a href=\"mailto:{$email}\">{$email}</a>":" "); // van e-mail een link maken ...
$kampkeuze = $record->kampkeuze;
$confirmed=$record->confirmed;
$sql2 = 'SELECT * FROM `inschrijvingen` WHERE `gebdat` = \'$gebdat\' AND `email` = \'$email\' AND `ID` !=\'$ID\' ';
if ($result2 = mysql_query($sql2))
{
while ($record = mysql_fetch_object($result2))
{
$ID2 = $record->ID;
$voornaam2 = $record->voornaam;
$kampkeuze2 = $record->kampkeuze;
// per record een regel in de tabel aanmaken ...
$row = "<tr><td><a href=/secure/conformeren_bewerken_inschrijving.php?ID=$ID>klik</a></td>
<td>{$datuminschrijving}</td><td>{$ID}</td><td>{$ID2} {$voornaam2} {$kampkeuze2}</td>
<td>{$naam}</td><td>{$geslacht}</td>
<td>{$kampkeuze}</td><td>{$gebdat}</td><td>{$woonplaats}</td><td>{$opmerkingen}</td><td>{$telefoon}</td>
<td>{$email}</td></tr>\n";
echo $row;
}
}
else
// per record een regel in de tabel aanmaken ...
$row = "<tr><td><a href=/secure/conformeren_bewerken_inschrijving.php?ID=$ID>klik</a></td>
<td>{$datuminschrijving}</td><td>{$ID}</td><td> </td>
<td>{$naam}</td><td>{$geslacht}</td>
<td>{$kampkeuze}</td><td>{$gebdat}</td><td>{$woonplaats}</td><td>{$opmerkingen}</td><td>{$telefoon}</td>
<td>{$email}</td></tr>\n";
}
}
$sql = 'SELECT * '
. ' FROM `inschrijvingen` '
. ' WHERE `confirmed` = \' LEEG\' '
. ' AND `geannuleerd` = \' nee\' '
. ' ORDER BY `datuminschrijving` ' ;
{
echo "<div id=\" overzicht\" >\n " ; echo "<table border=1>\n " ; 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 " ; // alle resultaten doorlopen ...
{
// gegevens bepalen ...
$ID = $record -> ID ;
$datuminschrijving = $record -> datuminschrijving ;
$naam = $record -> voornaam . " " . $record -> tussenvoegsel . " " . $record -> achternaam ;
$geslacht = $record -> geslacht ;
$gebdat = $record -> gebdat ;
$woonplaats = $record -> woonplaats ;
$woonplaats = $record -> woonplaats ;
$telefoon = $record -> telefoon ;
$opmerkingen = $record -> opmerkingen ;
$email = $record -> email ; $email = ( $email <> "" ?"<a href=\" mailto:{$email} \" >{$email} </a>" : " " ) ; // van e-mail een link maken ...
$kampkeuze = $record -> kampkeuze ;
$confirmed = $record -> confirmed ;
$sql2 = 'SELECT * FROM `inschrijvingen` WHERE `gebdat` = \' $gebdat \' AND `email` = \' $email \' AND `ID` !=\' $ID \' ' ;
{
{
$ID2 = $record -> ID ;
$voornaam2 = $record -> voornaam ;
$kampkeuze2 = $record -> kampkeuze ;
// per record een regel in de tabel aanmaken ...
$row = "<tr><td><a href=/secure/conformeren_bewerken_inschrijving.php?ID=$ID >klik</a></td>
<td>{$datuminschrijving} </td><td>{$ID} </td><td>{$ID2} {$voornaam2} {$kampkeuze2} </td>
<td>{$naam} </td><td>{$geslacht} </td>
<td>{$kampkeuze} </td><td>{$gebdat} </td><td>{$woonplaats} </td><td>{$opmerkingen} </td><td>{$telefoon} </td>
<td>{$email} </td></tr>\n " ;
}
}
else
// per record een regel in de tabel aanmaken ...
$row = "<tr><td><a href=/secure/conformeren_bewerken_inschrijving.php?ID=$ID >klik</a></td>
<td>{$datuminschrijving} </td><td>{$ID} </td><td> </td>
<td>{$naam} </td><td>{$geslacht} </td>
<td>{$kampkeuze} </td><td>{$gebdat} </td><td>{$woonplaats} </td><td>{$opmerkingen} </td><td>{$telefoon} </td>
<td>{$email} </td></tr>\n " ;
}
}
Ik snap er geen worst meer van, ongetwijfeld doe ik iets verkeerd?
10 antwoorden
Gesponsorde links
vinTage - 25/02/2010 21:31
Nieuw lid
$kampkeuze2 = $record->kampkeuze
; vergeten op het einde ?
gerjoris - 25/02/2010 21:51
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...
larssy1 - 26/02/2010 08:37
MySQL beginner
Je laatste else heeft geen { om te beginnen.
Milo - 26/02/2010 10:24
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:
<?php
$sql = 'SELECT
*
FROM
inschrijvingen
WHERE
confirmed = LEEG
AND
geannuleerd = nee
ORDER BY
datuminschrijving';
if($result = mysql_query($sql))
{
echo '<div id="overzicht">';
echo '<table border=1>';
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>';
// alle resultaten doorlopen ...
while ($record = mysql_fetch_object($result))
{
// gegevens bepalen ...
$ID = $record->ID;
$datuminschrijving = $record->datuminschrijving;
$naam = $record->voornaam.' '.$record->tussenvoegsel.' '.$record->achternaam;
$geslacht = $record->geslacht;
$gebdat = $record->gebdat;
$woonplaats = $record->woonplaats;
$telefoon = $record->telefoon;
$opmerkingen = $record->opmerkingen;
$email = '<a href="mailto:'.$record->email.'>'.$record->email.'</a>';
$kampkeuze = $record->kampkeuze;
$confirmed=$record->confirmed;
$sql2 = 'SELECT
*
FROM
inschrijvingen
WHERE
gebdat = "'.$gebdat.'"
AND
email = "'.$email.'"
AND
id <> "'.$ID.'"';
if($result2 = mysql_query($sql2))
{
while ($record = mysql_fetch_object($result2))
{
// Vars aanmaken
$ID2 = $record->ID;
$voornaam2 = $record->voornaam;
$kampkeuze2 = $record->kampkeuze;
// Per record 1 regel in de tabel en die echoën
echo '<tr>
<td><a href=/secure/conformeren_bewerken_inschrijving.php?ID='.$ID.'>klik</a></td>
<td>'.$datuminschrijving.'</td>
<td>'.$ID.'</td>
<td>'.$ID2.' '.$voornaam2.' '.$kampkeuze2.'</td>
<td>'.$naam.'</td>
<td>'.$geslacht.'</td>
<td>'.$kampkeuze.'</td>
<td>'.$gebdat.'</td>
<td>'.$woonplaats.'</td>
<td>'.$opmerkingen.'</td>
<td>'.$telefoon.'</td>
<td>'.$email.'</td>
</tr>\n';
}
}
else
{
// Per rec 1 regel in de tabel
echo '<tr>
<td><a href=/secure/conformeren_bewerken_inschrijving.php?ID='.$ID.'>klik</a></td>
<td>'.$datuminschrijving.'</td>
<td>'.$ID.'</td>
<td> </td>
<td>'.$naam.'</td>
<td>'.$geslacht.'</td>
<td>'.$kampkeuze.'</td>
<td>'.$gebdat.'</td>
<td>'.$woonplaats.'</td>
<td>'.$opmerkingen.'</td>
<td>'.$telefoon.'</td>
<td>'.$email.'</td>
</tr>\n';
}
}
echo '<table>';
echo '<div>';
}
?>
<?php
$sql = 'SELECT
*
FROM
inschrijvingen
WHERE
confirmed = LEEG
AND
geannuleerd = nee
ORDER BY
datuminschrijving' ;
{
echo '<div id="overzicht">' ; 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>' ;
// alle resultaten doorlopen ...
{
// gegevens bepalen ...
$ID = $record -> ID ;
$datuminschrijving = $record -> datuminschrijving ;
$naam = $record -> voornaam . ' ' . $record -> tussenvoegsel . ' ' . $record -> achternaam ;
$geslacht = $record -> geslacht ;
$gebdat = $record -> gebdat ;
$woonplaats = $record -> woonplaats ;
$telefoon = $record -> telefoon ;
$opmerkingen = $record -> opmerkingen ;
$email = '<a href="mailto:' . $record -> email . '>' . $record -> email . '</a>' ;
$kampkeuze = $record -> kampkeuze ;
$confirmed = $record -> confirmed ;
$sql2 = 'SELECT
*
FROM
inschrijvingen
WHERE
gebdat = "' . $gebdat . '"
AND
email = "' . $email . '"
AND
id <> "' . $ID . '"' ;
{
{
// Vars aanmaken
$ID2 = $record -> ID ;
$voornaam2 = $record -> voornaam ;
$kampkeuze2 = $record -> kampkeuze ;
// Per record 1 regel in de tabel en die echoën
<td><a href=/secure/conformeren_bewerken_inschrijving.php?ID=' . $ID . '>klik</a></td>
<td>' . $datuminschrijving . '</td>
<td>' . $ID . '</td>
<td>' . $ID2 . ' ' . $voornaam2 . ' ' . $kampkeuze2 . '</td>
<td>' . $naam . '</td>
<td>' . $geslacht . '</td>
<td>' . $kampkeuze . '</td>
<td>' . $gebdat . '</td>
<td>' . $woonplaats . '</td>
<td>' . $opmerkingen . '</td>
<td>' . $telefoon . '</td>
<td>' . $email . '</td>
</tr>\n' ;
}
}
else
{
// Per rec 1 regel in de tabel
<td><a href=/secure/conformeren_bewerken_inschrijving.php?ID=' . $ID . '>klik</a></td>
<td>' . $datuminschrijving . '</td>
<td>' . $ID . '</td>
<td> </td>
<td>' . $naam . '</td>
<td>' . $geslacht . '</td>
<td>' . $kampkeuze . '</td>
<td>' . $gebdat . '</td>
<td>' . $woonplaats . '</td>
<td>' . $opmerkingen . '</td>
<td>' . $telefoon . '</td>
<td>' . $email . '</td>
</tr>\n' ;
}
}
}
?>
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,
larssy1 - 26/02/2010 10:31
MySQL beginner
Hiernaastis het ook handig om een anti-sql injection functie te gebruiken.
Ikzelf gebruik hiervoor:
function dbWrite($string){
$string_final = get_magic_quotes_gpc($string)
$string_final = stripslashes($string);
$string_final = mysql_real_escape_string($string);
return $string_final;
}
function dbWrite( $string ) {
return $string_final ;
}
Niet al te goed, maar het doet zijn werk
gerjoris - 27/02/2010 11:45
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?
if($result = mysql_query($sql))
{
// alle resultaten doorlopen ...
while ($record = mysql_fetch_object($result))
{
// gegevens bepalen ...
$ID = $record->ID;
$datuminschrijving = $record->datuminschrijving;
$naam = $record->voornaam.' '.$record->tussenvoegsel.' '.$record->achternaam;
$geslacht = $record->geslacht;
$gebdat = $record->gebdat;
$woonplaats = $record->woonplaats;
$telefoon = $record->telefoon;
$opmerkingen = $record->opmerkingen;
$email = $record->email;
$kampkeuze = $record->kampkeuze;
$confirmed=$record->confirmed;
$sql2 = 'SELECT
*
FROM
inschrijvingen2
WHERE
gebdat = "'.$gebdat.'"
AND
email = "'.$email.'"
AND
id <> "'.$ID.'"';
if($result2 = mysql_query($sql2))
{
while ($record2 = mysql_fetch_object($result2))
{
// Vars aanmaken
$ID2 = $record2->ID;
$voornaam2 = $record2->voornaam;
$kampkeuze2 = $record2->kampkeuze;
// Per record 1 regel in de tabel en die echoën
echo '<tr>
<td><a href=/secure/conformeren_bewerken_inschrijving.php?ID='.$ID.'>klik</a></td>
<td>'.$datuminschrijving.'</td>
<td>'.$ID.'</td>
<td>'.$ID2.' '.$voornaam2.' '.$kampkeuze2.'</td>
<td>'.$naam.'</td>
<td>'.$geslacht.'</td>
<td>'.$kampkeuze.'</td>
<td>'.$gebdat.'</td>
<td>'.$woonplaats.'</td>
<td>'.$opmerkingen.'</td>
<td>'.$telefoon.'</td>
<td>'.$email.'</td>
</tr>';
}
}
else
{
// Per rec 1 regel in de tabel
echo '<tr>
<td><a href=/secure/conformeren_bewerken_inschrijving.php?ID='.$ID.'>klik</a></td>
<td>'.$datuminschrijving.'</td>
<td>'.$ID.'</td>
<td> </td>
<td>'.$naam.'</td>
<td>'.$geslacht.'</td>
<td>'.$kampkeuze.'</td>
<td>'.$gebdat.'</td>
<td>'.$woonplaats.'</td>
<td>'.$opmerkingen.'</td>
<td>'.$telefoon.'</td>
<td>'.$email.'</td>
</tr>';
}
}
}
echo '</table>';
echo '</div>';
{
// alle resultaten doorlopen ...
{
// gegevens bepalen ...
$ID = $record -> ID ;
$datuminschrijving = $record -> datuminschrijving ;
$naam = $record -> voornaam . ' ' . $record -> tussenvoegsel . ' ' . $record -> achternaam ;
$geslacht = $record -> geslacht ;
$gebdat = $record -> gebdat ;
$woonplaats = $record -> woonplaats ;
$telefoon = $record -> telefoon ;
$opmerkingen = $record -> opmerkingen ;
$email = $record -> email ;
$kampkeuze = $record -> kampkeuze ;
$confirmed = $record -> confirmed ;
$sql2 = 'SELECT
*
FROM
inschrijvingen2
WHERE
gebdat = "' . $gebdat . '"
AND
email = "' . $email . '"
AND
id <> "' . $ID . '"' ;
{
{
// Vars aanmaken
$ID2 = $record2 -> ID ;
$voornaam2 = $record2 -> voornaam ;
$kampkeuze2 = $record2 -> kampkeuze ;
// Per record 1 regel in de tabel en die echoën
<td><a href=/secure/conformeren_bewerken_inschrijving.php?ID=' . $ID . '>klik</a></td>
<td>' . $datuminschrijving . '</td>
<td>' . $ID . '</td>
<td>' . $ID2 . ' ' . $voornaam2 . ' ' . $kampkeuze2 . '</td>
<td>' . $naam . '</td>
<td>' . $geslacht . '</td>
<td>' . $kampkeuze . '</td>
<td>' . $gebdat . '</td>
<td>' . $woonplaats . '</td>
<td>' . $opmerkingen . '</td>
<td>' . $telefoon . '</td>
<td>' . $email . '</td>
</tr>' ;
}
}
else
{
// Per rec 1 regel in de tabel
<td><a href=/secure/conformeren_bewerken_inschrijving.php?ID=' . $ID . '>klik</a></td>
<td>' . $datuminschrijving . '</td>
<td>' . $ID . '</td>
<td> </td>
<td>' . $naam . '</td>
<td>' . $geslacht . '</td>
<td>' . $kampkeuze . '</td>
<td>' . $gebdat . '</td>
<td>' . $woonplaats . '</td>
<td>' . $opmerkingen . '</td>
<td>' . $telefoon . '</td>
<td>' . $email . '</td>
</tr>' ;
}
}
}
Martijn - 27/02/2010 12:58
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?
$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
Koen - 28/02/2010 11:47
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:
<?php
function escape_string($input)
{
if(get_magic_quotes_gpc())
{
return $input;
}
else
{
return addslashes($input);
}
}
// en ja, deze functie kan korter:
function escape_string($input)
{
return get_magic_quotes_gpc() ? $input : addslashes($input);
}
<?php
function escape_string( $input )
{
{
return $input ;
}
else
{
}
}
// en ja, deze functie kan korter:
function escape_string( $input )
{
}
gerjoris - 28/02/2010 16:12
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!
TotempaaltJ - 28/02/2010 18:08
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 .