Gå til innhold

[Løst] spørring mot databasen funker på en server men ikke en annen.


Anbefalte innlegg

Hei igjen. Har begynt å legge alt av arbeidet mitt over på en annen server, og når jeg gjorde dette så var det noe som pluttselig ikke funket.

Dette er koden

$sql = "UPDATE
	posts				
SET
	content = '".mysql_real_escape_string($nohtml)."'
WHERE
	posts_id =".mysql_real_escape_string($_GET['id']);

 

Dette funker på min server, men ikke på den nye serveren. Jeg skjønner ikke hvorfor. Er det noen som kan forklare meg en alternativ måte å skrive dette på, har prøvd noen, men ender stort sett i at sjekkene mine fullføres (og alt er greit), men det kommer ikke noe innhold inn til databasen..

 

Sjekka med en mysql_error(); og feilmeldingen er:

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 '' at line 6. Det artige er at databasen er den samme som tidligere. Jeg skjønner ingenting. :S

Lenke til kommentar
Videoannonse
Annonse

det er vel fordi den ene er snill med deg og fikser opp i feilen for deg.

 

prøv med

$sql = sprintf("UPDATE %s                           
       SET content = '%s'
       WHERE posts_id = '%s'", 
       mysql_real_escape_string($nohtml), 
       mysql_real_escape_string($_GET['id']));

 

Jeg personlig vil alltid anbefale å bruke "sprintf" når man skal skrive strenger med variable, da det blir mer oversiktilig.

 

Edit: Det jeg endret var egentli bare å ha apostroffer rundt siste variabelen i spørringen. Noen databaser fikser dette selv, mens andre gir feilmelding.

Endret av etse
Lenke til kommentar

Ja, da har jeg prøvd detta da

Edit:"Endra litt på den spørringa, fordi prøvde din rent, og da sa den at den mangla ett parameter, så la til posts, siden den ikke endrer seg".

 

$poststest = 'posts';

$sql = sprintf("UPDATE %s                           
       SET content = '%s'
       WHERE posts_id = '%s'", 
	$poststest,
       mysql_real_escape_string($nohtml), 
       mysql_real_escape_string($_GET['id']));	

 

Det som skjer da er at den sier det går bra, men det gjør ikke det x) er ingenting som blir endra i databasen.. -_-

Sjekken jeg bruker er

 

if(!$result)
{
echo 'Du har skrevet: '.$nohtml.'<br />';
echo 'Svaret kunne ikke lagres. Prøv igjen senere<br />';
echo mysql_error();
}
else
{
echo 'Svaret er lagret, <a href="topic.php?id='.$fallback.'">trykk her</a> eller vent 10 sekunder til du blir sendt videre.';
echo '<meta http-equiv="refresh" content="10;url=topic.php?id='.$fallback.'">';
}

Endret av LimeCut
Lenke til kommentar

prøv følgende kode:

$sql = sprintf("UPDATE posts                         
       SET content = '%s'
       WHERE posts_id = '%s'", 
       mysql_real_escape_string($nohtml), 
       mysql_real_escape_string($_GET['id']));

printf("Query: %s<br>\n", $sql);

 

printf (og fprintf, sprintf) er noe som heter formatert printing, og er noe som er standard i nesten alle programmeringsspråk. Og går ut på at man kan skrive formatert tekst.

 

%s betyr at det som er der skal byttes ut en en string i fra paramterene,

%d = heltalls-integer

 

Da kan man f.eks. skrive:

$int = 4;
$str = "test";
$var = sprintf("Integer: %d, string: %s", $int, $str);

 

Ser mer info her: http://www.php.net/manual/en/function.sprintf.php

 

Men kjør koden jeg ga over, og se hva som faktisk blir skrevet ut. Kan det være at argumentene ikke er slik du tenker? Post gjerne hva som blri skrevet på skjermen som den faktiske spørringen.

 

Edit: Det jeg tror skjer, er at verdien du fpr fra $_GET['id'] ikke er helt det du forventer, og at den derfor oppdaterer 0 rader, men gjør det ordentlig. Som en liten notis til fremtidig debugging: Skriv ut alle spørringene som kan være med å lage problemet. Se at de faktisk er slik du forventer deg at de skal være, og at verdiene er riktige.

Endret av etse
Lenke til kommentar

Heisann igjen.

 

Prøvde den koden du gav meg nå, og den siste linja du gav meg, fikk jeg:

Query: UPDATE posts SET content = 'Ja de er søte! assadd' WHERE posts_id = ''

Antar det er $_GET['id'] som blir tom da. Ser at adresselinja endrer seg fra editpost.php?id=8, til editpost.php etter formen har posta.

Er dog usikker på hvordan jeg kan fikse dette :S :O

 

Edit: Føler jeg har prøvd alle slags mulige workarounds nå, og ingenting poster til databasen i hvert fall -_-

 

Edit2: Jeg fant ut av det. Det var pga action i formen det bugga. Den sendte meg til en side uten id, og derfor var det ingen id å oppdatere. Men fikk fiksa det nå. Takk for hjelpen så langt, og for en allright måte å skrive mysql injections på :)

Endret av LimeCut
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...