You have an error in your SQL syntax;

Status
Niet open voor verdere reacties.

mick93

Gebruiker
Lid geworden
31 mrt 2010
Berichten
90
Hallo allemaal,

Als ik op een forum een topic maak waarin het symbool ' in de titel of de tekst zelf staat, krijg ik de volgende melding:

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 'main', '0', '0', '1296083810','2011-01-27 12:11:50')' at line 1

Ik vraag me af waar het aan ligt, ik heb een stukje code meegestuurd, misschien weten jullie het:

PHP:
// set the default timezone to use. 
date_default_timezone_set('CET');
$timer = date('Y-m-d h:i:s');

if(strip_tags($_POST['Submit']) && strip_tags($_POST['title']) && strip_tags($_POST['topic_text'])){


$time = time()+ (60 * 5);

$title = strip_tags($_POST['title']);
$topic_text=strip_tags($_POST['topic_text']);
$forum=strip_tags($_POST['forum']);

if ($forum == "Crew" && $fetch->crew != "0"){
mysql_query("INSERT INTO `topics` (`id`, `username`, `title`, `topictext`, `forum`, `locked`, `sticky`, `lastreply`,`made`,`crew`) VALUES ('', '$username', '$title1', '$topictext', '$forum', '0', '0', '$time','$timer','$fetch->crew');") or die (mysql_error());
}else{
mysql_query("INSERT INTO `topics` (`id`, `username`, `title`, `topictext`, `forum`, `locked`, `sticky`, `lastreply`,`made`) VALUES ('', '$username', '$title', '$topic_text', '$forum', '0', '0', '$time','$timer');") or die (mysql_error());
}
mysql_query("UPDATE users SET lasttop='$time' WHERE username='$username'");
echo "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=forumleft.php?forum=$forum'>";


}



?>
<html>
<head>
<script language=JavaScript>
function so(dis)
{
for (i=0;i<dis.elements.length;i++){ 
	if (dis.elements[i].type=='submit')
	   dis.elements[i].style.visibility='hidden';
	}
	if(fs==false){
		 fs=true;
		 return true;
	}else
 		return false;
	}
	function goaway()
{
for(i=0;i<document.forms.length;i++)
 document.forms[i].onsubmit = function() {return so(this);};
}
</script>
<link href="../includes/in.css" rel="stylesheet" type="text/css">
</head>

<body onLoad="goaway();">
<form name="form1" method="post" action="">
  <table width=551 border=1 align="center" cellpadding=2 cellspacing=0 class=thinline rules=none>
    <tr> 
      <td class=header><div align="center">Forum</div></td>
    </tr>
    <tr> 
      <td bgcolor=black height=1></td>
    </tr>
    <tr bgcolor=white> 
      <td align=center class=tip>One topic every 5 minutes</td>
    </tr>
    <tr> 
      <td bgcolor=black height=2></td>
    </tr>
    <tr> 
      <td height="41"><table width="100%" border="0" cellspacing="3" cellpadding="0">
          <tr> 
            <td width="38%">Topic title: </td>
            <td width="62%"><input name="title" type="text" id="title" maxlength="100"></td>
          </tr>
          <tr> 
            <td>Topic text:</td>
            <td><textarea name="topic_text" cols="60" rows="10" id="topic_text"></textarea></td>
          </tr>
          <tr> 
            <td>&nbsp;</td>
            <td><input type="submit" name="Submit" value="Submit"></td>
          </tr>
          <input type="hidden" name="forum" value="<?php echo "$forum"; ?>">
        </table></td>
    </tr>
    <tr> 
      <td bgcolor=black height=2></td>
    </tr>
    <tr bgcolor=white> 
      <td align=right ><a href='javascript:history.goback(-1)'><font color="#000000">Back</font></a></td>
    </tr>
  </table>
</form>
</body>
</html>
<? } ?>

Ik hoop echt dat iemand van jullie me kan helpen, kom er echt niet uit. :(
 
Mick,

Ik zie dat je de waarden uit je formulier wel van HTML tags stript, maar daar ook ophoud. Ik kan je aanraden om ook de functie mysql_real_escape_string() te gebruiken. Deze escaped speciale charaters (zoals de ' die jouw probleem veroorzaakt).

Tevens wil ik je nog meegeven dat je in je eerste if, beter een isset() kan gebruiken. Deze controleert of de variabele bestaat, en ongelijk is aan null of false.

EDIT: Ik zie trouwens dat je een META tag verstuurd voordat je je <html> of <head> tag hebt geopend. Je kunt beter deze meta tag(s) opslaan in een variabele, en deze op de juiste plek echoën.
 
Laatst bewerkt:
Of de meta-tag veranderen in de PHP-functie "header()" aangezien hij voor elke output wordt aangeroepen.
 
Mick,

Ik zie dat je de waarden uit je formulier wel van HTML tags stript, maar daar ook ophoud. Ik kan je aanraden om ook de functie mysql_real_escape_string() te gebruiken. Deze escaped speciale charaters (zoals de ' die jouw probleem veroorzaakt).
Hoe zou ik dat dan moeten neerzetten denk je? Want dat had ik afgelopen nacht ook nog geprobeerd maar toen liep alles stuk. :P
 
Mick,

Ik heb het niet kunnen testen, maar dit zou moeten werken:
(heb ook de isset() toegevoegd)

PHP:
// set the default timezone to use. 
date_default_timezone_set('CET');
$timer = date('Y-m-d h:i:s');
 
if(isset($_POST['Submit']) && isset($_POST['title']) && isset($_POST['topic_text']))
{
    $time = time()+ (60 * 5);
    $title = mysql_real_escape_string(strip_tags($_POST['title']));
    $topic_text = mysql_real_escape_string(strip_tags($_POST['topic_text']));
    $forum = mysql_real_escape_string(strip_tags($_POST['forum']));

    if ($forum == "Crew" && $fetch->crew != "0")
    {
        mysql_query("INSERT INTO `topics` (`id`, `username`, `title`, `topictext`, `forum`, `locked`, `sticky`, `lastreply`,`made`,`crew`) VALUES ('', '$username', '$title1', '$topictext', '$forum', '0', '0', '$time','$timer','$fetch->crew');") or die (mysql_error());
    }
    else
    {
        mysql_query("INSERT INTO `topics` (`id`, `username`, `title`, `topictext`, `forum`, `locked`, `sticky`, `lastreply`,`made`) VALUES ('', '$username', '$title', '$topic_text', '$forum', '0', '0', '$time','$timer');") or die (mysql_error());
    }
    mysql_query("UPDATE users SET lasttop='$time' WHERE username='$username'");
    echo "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=forumleft.php?forum=$forum'>";
}
 
Mick,

Ik heb het niet kunnen testen, maar dit zou moeten werken:
(heb ook de isset() toegevoegd)

PHP:
// set the default timezone to use. 
date_default_timezone_set('CET');
$timer = date('Y-m-d h:i:s');
 
if(isset($_POST['Submit']) && isset($_POST['title']) && isset($_POST['topic_text']))
{
    $time = time()+ (60 * 5);
    $title = mysql_real_escape_string(strip_tags($_POST['title']));
    $topic_text = mysql_real_escape_string(strip_tags($_POST['topic_text']));
    $forum = mysql_real_escape_string(strip_tags($_POST['forum']));

    if ($forum == "Crew" && $fetch->crew != "0")
    {
        mysql_query("INSERT INTO `topics` (`id`, `username`, `title`, `topictext`, `forum`, `locked`, `sticky`, `lastreply`,`made`,`crew`) VALUES ('', '$username', '$title1', '$topictext', '$forum', '0', '0', '$time','$timer','$fetch->crew');") or die (mysql_error());
    }
    else
    {
        mysql_query("INSERT INTO `topics` (`id`, `username`, `title`, `topictext`, `forum`, `locked`, `sticky`, `lastreply`,`made`) VALUES ('', '$username', '$title', '$topic_text', '$forum', '0', '0', '$time','$timer');") or die (mysql_error());
    }
    mysql_query("UPDATE users SET lasttop='$time' WHERE username='$username'");
    echo "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=forumleft.php?forum=$forum'>";
}

He Arend,

Helaas lost dat het nog steeds niet op, krijg nog steeds hetzelfde probleem
 
Als ik jou was, zou ik deze regel nog eens doorlopen:
PHP:
mysql_query("INSERT INTO `topics` (`id`, `username`, `title`, `topictext`, `forum`, `locked`, `sticky`, `lastreply`,`made`,`crew`) VALUES ('', '$username', '$title1', '$topictext', '$forum', '0', '0', '$time','$timer','$fetch->crew');") or die (mysql_error());

en dan voornamelijk de variabele $title1 en $topictext =]
 
Sorry Arend, hij lost het wel op! Foutje van mijn kant, hartstikke bedankt!
 
Als ik jou was, zou ik deze regel nog eens doorlopen:
PHP:
mysql_query("INSERT INTO `topics` (`id`, `username`, `title`, `topictext`, `forum`, `locked`, `sticky`, `lastreply`,`made`,`crew`) VALUES ('', '$username', '$title1', '$topictext', '$forum', '0', '0', '$time','$timer','$fetch->crew');") or die (mysql_error());

en dan voornamelijk de variabele $title1 en $topictext =]

Hoezo dan? Want hij werkt nu naar behoren..
 
haha mooi zo :D

die variabelen, heb je die al nagekeken? want in dat stukje code wat jij laat zien staan geen variabelen genaamd $title1 en $topictext, maar ze worden wel gebruikt in de SQL.
 
haha mooi zo :D

die variabelen, heb je die al nagekeken? want in dat stukje code wat jij laat zien staan geen variabelen genaamd $title1 en $topictext, maar ze worden wel gebruikt in de SQL.

Oh zo, ik zie wat je bedoelt. Klopt inderdaad.. Binnenkort toch nog maar eens naar dit script kijken :P
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan