Indsætter escapekaraktere i forespørgelsestreng
Jeg har nogle sider, som viser diverse udtræk fra db. Hver kolonne har deres egen overskrift, og klikker man på den, får man sorteret udtrækket efter overskriften. Men den opfører sig mærkeligt i enkelte tilfælde.Koden som laver overskrifterne og sætter sorteringsvariablen:
<tr>
<td class="content" width="5" valign="top"> </td>
<td width="70px" class="content" valign="top"><b><a href="#" onClick="return setSort('t.tilbud asc');">Tilb. nr</a></b></td>
<td width="110px" class="content" valign="top" style="text-align: left;"><b><a href="#" onClick="return setSort('forventet');">Tilb. forv. dato</a></b></td>
<td width="100px" class="content" valign="top"><b><a href="#" onClick="return setSort('projektleder');">Projektleder</a></b></td>
<td class="content" valign="top"><b><a href="#" onClick="return setSort('kunde');">Kunde</a></b></td>
<td class="content" valign="top"><b><a href="#" onClick="return setSort('bygherre');">Bygherre</a></b></td>
</tr>
Koden som fanger variablen, og sætter sorteringsvariablen til den rigtige sortering:
if (isset($_POST['sort'])) {
if ($_POST['sort'] == projektleder) {
$sort = "IF((t1.r1 = '' || t1.r1 IS NULL),1,0), t1.r1 ASC";
} else if ($_POST['sort'] == forventet){
$sort = "IF((t1.r4 = 0000-00-00 || t1.r4 IS NULL),1,0), t1.r4 ASC";
} else if ($_POST['sort'] == kunde){
$sort = "IF((t1.r9 = '' || t1.r9 IS NULL),1,0), t1.r9 ASC";
} else if($_POST['sort'] == bygherre){
$sort = "IF((t1.r18 = '' || t1.r18 IS NULL),1,0), t1.r18 ASC";
} else {
$sort = $_POST['sort'];
}
}
Query:
$query = "SELECT t.tilbud, t.rev, t1.tilbudsnummer, t1.r2, UNIX_TIMESTAMP(t1.r4) as r4, t1.r9, t1.r18, t.status, k.navn1, t1.r14, t1.r1, t5.r504, t5.r526a, (TO_DAYS(t1.r4)-TO_DAYS(NOW())) AS datemark FROM tilbud AS t, tilbud0 AS t1 LEFT JOIN kunde AS k ON t1.r14=k.id LEFT JOIN tilbud5 AS t5 ON t1.tilbudsnummer=t5.tilbudsnummer WHERE t1.tilbudsnummer=t.id && (t5.r526a='0' || t5.r526a IS NULL)".$betingelse."ORDER BY $sort, t.id ASC";
Fejlen opstår når jeg først har vist en sortering på alle projektledere, og derefter vælger kun at få vist får en projektleder, så får jeg følgende fejl:
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 '\'\' || t1.r1 IS NULL),1,0), t1.r1 ASC, t.id ASC' at line 3
Selve queryen ser nu sådanne ud:
SELECT t.tilbud, t.rev, t1.tilbudsnummer, t1.r2, UNIX_TIMESTAMP(t1.r4) as r4, t1.r9, t1.r18, t.status, k.navn1, t1.r14, t1.r1, t5.r504, t5.r526a, (TO_DAYS(t1.r4)-TO_DAYS(NOW())) AS datemark FROM tilbud AS t, tilbud0 AS t1 LEFT JOIN kunde AS k ON t1.r14=k.id LEFT JOIN tilbud5 AS t5 ON t1.tilbudsnummer=t5.tilbudsnummer WHERE t1.tilbudsnummer=t.id && (t5.r526a='0' || t5.r526a IS NULL) && t1.r1 = '12037' ORDER BY IF((t1.r1 = \'\' || t1.r1 IS NULL),1,0), t1.r1 ASC, t.id ASC
Det er klart at det er på grund af de 2 escapekaraktere \\, men jeg har dem da ingen steder i koden. Og går jeg bare ind på siden, og fra start vælger en bestemt projektleder, så fejler den ikke. Hvad kan grunden og løsningen hertil være?