Avatar billede welcro Nybegynder
08. januar 2006 - 02:43 Der er 3 kommentarer og
1 løsning

simpel update virker ikke

Hej experter
jeg vil gerne have en stump kode til at hente og rette en eksisterende post, men hvad gør jeg galt, det er sikkert bare noget syntaks?, men jeg kan ikke se hvor det går galt, output er: Resource id #3
og der ændres ikke i den valgte post
jeg har også prøvet med formen i en html for sig
min kode:
<form action="<?php print $_server[PHP_SELF] ?>" method="post">
ID number:<br />
<input enctype="text/plain" name="id" size="5"><br />
<input type="submit" value="close">
</form>
<?php
$conn = mysql_connect("localhost","yyy","zzz");
mysql_select_db("ppp",$conn);
$sql = "select * from main";
if (isset($_POST[id])) {$sql = "UPDATE main set status ='close'";}
$result = mysql_query($sql, $conn) or die(mysql_error());
echo $result;
Avatar billede rednex Nybegynder
08. januar 2006 - 03:26 #1
Der er lige et par ting... Linien '$sql = "select * from main";' bliver ikke brugt til noget. Og din update query mangler vist også noget. Mon ikke den skal hedde noget i retning af:

$sql = "UPDATE main SET status = 'close' WHERE id = " . mysql_real_escape_string($_POST['id']);

Og nu kunne jeg jo forestille mig at du lagde i ovnen til også at hente data UD af databasen, så du får lige et eksempel på en select query også :o)

$res = mysql_query('SELECT a, b, c FROM tabel WHERE x = 7');
while ($row = mysql_fetch_assoc($res))
{
echo "a={$row['a']}, b={$row['b']}, c={$row['c']}<br>\n";
}
mysql_free_result($res);
Avatar billede welcro Nybegynder
08. januar 2006 - 13:56 #2
Tak for det rednex, du har reddet resten af min vigende hårpragt:-), men kan du ikke kort forklare mig: WHERE id = " . mysql_real_escape_string?
jeg skal lige pusle lidt med validering, for denne query giver ikke fejl, hvis den valgte post ikke findes.
jeg har fået mine select query'er til at virke, men prøver dit forslag, jeg tror det kan spare mig nogen linier kode!
smid et svar, så du kan få points
Avatar billede rednex Nybegynder
08. januar 2006 - 14:14 #3
Det var godt at du kunne bruge det :o)

mysql_real_escape_string() bruges til at "escape" tegn som anses for at være special-tegn i MySQL. Det gør at man ikke kan lave f.eks. SQL-injection angreb.

Et eksempel på SQL-injection er hvis man f.eks. benytter ' i input for at få en SQL sætning til at gøre noget andet end det var meningen.

F.eks. kan man i et login-system som ikke er sikret, få SQL queryen til at returnere den første bruger i databasen uden at kende hverken brugernavn eller password. Mange login systemer er kodet så det bare checker om SQL'en returnerede en post fra databasen når man spørger efter brugernavn og password, og hvis det er tilfældet bliver du logget ind.

Derfor er det en god idé at køre ALT hvad brugeren har mulighed for at manipulere, gennem en mysql_real_escape_string() inden du sender det videre til databasen.
Avatar billede rednex Nybegynder
08. januar 2006 - 14:21 #4
mysql_query('UPDATE...') returnerer altid TRUE hvis SQL'en ikke fejler noget, også selvom der ikke blev ændret noget. Du behøver lave en SELECT først, for at finde ud af om der er noget at opdatere. Du kører bare din UPDATE og benytter mysql_affected_rows() (http://dk2.php.net/manual/en/function.mysql-affected-rows.php) for at finde ud af om noget blev rettet.

Eks.:

mysql_query("UPDATE tabel SET a='test' WHERE id=7");
if (!mysql_affected_rows())
echo "Posten findes ikke";
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester