Avatar billede sabumnim Novice
18. februar 2013 - 00:41 Der er 10 kommentarer og
1 løsning

Forskellige switches bruger samme formular

Hej alle

Jeg har et spørgsmål, som jeg håber I kan hjælpe med.

Jeg er ved at opbygge et admin modul til et website, og har her fået strikket noget sammen på baggrund af tidligere kode og inspiration herfra.

Pt. har jeg via en switch fået en EDIT og en DELETE til at virke via samme formular, blot ved at skifte til en ny case i switchen.

Nu kunne jeg så godt tænke mig også at få tilføjet en INSERT via samme switch og samme formular.

Men det driller en del, men de to andre del elementer har jeg fået til at virke.
Så kunne godt tænke mig at finde lidt hjælp blandt jer til dette.

Min kode som den ser ud nu:



<?php
include("../connect.php");
include("login.php");

?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Admin</title>
          <script type="text/javascript" src="widg/scripts/widgEditor.js"></script>
        <link rel="stylesheet" type="text/css" href="widg/css/widgEditor.css" />
        <link rel="stylesheet" type="text/css" href="css/loginstyle.css" />
    </head>
    <body>
    <div id="actionbox" >
            <a href="admin.php?logoff=true" target="_self">Logoff</a><br>
            <a href="admin.php?id=0" target="_self">Change password</a><br>
            <a href="../index.php" target="_blank">See page</a>           
        </div>
        <?php include('nav-inc.php') ?>
    <div id="wrapper">
        <p class="attend">Du er her: <em>nyheder-ret.php</em> </p>
        <h1>Admin - ret nyheder</h1> 
        <a href="nyheder-ret.php?go=insert&amp;id=('$row['id']')">Opret ny nyhed</a>
        <?php


switch($_GET['go'])
{
    //DELETE
    case 'delete':
        $id = intval($_GET['id']);
        @mysql_query("DELETE FROM news WHERE id='$id'");
        if(mysql_affected_rows()==1)
        {
            echo '<p class="checked">Nyheden er nu slettet</p>';
        }
        else
        {
            echo '<p>Kunne ikke slette nyheden<br />Error: ' . mysql_error() . '</p>';
        }
        break;
       
    //INSERT
    case 'insert':
        if(isset($_POST['teksten'])){
            $overskrift = htmlspecialchars ($_POST['overskrift']);
            $teksten = htmlspecialchars ($_POST['teksten']);
            if(!get_magic_quotes_gpc()){
            $overskrift = addslashes($overskrift);
            $teksten = addslashes($teksten);
            }
            $query="INSERT INTO news (overskrift,teksten) VALUES ('$overskrift','$teksten')";
            mysql_query($query);
            echo "Nyheden er tilføjet";
            }   
        break;

    //EDIT
    case 'edit':
        if (isset($_POST['teksten']))
        {
            $overskrift = mysql_real_escape_string($_POST['overskrift']);
            $teksten = mysql_real_escape_string($_POST['teksten']);
            $id = intval($_POST['id']);
      @mysql_query("UPDATE news SET overskrift='$overskrift', teksten='$teksten' WHERE id='$id'");
      if(mysql_affected_rows()==1)
      {
        echo '<p class="checked">Nyhed opdateret</p>';
      }
      else
      {
        echo '<p>Kunne ikke opdatere nyheden: ' . mysql_error() . '</p>';
      }
    }
    else
    {
            $id = intval($_GET['id']);
            $link = @mysql_query("SELECT * FROM news WHERE id='$id'");
            if(mysql_num_rows($link)!=1)
      {
        exit('<p>Fejl i hentning af nyhed: ' . mysql_error() . '</p>');
      }

            $link = mysql_fetch_array($link);

            $overskrift = $link['overskrift'];
            $teksten = $link['teksten'];
        }

    echo '<form action="' . $_SERVER['PHP_SELF'] . '?go=edit" method="post">';
    ?>
    <input type="text" name="overskrift" class="felt" value="<?php echo $overskrift;?>">
    <?php
    echo '<textarea name="teksten" class="widgEditor" cols="70" rows="10">' . $teksten . '</textarea>';
    echo '</label><br />';
    echo '<input type="hidden" name="id" value="' . $id . '" />';
    echo '<input type="submit" value="SUBMIT" /></p>';
    echo '</form>';

    break;

    default:
       
        break;
}

?>




I switchen med : case 'insert' vil jeg gerne have det sidste til at virke.
Tænker der måske skal justeres lidt og så skal der vel sagtens kobles en handling på, f.eks. et klik på et link eller noget ?

Håber I kan hjælpe ;-)

//Carsten
Avatar billede olebole Juniormester
18. februar 2013 - 01:22 #1
<ole>

Du skal vel gøre, som du gør under [b]edit[(b] - bare med en INSERT.

Derudover bør du nok se at få opdateret din temmelig antikke databasekode. I dag bruger man prepared statements under MySQLI eller PDO. Det er langt sikrere, ofte hurtigere, og så har det en fremtid i PHP  =)

/mvh
</bole>
Avatar billede sabumnim Novice
18. februar 2013 - 09:17 #2
Ole,
Mener du blot at jeg skal ændre dette:



    //EDIT
    case 'edit':
        if (isset($_POST['teksten']))
        {
            $overskrift = mysql_real_escape_string($_POST['overskrift']);
            $teksten = mysql_real_escape_string($_POST['teksten']);
            $id = intval($_POST['id']);
      @mysql_query("UPDATE news SET overskrift='$overskrift', teksten='$teksten' WHERE id='$id'");
      if(mysql_affected_rows()==1)
      {
        echo '<p class="checked">Nyhed opdateret</p>';
      }
      else
      {
        echo '<p>Kunne ikke opdatere nyheden: ' . mysql_error() . '</p>';
      }
    }
    else
    {
            $id = intval($_GET['id']);
            $link = @mysql_query("SELECT * FROM news WHERE id='$id'");
            if(mysql_num_rows($link)!=1)
      {
        exit('<p>Fejl i hentning af nyhed: ' . mysql_error() . '</p>');
      }



til dette:



    //INSERT
    case 'insert':
        if (isset($_POST['teksten']))
        {
            $overskrift = mysql_real_escape_string($_POST['overskrift']);
            $teksten = mysql_real_escape_string($_POST['teksten']);
            $id = intval($_POST['id']);
      @mysql_query("INSERT INTO news SET overskrift='$overskrift', teksten='$teksten' WHERE id='$id'");
      if(mysql_affected_rows()==1)
      {
        echo '<p class="checked">Nyhed oprette</p>';
      }
      else
      {
        echo '<p>Kunne ikke oprette nyheden: ' . mysql_error() . '</p>';
      }
    }
    else
    {
            $id = intval($_GET['id']);
            $link = @mysql_query("SELECT * FROM news WHERE id='$id'");
            if(mysql_num_rows($link)!=1)
      {
        exit('<p>Fejl i oprettelse: ' . mysql_error() . '</p>');
      }




Eller hvad mener du, det er jo det jeg gerne vil have lidt hjælp til ;-)

Desuden, ved både DELE og UPDATE, tager jeg fat på et eksisterende ID via et tekstlink, men kan ikke gennemskue hvordan jeg kan gøre det samme på den aktuelle side, men blot med en INSERT

//Carsten
Avatar billede olebole Juniormester
18. februar 2013 - 11:50 #3
Du skal vel bruge en form ... eller er der noget, jeg har misforstået?
Avatar billede olebole Juniormester
18. februar 2013 - 11:51 #4
"Desuden, ved både DELE og UPDATE, tager jeg fat på et eksisterende ID via et tekstlink, men kan ikke gennemskue hvordan jeg kan gøre det samme på den aktuelle side, men blot med en INSERT"

Det kan jeg ikke rigtig få til at give mening. Hvad ville du bruge en ID til ved INSERT?
Avatar billede sabumnim Novice
18. februar 2013 - 13:44 #5
Hej igen Ole

Mit problem er følgende.

Idet jeg ankommer på min admin side, er der ikke nogen synlig formular, da denne er indkapslet i php.

Den bliver derfor først synlig i det øjeblik jeg trykker på linket for at UPDATE.
Dette link vises nede på siden udfor hver entry som kommer fra min DB:



<a href='nyheder-ret.php?go=edit&amp;id=".$id."'>&nbsp;&nbsp;<img src=\"../images/edit.jpg\" title=\"Rediger\" /></a>



Herved aktiverer jeg SWITCHEN og formularen bliver synlig da jeg nu går i edit mode.

Men det der er mit problem er at jeg via switchen også gerne vil have mulighed for at oprette en helt ny nyhed, ved at aktivere switchen med case 'insert';.

Men den kan jeg ikke lige kringle, og håbede du kunne guide mig lidt på vej.

Og nej, det med en ID ved INSERT giver ingen mening, det har du ret i, det var blot en tanke.
Forøvrigt så er min tabel sat med auto increment og Primary key på ID.

//Carsten
Avatar billede olebole Juniormester
18. februar 2013 - 15:15 #6
Jamen, fejlen er vel, at der kun er en form, når man vælger 'edit'. Du må jo også lave en form til 'insert'
Avatar billede sabumnim Novice
18. februar 2013 - 15:41 #7
Hey Ole,

Det var også den konklusion jeg kom til da jeg fik tænkt mig lidt om og sovet lidt på det ;-)

Min admin side virker nu og jeg kan nu lave følgende handlinger uden at forlade siden:
- rediger (UPDATE)
- slette (DELETE)
- oprette (INSERT)

Det er rigtig fedt ;-)

Tak for hjælpen Ole og de små pointers.
Kast et svar, så kaster jeg nogle point i din retning, som tak for hjælpen.

//Carsten
Avatar billede sabumnim Novice
18. februar 2013 - 15:42 #8
For øvrigt, så ser min endelige kode nu sådan ud, hvis nogle skulle have lyst til at rode lidt videre.



<?php
include("../connect.php");
include("login.php");

?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Admin</title>
<script type="text/javascript" src="widg/scripts/widgEditor.js"></script>
<link rel="stylesheet" type="text/css" href="widg/css/widgEditor.css" />
<link rel="stylesheet" type="text/css" href="css/loginstyle.css" />
</head>
<body>
<div id="actionbox" >
<a href="admin.php?logoff=true" target="_self">Logoff</a><br>
<a href="admin.php?id=0" target="_self">Change password</a><br>
<a href="../index.php" target="_blank">See page</a>           
</div>
<?php include('nav-inc.php') ?>
<div id="wrapper">
<p class="attend">Du er her: <em>nyheder-ret.php</em> </p>
<h1>Admin - ret nyheder</h1> 

<?php
switch($_GET['go'])
{
//DELETE
case 'delete':
$id = intval($_GET['id']);
@mysql_query("DELETE FROM news WHERE id='$id'");
if(mysql_affected_rows()==1)
{
echo '<p class="checked">Nyheden er nu slettet</p>';
}
else
{
echo '<p>Kunne ikke slette nyheden<br />Error: ' . mysql_error() . '</p>';
}
break;

//INSERT
case 'insert':
if(isset($_POST['teksten'])){
$overskrift = htmlspecialchars ($_POST['overskrift']);
$teksten = htmlspecialchars ($_POST['teksten']);
if(!get_magic_quotes_gpc()){
$overskrift = addslashes($overskrift);
$teksten = addslashes($teksten);
}
$query="INSERT INTO news (overskrift,teksten) VALUES ('$overskrift','$teksten')";
mysql_query($query);
echo '<p class="checked">Nyhed er tilføjet</p>';
}   
break;
//INSERT
case 'insert':
if (isset($_POST['teksten']))
{
$overskrift = mysql_real_escape_string($_POST['overskrift']);
$teksten = mysql_real_escape_string($_POST['teksten']);
$id = intval($_POST['id']);
@mysql_query("INSERT INTO news SET overskrift='$overskrift', teksten='$teksten' WHERE id='$id'");
if(mysql_affected_rows()==1)
{
echo '<p class="checked">Nyhed oprettet</p>';
}
else
{
echo '<p>Kunne ikke oprette nyheden: ' . mysql_error() . '</p>';
}
}

//EDIT
case 'edit':
if (isset($_POST['teksten']))
{
$overskrift = mysql_real_escape_string($_POST['overskrift']);
$teksten = mysql_real_escape_string($_POST['teksten']);
$id = intval($_POST['id']);
@mysql_query("UPDATE news SET overskrift='$overskrift', teksten='$teksten' WHERE id='$id'");
if(mysql_affected_rows()==1)
{
echo '<p class="checked">Nyhed opdateret</p>' . '<a href="nyheder-ret.php?go=default">Opret en nyhed?</a>';
}
else
{
echo '<p>Kunne ikke opdatere nyheden: ' . mysql_error() . '</p>';
}
}
else
{
$id = intval($_GET['id']);
$link = @mysql_query("SELECT * FROM news WHERE id='$id'");
if(mysql_num_rows($link)!=1)
{
exit('<p>Fejl i hentning af nyhed: ' . mysql_error() . '</p>');
}

$link = mysql_fetch_array($link);

$overskrift = $link['overskrift'];
$teksten = $link['teksten'];
}
echo '<form action="' . $_SERVER['PHP_SELF'] . '?go=edit" method="post">';

echo '<input type="text" name="overskrift" class="felt" value="' . $overskrift . '">';       
echo '<textarea name="teksten" class="widgEditor" cols="70" rows="10">' . $teksten . '</textarea>';
echo '</label><br />';
echo '<input type="hidden" name="id" value="' . $id . '" />';
echo '<input type="submit" value="SUBMIT" /></p>';
echo '</form>';



break;

default:
echo '<form action="' . $_SERVER['PHP_SELF'] . '?go=insert" method="post">';

echo '<input type="text" name="overskrift" class="felt" value="">';

echo '<textarea name="teksten" class="widgEditor" cols="70" rows="10"></textarea>';
echo '</label><br />';
echo '<input type="hidden" name="id" value="" />';
echo '<input type="submit" value="SUBMIT" /></p>';
echo '</form>';
break;
}



?>


<?php

$pr_side = 6;
$antal = mysql_result(mysql_query("SELECT COUNT(*) FROM news"),0) or die(mysql_error());
$vis_fra = (isset($_GET["visfra"]) && is_numeric($_GET["visfra"]) && $_GET["visfra"] < $antal) ? $_GET["visfra"] : 0;
       
       
        $foresp = mysql_query("SELECT * FROM news ORDER BY id DESC limit $vis_fra, $pr_side") or die(mysql_error());   
        while($row = mysql_fetch_array($foresp)){
           
            $id = $row['id'];
            $overskrift = $row['overskrift'];
            $teksten = $row['teksten'];
               
            $tegn = strlen($teksten); // Hvor mange tegn er der i teksten?                                           
           
            if($tegn >= 65){
                $teksten = substr($teksten, 0, 65)."<a href='nyheder-ret.php?go=edit&amp;id=".$id."'>&nbsp;&nbsp;<img src=\"../images/edit.jpg\" title=\"Rediger\" /></a>
                <a href='nyheder-ret.php?go=delete&amp;id=".$id."' onclick=\"return confirm('Vil du virkelig slette? NB! Kan ikke fortrydes!')\">&nbsp;&nbsp;<img src=\"../images/delete.gif\" title=\"Slet\" /></a>";
            }                                       
        echo "<p class=\"record\">" . $teksten. "</p>";
        }
    echo "<span class='countme'>";
if ($vis_fra > 0) {
    $back= $vis_fra - $pr_side;
    echo "<a href='$_SERVER[PHP_SELF]?visfra=$back' class=\"thislink\">Forrige</a> ";
    }
    $page = 1;
    for ($start = 0; $antal > $start; $start = $start + $pr_side) {
    if($vis_fra != $page * $pr_side - $pr_side) {
    echo "<a href='$_SERVER[PHP_SELF]?visfra=$start' class=\"thislink\">$page</a> <span class=\"divide\">|</span>&nbsp;";
    } else {
    echo "<span class='activeme'>" .$page." "."</span><span class=\"divide\">|</span>&nbsp;";
    }
    $page++;
    }
    if ($vis_fra < $antal - $pr_side) {
    $next = $vis_fra + $pr_side;
    echo " <a href='$_SERVER[PHP_SELF]?visfra=$next' class=\"thislink\">Næste</a>";
    }
    echo "</span>";
?>




</div>

</body>
</html>


Avatar billede olebole Juniormester
18. februar 2013 - 15:59 #9
Ellers tak, jeg sdamler ikke point. Læg selv et svar og accepter det, så tråden lukkes  =)

Jeg tror, du bør ændre strukturen lidt  *o)
Avatar billede sabumnim Novice
18. februar 2013 - 16:04 #10
Jeg lukker om lidt så Ole, og tak for din indsats.

Jeg kigger på nogle ændringer i strukturen, men lige nu er det et step at det trods alt virker ;-)

//Carsten
Avatar billede sabumnim Novice
18. februar 2013 - 16:04 #11
Lukker selv.

Ole ønskede ikke nogle point
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

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