du har inget name-attribut i dina input-taggar.
t.ex
<input id='namn' name='namn' type='text' value='" + info + "' size='30'/>";
9 svar · 894 visningar · startad av PollyJuice
Hej,
jag försöker skapa ett script som uppdaterar antal timmar man arbetat på ett projekt. Tyvärr så funkar inte det jag har skrivit. Kan någon tala om vad jag gjort för fel?
Javascript-koden:
function redigeraTimmar()
{
a = xmlhttp.responseXML.documentElement.getElementsByTagName("projekt");
for (i=0;i<a.length;i++)
{
namnet = a[i].getElementsByTagName("namn");
kalle = namnet[0].firstChild.nodeValue;
if(kalle == info)
{
tiden = a[i].getElementsByTagName("antaltimmar");
hej = "<form name='form2' method='post' action='sparatimmar.php'>";
hej += "<label>Lägg till timmar:</label><br>";
hej += "<input id='namn' type='text' value='" + info + "' size='30'/>";
hej += "<input id='timmar' type='text' value='" + tiden[0].firstChild.nodeValue + "' size='30'/>";
hej += "<input id='send' type='submit' value='Lägg till timmar' /></form>";
document.getElementById('rightcontainer').innerHTML=hej;
}
}
}
och så PHP-koden:
<?php
$namnet= $_POST['namn'];
$timmarna= $_POST['timmar'];
$con = mysql_connect("host","användarnamn","lösenord");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("databasnamn", $con);
mysql_query("UPDATE projekt SET 'timmar' = $timmarna WHERE 'namn' = '$namnet'");
mysql_close($con);
?>
du har inget name-attribut i dina input-taggar.
t.ex
<input id='namn' name='namn' type='text' value='" + info + "' size='30'/>";
Och:
mysql_query("UPDATE projekt SET timmar = " . $timmarna . " WHERE namn = '" . $namnet . "'");
mvh
Tack, änglar! Nu funkar det!
Jag hade skrivit SQL-frågan så här.
mysql_query("UPDATE projekt SET timmar = $timmarna WHERE namn = '$namnet'");
Om du använder vanliga citationstecken (") runt strängen så tolkar php innehållet och du får dit innehållet i variablerna.
Om du använder enkla citationstecken ('), apostrofer, så tolkas strängen inte utan strängen skickas som den är, med variabelnamnen istället för innehållet.
Bra där, drew. Jag kan inte php egentligen - jag bara fuskar. :)
$timmarna = mysql_real_escape_string($timmarna);
$namnet = mysql_real_escape_string($namnet);
mysql_query("UPDATE projekt SET timmar = '$timmarna' WHERE namn = '$namnet'");
Använd mysql_real_escape_string för att skydda dig mot SQL-injektioner, på alla fält, även sådana som du antar bara kommer innehålla nummer, såsom $timmarna i detta fall! Sätt enkel-fnuttar runt alla strängar i frågan, även sådana som du antar bara kommer innehålla nummer!
Kontrollera utöver det att $timmarna är ett nummer, och be användaren fylla i ett annat värde annars.
Kan man skriva
$namnet= mysql_real_escape_string($_POST['namn']);
?
Jag har inte tänkt på säkerhetsfrågorna överhuvudtaget, men det skulle definitivt kunna knuffa upp mitt betyg.
Man ska inte köra mysql_real_escape_string() på fält som ska innehålla nummer. Man ska använda intval() om det är ett heltal eller floatval() om den har decimaler.
Enkelfnuttar runt tal kan ge felmess från databasen eller hela frågan kan ignoreras. Sätt inte fnuttar runt tal, försäkra dig om att det verkigen är siffror istället.
Säkerheten är mycket viktig, frågan är inte om någon försöker hacka sig in utan när det händer.