Avatar billede sijmonj Nybegynder
09. februar 2009 - 15:24 Der er 5 kommentarer og
1 løsning

vis / vis ikke / ret

Hejsa, jeg har nogen problemer med mit script.

lidt forklaring hvorn mit script virker / skal virke:

Jeg lister en masse nyheder hvor udfra hver nyheds title er der en checkbox, jeg har så 3 billeder,

billed 1: vis
billed 2: vis ikke
billed 3: ret nyhed

Det jeg så gerne vil have er hvis jeg makere en af nyheder i checkboxen og trykker på billedet Vis, så skal den i databasen rette en kolonne som hedder synlig til "ja" og hvis jeg trykker på billed nummer 2 så skal den rette kolonnen synlig til "nej".

Hvis jeg så trykker på Ret nyhed billedet, så skal den gå ind på siden ret.nyheder.php og så vise informationerne fra den nyhed man har valgt. (Det har virket :S men når jeg trykker på ikonet og jeg har valgt en nyhed ser min URL sådan her ud "nyheder.php?ret.x=24&ret.y=21&ret=Ret&post[]=3") meget mærkeligt.



Her er mit script (måske lidt roddet, ved ikke da jeg aldrig har lært at opstille min kode pænt)


________________________________________________________
<?php
$hent_id = mysql_query("SELECT id FROM nyheder");
$vis_id = mysql_fetch_array($hent_id);
if (isset($_POST['ret']))
{
    $hent_nyheder = mysql_query("SELECT * FROM nyheder");
    while($vis_nyheder = mysql_fetch_array($hent_nyheder))
    {
        if(isset($_GET['nyhed_' . $vis_nyheder['id']]))
        {
            echo "
            <script type='text/javascript'>
                window.location = 'ret.nyheder.php?id=" . $vis_nyheder['id'] . "';
            </script>
            ";
        }
    }
}

?>



<form action="" method="GET">
    <div style="width:500px; height:30px; float:left; margin-left:60px; margin-top:18px;" id="panel">
        <div class="admin_ikon_lille">
            <a title="Vis" href="nyheder.php?side=vis"><img style="float:left; margin-left:9px;" border="0" src="../../images/ikoner/vis.png" /></a>
        </div><!-- admin_ikon_lille -->
       
        <div class="admin_ikon_lille">
          <a title="Vis ikke" href="nyheder.php?side=vis_ikke"> <img style="float:left; margin-left:9px;" border="0" src="../../images/ikoner/vis_ikke.png" /></a>
        </div><!-- admin_ikon_lille -->

       
        <div class="admin_ikon_lille">
            <input title="Ret nyhed" type="image" src="../../images/ikoner/ret.png" name="ret" value="Ret" />

        </div><!-- admin_ikon_lille -->
       
        <div class="admin_ikon_lille">
          <a title="Opret nyhed" href="skriv.nyheder.php"><img style="float:left; margin-left:9px;" border="0" src="../../images/ikoner/opret_ny.png" /></a>
        </div><!-- admin_ikon_lille -->
       
        <div class="admin_ikon_lille">
            <img style="float:left; margin-left:9px;" border="0" src="../../images/ikoner/help.png" />
        </div><!-- admin_ikon_lille -->
       
       
    </div><!-- panel -->

<br />
<br />
<br />
<img style="margin-top:5px;" src="../../images/skille_linje.png" />
<br />
<br />


    <table style="border:1px solid #f4f4f4; border-bottom:1px solid #f4f4f4;" width="550" cellpadding="0" cellspacing="0" border="0">
        <tr>
            <td width="40">#:</td>
            <td width="40">Ret:</td>
            <td width="150">Title:</td>
            <td width="20">Synlig:</td>
            <td width="40">Forfatter:</td>
            <td width="40">Dato:</td>
            <td width="40">ID:</td>
        </tr>
        <?php
        $nummer = 0;
        $hent_nyheder = mysql_query("SELECT * FROM nyheder");
        while($vis_nyheder = mysql_fetch_array($hent_nyheder))
        {
            $nummer++;
            if($nummer % 2 == 0)
            {
                echo "<tr style='background-color: #f9f9f9'>";
            }
            else
            {
                echo "<tr>";
            }
                ?>
                <td><?php echo $nummer; ?>.</td>
                <td>
                    <?php
                    {
                        echo "<input type='checkbox' value='".$vis_nyheder['id']."' name='post[]' />";
                    }
                    ?>
                </td>
                <td>
                    <b><?php echo $vis_nyheder['title']; ?></b>
                </td>
                <td width="20">
                    <?php
                    if($vis_nyheder['synlig'] == "nej")
                    {
                        echo "<img src='../../images/ikoner/publish_x.png'>";
                    }
                    else
                    {
                        echo "<img src='../../images/ikoner/tick.png'>";
                    }
                    ?>
                </td>
                <td>
                    <b><?php echo substr($vis_nyheder[forfatter],0,7); ?></b>
                </td>
                <td>
                    <b><?php echo $vis_nyheder[dato]; ?></b>
                </td>
                <td>
                    <b><?php echo $vis_nyheder[id]; ?></b>
                </td>
            </tr>
            <?php
        }
        ?>
    </table>
</form>
<?php
      if($_GET['side'] == "vis_ikke")
    {
        $idrows = implode(",", $_GET['post']);
       
        mysql_query("UPDATE nyheder SET synlig = 'nej' WHERE id IN('".$idrows."')") or die(mysql_error());
    }
   
    if($_GET['side'] == "vis")
    {
        $idrows = implode(",", $_GET['post']);
       
        mysql_query("UPDATE nyheder SET synlig = 'ja' WHERE id IN('".$idrows."')") or die(mysql_error());
    }
    ?>
____________________________________________________


Tusind tak på forhånd :)!
Avatar billede saltvand Nybegynder
09. februar 2009 - 16:15 #1
Hejsa,
Jeg vil lave det lidt om..
Hvis du alligevel har en nyhedsdatabase, så har du sikkert også et ID på hver nyhed.
Så er det nemt at lave det hele lidt mere simpelt:

<?php
//Hent nyheder med nyeste først
$query ="SELECT * FROM nyheder ORDER BY `ID` ASC";
//forbind til databse her!!
$res = mysql_query($query);
//sæt border=1 for debug
echo '<table border="1">';
while $row = mysql_fetch_assoc($res)
{
  echo '<tr><td>$row['overskrift']</td></tr>';
}
echo '</table>'
?>

så har du en fin liste over dine overskrifter. ved at tilføje f.eks:
echo '<tr><td>$row['indhold']<hr /></td></tr>';
så har du også selve nyheden.

Ved at filføje lidt mere kode kan du lave dine funktioner sådan her:

<?php
//Hent nyheder med nyeste først
$query ="SELECT * FROM nyheder ORDER BY `ID` ASC";
//forbind til databse her!!
$res = mysql_query($query);
//sæt border=1 for debug
echo '<table border="1">';
while $row = mysql_fetch_assoc($res)
{
  echo '<tr><td>$row['overskrift']</td>';
  echo '<td><a href="vis.php?NID='.$row['ID'].'"><img src="vis.png"></a></td>'
  echo '<td><a href="skjul.php?NID='.$row['ID'].'"><img src="skjul.png"></a></td>'
  echo '<td><a href="ret.php?NID='.$row['ID'].'"><img src="ret.png"></a></td>'
  echo '<tr><td colspan="4">$row['indhold']<hr /></td></tr>';

}
echo '</table>'
?>


så ville jeg lave 3 filer som hver især tog sig af opdateringen:

<?php
//gør dit input sikkert
$NID = mysql_real_escape_string($_GET['NID']);
$query = "UPDATE nyheder SET `vis`='1' WHERE `ID`='".$NID."'";
//forbind til DB
$res = mysql_query($query);

//retur til forsiden:
header("Location: index.php");
?>

På samme måde kan de andre sider laves, f.eks. kan skjul.php laves med følgende SQL:
$query = "UPDATE nyheder SET `vis`='0' WHERE `ID`='".$NID."'";


Ret.php kan jo henvise til din editor hvor du henter indholdet af nyheden ind i tekstfeltet.
Avatar billede sijmonj Nybegynder
09. februar 2009 - 19:37 #2
Sådan som du har gjort det, bliver det så ikke sat op på en helt anden måde?, fordi design mæssigt skal det se sån ud som jeg har opstillet det nemlig :),

Men der må da være en nemmere måde sådan at jeg ikke skal sidde og kode det hele om :(
Avatar billede sijmonj Nybegynder
09. februar 2009 - 22:04 #3
okay, men kan bare ikke forstå hvorfor det andet ikke er lige at gå til, jeg ville tryk man bare kunne makere en checkbox og så trykke på billedet og så hente ID'et fra checkboxen og så UPDATE WHERE id = '$_GET[id]'

og det er lidt den løsning jeg er ude efter da jeg ikke har lyst til at kode det hele om da det hele står som det skal gøre :)
Avatar billede saltvand Nybegynder
09. februar 2009 - 21:28 #4
Jo, det bliver sat op på en helt anden måde..
Det jeg har vist, er kun en metode du kan gøre det på, som du kan implementere i dit design.
Avatar billede saltvand Nybegynder
09. februar 2009 - 22:22 #5
Det er stort set det samme der sker uanset hvordan du løser det. det er dog en god ide at have forskellige sider der løser opgaverne, så du f.ek.s kun kalder koden der viser/skjuler nyheder en gang. på den måde bliver din sides loading tid lavere og dermed får brugeren hurtigere vist siden.
Hvis du kan lave en submit knap som et billede, så vil det jo fint virke, så vil jeg dog anbefale at du bruger en form som denne:
<form action="ret.php" method="POST">
<input type="hidden" value="$ID" name="NID">
<input type="image" src="ret.png"></form>

method="POST" har den fordel at den ikke viser variabelnavnet i adresselinjen hvilket allerede der gør det lidt mere vanskeligt at kompromittere siden.
husk iøvrigt altid at:
$NID = mysql_real_escape_string($_POST['NID']);
for at sikre bruger inputs.
Avatar billede sijmonj Nybegynder
11. februar 2009 - 18:59 #6
okay tak, men lader tråden stå åben i håb om en kan fixe mit problem eventuelt med noget javascript eller sån noget :P
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