Gå til innhold

Problemer med php og mysql UPDATE


Anbefalte innlegg

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.

post-119348-1241718818_thumb.jpg

Lenke til kommentar
Videoannonse
Annonse

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.

  • Liker 1
Lenke til kommentar

Helt NYDELIG :D 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
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 av OIS
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...