Warz Skrevet 7. mai 2009 Del Skrevet 7. mai 2009 Hei, Jeg driver å lager en admin side der man skal kunne velge rekkefølgen på categories i et forum. (Se vedlagt screenshot). Jeg tenker da at man trykker på de grønne pilene for å flytte en kategori enten opp eller ned. Problemet er bare at UPDATE ikke ser ut til å fungere. Jeg trykker pilen, det ser ut som den flytter seg, jeg skjekker i databasen, der har ingenting skjedd. Når jeg refresher (går inn på categories.php på nytt) så er alt tilbakestilt (altså ingen endring har skjedd). Men det rare er at noen ganger når jeg trykker tilbake knappen i browseren min etter å ha trykket noen ganger på pilene så oppdaterer databasen seg! Har prøvd å finne ut hva dette skyldes men ser rett og slett ikke feilen. Klarer ikke tenke helt klart nå, kanskje noen kunne sett på koden og se hva jeg gjør feil? Dette er koden øverst: <?php require 'header.php'; $updown = $_GET['updown']; $catorder = $_GET['catorder']; $catid = $_GET['catid']; if (isset($updown)) { echo "We wish you a merry x-mas! "; $cor = $catorder; // Find which category to change with: do { $catorder = $catorder-1; $sql = 'SELECT * FROM forum_categories WHERE cat_order = '.$catorder.''; $res = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_assoc($res); $num = mysql_num_rows($res); } while ($num != 1); $changeto = $row; // Find which category to change $sql = 'SELECT * FROM forum_categories WHERE cat_order = '.$cor.''; $res = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_assoc($res); $changefrom = $row; $sql = 'UPDATE `forum_categories` SET cat_order = '.$changefrom['cat_order'].' WHERE cat_id = '.$changeto['cat_id'].''; mysql_query($sql) or die(mysql_error()); $sql = 'UPDATE `forum_categories` SET cat_order = '.$changeto['cat_order'].' WHERE cat_id = '.$changefrom['cat_id'].''; mysql_query($sql) or die(mysql_error()); } ?> Her er resten av siden (der jeg skriver ut resultatet, kommer altså etter php koden som er over..): <div id="liststyle"> <center> <table width="80%"> <tr> <th>Cat_id</th> <th>catorder</th> <th>type</th> <th>Name</th> <th>Description</th> <th>Topics</th> <th>Replies</th> <th>Up/Down</th> </tr> <?php $rows = forum_q('SELECT * FROM forum_categories ORDER BY cat_order', 'rows'); $odd = 0; $i = 1; foreach ($rows as $row) { if ($row['type'] == 1) { echo '<tr class="catname">'; } else { echo '<tr>'; } echo '<td>'.$row['cat_id'].'</td>'; echo '<td>'.$row['cat_order'].'</td>'; echo '<td>'.$row['type'].'</td>'; if ($row['type'] == 1) { echo '<td colspan="4">'.$row['catname'].'</td>'; } else { echo '<td>'.$row['catname'].'</td>'; echo '<td>'.$row['catdesc'].'</td>'; echo '<td>'.$row['topics'].'</td>'; echo '<td>'.$row['replies'].'</td>'; } echo '<td><a href="categories.php?updown=up&catorder='.$row['cat_order'].'&catid='.$row['cat_id'].'"><img src="../images/arrow_up.png" height="13"></a> <a href=""><img src="../images/arrow_down.png"height="13"></a></td>'; echo '</tr>'; } ?> </table> </center> </div> PS: Mulig jeg har gjort dette litt tungvindt? I såfall tar jeg gjerne tips om forbedringer. Lenke til kommentar
OIS Skrevet 7. mai 2009 Del Skrevet 7. mai 2009 Du kan bytte ut $sql = 'UPDATE `forum_categories` SET cat_order = '.$changefrom['cat_order'].' WHERE cat_id = '.$changeto['cat_id'].''; mysql_query($sql) or die(mysql_error()); $sql = 'UPDATE `forum_categories` SET cat_order = '.$changeto['cat_order'].' WHERE cat_id = '.$changefrom['cat_id'].''; mysql_query($sql) or die(mysql_error()); med $sql = sprintf('update forum_categories a, forum_categories b set a.cat_order = b.cat_order, b.cat_order = a.cat_order where a.cat_id = %1$d and b.cat_id = %2$d', $changefrom['cat_id'], $changeto['cat_id']); mysql_query($sql) or die(mysql_error()); Andre ting du kan bytte ut: do { $catorder = $catorder-1; $sql = 'SELECT * FROM forum_categories WHERE cat_order = '.$catorder.''; $res = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_assoc($res); $num = mysql_num_rows($res); } while ($num != 1); med $sql = sprintf('SELECT cat_id from forum_categories where cat_order %2$s %1$d order by cat_order %3$s limit 1', $catorder, ($updown === 'up' ? '<' : '>') , ($updown === 'up' ? 'desc' : 'asc')); $res = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_assoc($res); $num = mysql_num_rows($res); Hvis ingen rader returnert, så er den på topp/bunn. echo '<td><a href="categories.php?updown=up&catorder='.$row['cat_order'].'&catid='.$row['cat_id'].'"><img src="../images/arrow_up.png" height="13"></a> <a href=""><img src="../images/arrow_down.png"height="13"></a></td>'; med ?> <td> <form method="post"> <input type="hidden" name="catorder" value="<?php echo $row['cat_order']; ?>"/> <input type="hidden" name="catorder" value="<?php echo $row['cat_order']; ?>"/> <input type="submit" src="../images/arrow_down.png" value="down" name="updown" /> <input type="submit" src="../images/arrow_up.png" value="up" name="updown" /> </form> </td> <?php Må bytte ut $_GET på toppen med $_POST da. Hvis verdien up/down vises over bildet på knappene, skift ut name med up og down og sett value som tom streng. 1 Lenke til kommentar
Warz Skrevet 8. mai 2009 Forfatter Del Skrevet 8. mai 2009 Helt NYDELIG Takk skal du ha..! Måtte endre litt på den ene (litt rart at din ikke funka?, på din oppdaterte bare en ene raden seg..): $sql = sprintf('update forum_categories a, forum_categories b set a.cat_order = b.cat_order, b.cat_order = %1$d where a.cat_id = %2$d and b.cat_id = %3$d', $changefrom['cat_order'], $changefrom['cat_id'], $changeto['cat_id']); Også lurte jeg på, kan du forklare denne litt nærmere? ($updown === 'up' ? '<' : '>') , ($updown === 'up' ? 'desc' : 'asc')) Lenke til kommentar
TheClown Skrevet 8. mai 2009 Del Skrevet 8. mai 2009 Hvilke vei du henter ut fra databasen, desc (synkende) eller asc (stigende). Veit ikke hvilke funksjon < og > har her... Lenke til kommentar
Warz Skrevet 8. mai 2009 Forfatter Del Skrevet 8. mai 2009 Hvilke vei du henter ut fra databasen, desc (synkende) eller asc (stigende). Veit ikke hvilke funksjon < og > har her... Hva med "?" og ":" og tre likhetstegn ? Lenke til kommentar
OIS Skrevet 9. mai 2009 Del Skrevet 9. mai 2009 (endret) Veit ikke hvilke funksjon < og > har her... De tegnene betyr "mindre enn" og "større enn". Hva med "?" og ":" og tre likhetstegn ? Det er ternary. Det er noe mer uklart enn vanlige if-then-else og bør kun brukes når meningen er klar. Endret 9. mai 2009 av OIS Lenke til kommentar
Warz Skrevet 9. mai 2009 Forfatter Del Skrevet 9. mai 2009 Åja, skjønner det nå... blir jo akkurat som å bruke if else... har alltid lurt på hva det var Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå