Permalänk

Problem med mysql-query

Hej!

Det är så att jag håller på med mitt forum och har fått ett litet problem. Jag har kodat forum förut men nu vill det verkligen inte funka.

Jag har gjort en funktion för att redigera inlägg. Men så fort jag försöker uppdatera ett inlägg som ligger under topic som har ett ID på 10+ så går det inte.

Så här ser min query ut:

$editreply = mysql_query("UPDATE forum_replys SET text='<pre><font face=\"Helvetica\">".$_POST['newedit']."</font></pre>' WHERE id='".$_GET['edit']."'");

$_GET['edit'] är ID't på inlägget som ska uppdateras.

Alla inlägg man ändrar som ligger under topic som har ID under 10 funkar utan problem, det är så fort topic ID ligger på 10 och uppåt som det inte vill.

Vad är det som har blivit fel? Säg till om ni behöver mer utav koden för att försöka hitta felet. Jag kan verkligen inte hitta det. :S

Tack på förhand!

lundahldaniel

Visa signatur

MacBook Pro
www.mcgaraget.org
Citera för garanterat svar!

Permalänk
Entusiast

Knepigt.

$editreply = mysql_query("UPDATE forum_replys SET text='<pre><font face=\"Helvetica\">" . (string)$_POST['newedit'] . "</font></pre> WHERE id='" . (int)$_GET['edit'] . "'");

I den raden lagt till (string) och (int) före variablerna, det behövs inte om alla variabler innehåller precis det dem skall, men det skadar inte att vara på säkra sidan.
Om det fungerar, är det dags att kolla var någonstans det genereras ogiltiga tecken i dina $_POST och $_GET variabler.

Kolla också upp vad $_POST['newedit'] innehåller exakt. Innehåller den citattecken och andra styr/escape-tecken, kan detta påverka sql-queryn.
Detta kan vara en öppning för så kallade SQL-injections.

Sedan vore det bra om du ger oss HTML koden som innehåller det aktuella formuläret.
Jag gissar också att $_POST och $_GET -variablerna inte har "bearbetats" på något sätt.
(Tips: Använd aldrig rådata från $_GET och $_POST direkt i en sql-query. Bearbeta, filtrera och säkerställ alltid innehållet innan data lämnas över till sql-queryn.)

Visa signatur

Bästa programmen till Linux - v2.0
Linux-guide: Val av grafisk miljö. (Att välja distribution).
-
Everyone should have a SGoC in their systems (SGoC: SysGhost on a Chip)

Permalänk

Eftersom jag inte är helt säker på det här med säkerhet när det gäller querys osv så gjorde det jag tror du ville att jag skulle göra.

Istället för att sätta in $_POST och $_GET direkt i queryn så gjorde jag 2 nya variabler med mysql_real_escape_string på $_POST och $_GET. Var det något sådant du menade?

Det löste i allafall mitt problem Nu funkar det som det ska. (Y) Här är formuläret:

echo "<form method=\"post\" action=\"index.php?page=forum&subcat=$_GET[subcat]&topic=$_GET[topic]&edit=$_GET[edit]\">"; echo "<table cellspacing=\"3\" cellpadding=\"3\">"; echo "<tr><td><b>Reply:</b></td></tr>"; echo "<tr><td><textarea name=\"newedit\" style=\"width:400px; height:200px;\">$replytext</textarea></td></tr>"; echo "<tr><td><input type=\"submit\" name=\"replyedit\" value=\"Save changes\" style=\"background:rgba(0, 0, 0, 0.5); border:1px solid #333333; color:#fff;\" /></td></tr>"; echo "</table>"; echo "</form>";

Tackar så mycket för svaret!

Visa signatur

MacBook Pro
www.mcgaraget.org
Citera för garanterat svar!

Permalänk
Entusiast
Skrivet av lundahldaniel:

Eftersom jag inte är helt säker på det här med säkerhet när det gäller querys osv så gjorde det jag tror du ville att jag skulle göra.

Istället för att sätta in $_POST och $_GET direkt i queryn så gjorde jag 2 nya variabler med mysql_real_escape_string på $_POST och $_GET. Var det något sådant du menade?

Det löste i allafall mitt problem Nu funkar det som det ska. (Y) Här är formuläret:

echo "<form method=\"post\" action=\"index.php?page=forum&subcat=$_GET[subcat]&topic=$_GET[topic]&edit=$_GET[edit]\">"; echo "<table cellspacing=\"3\" cellpadding=\"3\">"; echo "<tr><td><b>Reply:</b></td></tr>"; echo "<tr><td><textarea name=\"newedit\" style=\"width:400px; height:200px;\">$replytext</textarea></td></tr>"; echo "<tr><td><input type=\"submit\" name=\"replyedit\" value=\"Save changes\" style=\"background:rgba(0, 0, 0, 0.5); border:1px solid #333333; color:#fff;\" /></td></tr>"; echo "</table>"; echo "</form>";

Tackar så mycket för svaret!

Helt rätt! Alla tummar upp.

Visa signatur

Bästa programmen till Linux - v2.0
Linux-guide: Val av grafisk miljö. (Att välja distribution).
-
Everyone should have a SGoC in their systems (SGoC: SysGhost on a Chip)

Permalänk
Medlem
Citat:

"stället för att sätta in $_POST och $_GET direkt i queryn så gjorde jag 2 nya variabler med mysql_real_escape_string på $_POST och $_GET. Var det något sådant du menade?"

Skrivet av SysGhost:

Helt rätt! Alla tummar upp.

Snällt av dig att upplysa, vill bara tillägga att $_GET[''] kan vara lämplig att kontrollera på flera sett, exempel om det är en siffra? är du säker på det är en siffra etc, kan va värt o ha i åtanke när det kommer till filtrera och escape:a data.

Lycka till med forumet!