Avatar billede cpccorp Juniormester
12. februar 2009 - 11:12 Der er 10 kommentarer og
1 løsning

Ændre rækkefølge på sortering

Jeg har følgende script fra ASP, som jeg gerne vil have konverteret til PHP, men jeg kan ikke lige finde løsningen, jeg skal koble op til en MYSQL database

Dim Apples2

Set Apples2 = Server.CreateObject("ADODB.Connection")

ConnStr = "DRIVER={Microsoft Access Driver (*.mdb)}; "
ConnStr = ConnStr & "DBQ=" & dburl
Apples2.Open(ConnStr)
    dir = Request.QueryString("dir")
if dir <> "" then
  oldId = Request.QueryString("SubMenuID")
  tempID = 0
 
  SQL = "SELECT TOP 1 sort_order FROM teams WHERE " & afd1 & " AND sort_order"
  if dir = "op" then
    SQL = SQL & " < " & oldID & " AND inaction = true ORDER BY sort_order DESC"
    'newID = Int(oldId) - 1
  else
    SQL = SQL & " > " & oldID & " AND inaction = true ORDER BY sort_order"
    'newID = Int(oldId) + 1
  end if
  'Response.Write SQL
  set rs = Apples2.Execute(SQL)
  newID = rs("sort_order")
 
  SQL = "UPDATE teams SET sort_order = " & tempID & " WHERE sort_order = " & oldID & " AND " & afd1 & " AND inaction = true"
  Apples2.Execute(SQL)
  SQL = "UPDATE teams SET sort_order = " & oldID & " WHERE sort_order = " & newID & " AND " & afd1 & " AND inaction = true"
  Apples2.Execute(SQL)
  SQL = "UPDATE teams SET sort_order = " & newID & " WHERE sort_order = " & tempID & " AND " & afd1 & " AND inaction = true"
  Apples2.Execute(SQL)
end if


Følgende data:
database = mif08
tabel = ungdom_referat_cats
sorteringsfelt = article_cat_sort

dir = kan være op/ned
SubMenuId = aktuelle sorterings nummer


Følgende link kalder ovenstående i dag:
<a class=""nostreg"" href=""?dir=ned&SubMenuId=" & rs("sort_order") & "">[Ned]</a>
Avatar billede majbom Novice
12. februar 2009 - 11:50 #1
hurtigt oversat:

<?php

$user = "user";
$password = "password";
$database = $dburl;
mysql_connect("host",$user,$password);
mysql_select_db($database) or die(mysql_error());


$dir = $_GET['dir'];
if($dir != ""){
  $oldId = $_GET['SubMenuID'];
  $tempID = 0;
 
  $SQL = "SELECT sort_order FROM teams WHERE $afd1 AND sort_order";
  if($dir == "op"){
    $SQL .= " < $oldID AND inaction=true ORDER BY sort_order DESC";
    //newID = Int(oldId) - 1
  }else{
    $SQL .= " > $oldID AND inaction=true ORDER BY sort_order";
    //newID = Int(oldId) + 1
  }
  //Response.Write SQL
  $res = mysql_query($SQL) or die(mysql_error());
  $newID_arr = mysql_fetch_assoc($res);
  $newID = $newID_arr['sort_order'];
 
  $SQL = "UPDATE teams SET sort_order='$tempID' WHERE sort_order='$oldID' AND $afd1 AND inaction=true";
  mysql_query($SQL) or die(mysql_error());
  $SQL = "UPDATE teams SET sort_order='$oldID' WHERE sort_order='$newID' AND $afd1 AND inaction=true";
  mysql_query($SQL) or die(mysql_error());
  $SQL = "UPDATE teams SET sort_order='$newID' WHERE sort_order='$tempID' AND $afd1 AND inaction=true"
  mysql_query($SQL) or die(mysql_error());
}

?>

der er sikkert en smutter eller 2, men se om det spiller...
Avatar billede cpccorp Juniormester
12. februar 2009 - 12:37 #2
Det var hurtigt - jeg kigger på det
Avatar billede cpccorp Juniormester
12. februar 2009 - 17:54 #3
Her er min version hvor jeg har skiftet data ud:




$dir = $_GET['dir'];
if($dir != ""){
  $oldId = $_GET['SubMenuID'];
  $tempID = 0;

  $SQL = "SELECT article_cat_sort FROM ungdom_referat_cats WHERE article_cat_sort";
  if($dir == "op"){
    $SQL .= " < '$oldID' ORDER BY article_cat_sort DESC";
    //newID = Int(oldId) - 1
  }else{
    $SQL .= " > '$oldID' ORDER BY article_cat_sort";
    //newID = Int(oldId) + 1
  }
  //Response.Write SQL
  $res = mysql_query($SQL) or die(mysql_error());
  $newID_arr = mysql_fetch_assoc($res);
  $newID = $newID_arr['article_cat_sort'];

  $SQL = "UPDATE ungdom_referat_cats SET article_cat_sort='$tempID' WHERE article_cat_sort='$oldID'";
  mysql_query($SQL) or die(mysql_error());
  $SQL = "UPDATE ungdom_referat_cats SET article_cat_sort='$oldID' WHERE article_cat_sort='$newID'";
  mysql_query($SQL) or die(mysql_error());
  $SQL = "UPDATE ungdom_referat_cats SET article_cat_sort='$newID' WHERE article_cat_sort='$tempID'";
  mysql_query($SQL) or die(mysql_error());
}


Den kører fint uden fejl men den gør ikke det den skal
Avatar billede majbom Novice
12. februar 2009 - 19:49 #4
hvad gør den?

hvad skal den?
Avatar billede cpccorp Juniormester
12. februar 2009 - 19:54 #5
Den får via SubMenuID sorteringsnummeret på den aktuelle post
hvis Dir = op skal den ændres til til SubMenuID-1 og den ovenover skal ændres til SubMenuID

Det svarer til at du flytter en post op men ikke i virkeligheden, hvis du forstår
Avatar billede majbom Novice
13. februar 2009 - 06:32 #6
er der nogen grund til at disse to linjer er udkommenteret:

if($dir == "op"){
  $SQL .= " < '$oldID' ORDER BY article_cat_sort DESC";
  //newID = Int(oldId) - 1
}else{
  $SQL .= " > '$oldID' ORDER BY article_cat_sort";
  //newID = Int(oldId) + 1
}

?
Avatar billede cpccorp Juniormester
13. februar 2009 - 10:11 #7
Jeg kiggede lidt på den oprindelige kode

if($dir == "op"){
  $SQL .= " < '$oldID' ORDER BY article_cat_sort DESC";
  //newID = Int(oldId) - 1
}else{
  $SQL .= " > '$oldID' ORDER BY article_cat_sort";
  //newID = Int(oldId) + 1
}

De to $SQL linier skal kun udtage 1 post

Den første: udtager den første post under den aktuelle
Den anden: udtager den første post over den aktuelle

Derfor var de udkommenteret

Men som er nu virker de sådan?
Avatar billede majbom Novice
13. februar 2009 - 10:25 #8
ja okay, du skal have en "LIMIT 1" på så...

if($dir == "op"){
  $SQL .= " < '$oldID' ORDER BY article_cat_sort DESC LIMIT 1";
}else{
  $SQL .= " > '$oldID' ORDER BY article_cat_sort LIMIT 1";
}
Avatar billede cpccorp Juniormester
13. februar 2009 - 11:02 #9
Det gjorde tricket - læg et svar
Avatar billede majbom Novice
13. februar 2009 - 11:59 #10
;)
Avatar billede majbom Novice
14. februar 2009 - 12:26 #11
tak for 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
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