Avatar billede detziaw Nybegynder
22. marts 2012 - 19:59 Der er 10 kommentarer og
1 løsning

Problemer med update-funktionen.

Da jeg er total nybegynder i PHP, mangler jeg lige en hjælpende hånd, til at komme videre med mit nyhedsscript. Jeg har fået tilføj-delen iorden, men nu mangler jeg rette-delen, og det er her I kommer ind i billedet.

Jeg har en edit_nyhed.php der ser således ud:

<?
include('config.php');

if( isset( $_GET['id'] ) ) // checker om der er sat et id.
$id = $_GET['id'];
else
$id = null;


if( $id !== null ) {
$resultat = mysql_query("select * FROM nyhedsys WHERE id = '$id'");
$raekke = mysql_fetch_array($resultat);
if( $raekke == null )
die("Fandt ikke nyheden");
?>

<form action="edit_nyhed_sql.php" method="post">
<input type="hidden" value="<? echo $raekke[id] ?>" name="id"> <!-- skjult id -->
Overskrift:<br> <input type="text" value="<? echo"$raekke[headline]" ?>" name="headline"><br> <!-- overskriften til den valgte nyhed -->
<br>
Nyhed:<br> <textarea name="news" rows="10" cols="35"><? echo"$raekke[news]" ?></textarea></b></p> <!-- inholdet af den valgte nyhed -->
<br>
<input type=submit value="Opdater" name="submit" >
</form>
<?php
}
else {
$sql = "SELECT id, headline FROM nyhedsys ORDER BY headline"; // henter info, til en oversigt, så du kan vælge hvilken nyhed du vil rette.
$res = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($res)) {
print '<a href="edit_nyhed.php?id=' . $row[0] . '">'.
stripslashes($row[1]). '</a><br />';
}
}
?>

Og så har jeg en edit_nyhed_sql.php som ser således ud:

<?
include ('config.php');

$headline = addslashes($_POST[headline]);
$news = addslashes($_POST[news]);
$id = $_GET['id'];

# Det samme som før, bare med UPDATE i stedet for INSERT eller DELETE.

$mysql_query="UPDATE nyhedsys SET headline='$headline', news='$news' WHERE id='$id'" or die(mysql_error());

header("Location: nyheder.php");

?>

Den lister nyhederne op som den skal, og jeg kan fint vælge nyhederne, og den udskriver både overskrift og selve nyhedsteksten. Når jeg så vil update, går den bare videre til min nyheder.php-side UDEN at opdatere, og uden at melde fejl. Efter hvad jeg har læst i andre tråde, er jeg næsten sikker på, at det er "WHERE ID=" den er gal med, men jeg er ikke i stand til selv at se hvordan jeg skal GET min id så UPDATE læser og finder den korrekt til at opdatere. Nogen der kan hjælpe mig? :-)
Avatar billede erikjacobsen Ekspert
22. marts 2012 - 20:21 #1
Ret

$mysql_query="UPDATE nyhedsys SET headline='$headline', news='$news' WHERE id='$id'" or die(mysql_error());

til

$mysql_query=mysql_query("UPDATE nyhedsys SET headline='$headline', news='$news' WHERE id='$id'") or die(mysql_error());

Og det er godt du leger med det, men du skal holde med at gøre som i sidste årtusind, og gøre det korrekt: http://www.eksperten.dk/guide/1480

Indtil du gør det korrekt, så skal du lade være med at lægge det på nettet.
Avatar billede detziaw Nybegynder
22. marts 2012 - 20:28 #2
Tak for link, det vil jeg helt sikkert læse igennem :)

Dog virker rettelsen ikke, det giver samme resultat.
Avatar billede erikjacobsen Ekspert
22. marts 2012 - 20:31 #3
OOkay, det skal nok være

  $id = $_POST['id'];

for det er jo et hidden felt i din <form>
Avatar billede detziaw Nybegynder
22. marts 2012 - 20:42 #4
Samme resultat :-)
Avatar billede olebole Juniormester
22. marts 2012 - 21:07 #5
<ole>

Hvis $id indeholder et tal, så udelad gåseøjnene omkring værdien i SQL'en:

$mysql_query=mysql_query("UPDATE nyhedsys SET headline='$headline', news='$news' WHERE id=$id") or die(mysql_error());

/mvh
</bole>
Avatar billede olebole Juniormester
22. marts 2012 - 21:09 #6
- og da du er ved at lære, kan du ligeså godt lære at bruge prepared statements med det samme. Prøv at kikke på denne guide
Avatar billede erikjacobsen Ekspert
22. marts 2012 - 21:10 #7
Må vi se din kode, som den er nu?
Avatar billede erikjacobsen Ekspert
22. marts 2012 - 21:11 #8
Og du kan med fordel, mens du tester, lige udkommentere linien:

  // header("Location: nyheder.php");

så du er sikker på at se en evt fejlbesked.
Avatar billede inteeeL Nybegynder
22. marts 2012 - 21:21 #9
<?php
include('config.php');

$id = ( isset( $_GET['id']) && is_numeric( $_GET['id']) ? (int)$_GET['id'] : null);

if( $id !== null) {
    $resultat = mysql_query("select * FROM nyhedsys WHERE id = '$id'");
    $raekke = mysql_fetch_array($resultat);
    if( mysql_num_rows( $resultat) == 0) {
        die("Fandt ikke nyheden");
    }
    else {
        $headline = $raekke['headline'];
        $news = $raekke['news'];
        if( isset( $_POST['do']) && $_POST['do'] == 'Opdater') {
            $headline = addslashes($_POST['headline']);
            $news = addslashes($_POST['news']);

            # Det samme som før, bare med UPDATE i stedet for INSERT eller DELETE.

            if( mysql_query( "UPDATE nyhedsys SET headline='$headline', news='$news' WHERE id='$id'")) {
                header("Location: nyheder.php");
            }
            else {
                die(mysql_error());
            }
        }
?>

<form action="edit_nyhed.php?id=<? echo $raekke['id'] ?>" method="post">
    Overskrift:<br> <input type="text" value="<? echo $headline; ?>" name="headline"><br> <!-- overskriften til den valgte nyhed -->
    <br>
    Nyhed:<br> <textarea name="news" rows="10" cols="35"><? echo $news; ?></textarea></b></p> <!-- inholdet af den valgte nyhed -->
    <br>
    <input type=submit value="Opdater" name="do" >
</form>

<?php
    }
}
else {
    $sql = "SELECT id, headline FROM nyhedsys ORDER BY headline"; // henter info, til en oversigt, så du kan vælge hvilken nyhed du vil rette.
    $res = mysql_query($sql) or die(mysql_error());
    while($row = mysql_fetch_array($res)) {
        print '<a href="edit_nyhed.php?id=' . $row[0] . '">'.
        stripslashes($row[1]). '</a><br />';
    }
}
?>


Som du vil kunne se har jeg samlet det i en fil (så må du selv rette i det). Jeg tænkte, at der manglede lidt struktur/overblik, så har forbeholdt mig rettigheden til at ændre lidt hist og pist. Jeg vedlægger et svar med forventning om, at scriptet virker, og da jeg ved, at erikjacobsen slet ikke samler på point, går jeg ud fra, at dette er i orden - ellers må personen lige sige til.

Som erikjacobsen siger bør du kigge nærmere på sikkerhed (læs mere om den guide, han henviser til). :-)
Avatar billede detziaw Nybegynder
22. marts 2012 - 21:31 #10
Scriptet i den samlede fil virker som det skal, mange tak for hjælpen :)

Eftersom der står du (erikjacobsen) ikke samler på point, giver jeg point til inteeeL ;)

Tak for hjælpen alle 3 :)
Avatar billede erikjacobsen Ekspert
22. marts 2012 - 21:36 #11
Man bør ikke bruge

  <? echo $raekke['id'] ?>

men

  <?php echo $raekke['id'] ?>
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