Autor Zpráva
Nookyn
Profil
Zdarec, konečně sem se rozhodnul že si udělam administraci odkazů k mému systému na webu. Měl sem nejdřív problémy s posouváním a tam sem taky skončil. Odkazy se posouvají správně ale po několika přesunutích script nejde tak jak má, prostě nefunguje.

Tady je celej script kterej sem zatim napsal.

A nevšímejte toho bordelu xD...



if($_POST['akce']=="Přidat odkaz"){


}else{

  $sql = mysql_query("SELECT * FROM odkazy ORDER BY poradi ASC");
  
  echo("<center><table border=\"1\" class=\"tabulka_cerna\">");
  $posledni_pocet = mysql_num_rows(mysql_query("SELECT * FROM odkazy"));
  while($vypis=mysql_fetch_array($sql)){
    if($vypis['poradi']<"2"){
      $nahoru = "";
    }else{
      $nahoru = "<a href=\"index?admin=odkazy&smer=nahoru&poradi=".$vypis['poradi']."\"><img src=\"images/up.gif\"></a>";
    }
    if($vypis['poradi']==$posledni_pocet){
      $dolu = "";
    }else{
      $dolu = "<a href=\"index?admin=odkazy&smer=dolu&poradi=".$vypis['poradi']."\"><img src=\"images/down.gif\"></a>";
    }
    if($nahoru=="" AND $dolu==""){
      $nahoru_dolu_nic = "-";
    }else{
      $nahoru_dolu_nic = "";
    }
    echo("
      <tr>
      <th style=\"padding: 5px 5px 5px 5px;\">".$vypis['poradi']."</th>
      <td style=\"padding: 5px 5px 5px 5px;\"><a href=\"".$vypis['adresa']."\">".$vypis['nazev']."</a></td>
      <td style=\"padding: 5px 5px 5px 5px; text-align: center;\">".$nahoru.$dolu.$nahoru_dolu_nic."</td>
      </tr>
    ");
  
  }
  echo("</table></center>");
  
  if(isset($_GET['smer'])){

    if($_GET['smer']=="nahoru"){
      
      $prvni = $_GET['poradi'];
      $prvni_vysledek = $_GET['poradi']-1;
      $druhy = $_GET['poradi']-1;
      $druhy_vysledek = $_GET['poradi'];
      
      mysql_query("UPDATE odkazy SET poradi='$prvni_vysledek' WHERE poradi='$prvni' LIMIT 1;");
      print(mysql_error());
      mysql_query("UPDATE odkazy SET poradi='$druhy_vysledek' WHERE poradi='$druhy' LIMIT 1;");
      print(mysql_error());
      
      header("location: index?admin=odkazy");
      
    }elseif($_GET['smer']=="dolu"){
      
      $prvni1 = $_GET['poradi'];
      $prvni_vysledek1 = $_GET['poradi']+1;
      $druhy1 = $_GET['poradi']+1;
      $druhy_vysledek1 = $_GET['poradi'];
      
      mysql_query("UPDATE odkazy SET poradi='$prvni_vysledek1' WHERE poradi='$prvni1' LIMIT 1;");
      print(mysql_error());
      mysql_query("UPDATE odkazy SET poradi='$druhy_vysledek1' WHERE poradi='$druhy1' LIMIT 1;");
      print(mysql_error());
      
      header("location: index?admin=odkazy");
      
    }else{
      echo("<span class=\"redalert\">Chyba</span>");
    }

  }
  
}
WertriK
Profil
Dalo mi to chvilku než jsem se v tom našel, ale chybička je jasná :-)

Třeba tahle situace (posun nahoru):
      $prvni = $_GET['poradi'];
      $prvni_vysledek = $_GET['poradi']-1;
      $druhy = $_GET['poradi']-1;
      $druhy_vysledek = $_GET['poradi'];
      
      mysql_query("UPDATE odkazy SET poradi='$prvni_vysledek' WHERE poradi='$prvni' LIMIT 1;");
      print(mysql_error());
      mysql_query("UPDATE odkazy SET poradi='$druhy_vysledek' WHERE poradi='$druhy' LIMIT 1;");
      print(mysql_error());

Berme, že $_GET['poradi'] = 5 (příklad).

Chyba je v tom, že když se ti provede první UPDATE tak nastavíš
UPDATE odkazy SET poradi='4' WHERE poradi='5' LIMIT 1

A v tom druhém
UPDATE odkazy SET poradi='5' WHERE poradi='4' LIMIT 1


Takže to co nastavíš v tom prvním updatu - ta 4, tak ta potom splní podmínku i pro ten druhý - což nemá. Principielně je to v pořádku, jen musíš ošetřit i tuhle chybku.
Nookyn
Profil
njn ale to právě nevim jak... ošetřit
Nookyn
Profil
jestli by to šlo, mohl bys poslat tu danou část která potřebuje opravit ??? :-) pls
panther
Profil
Nookyn:
může to udělat například tak, že kromě pozice si budeš v GETu předávat i id položky. Nejprve provedeš ten druhý update podle GET['poradi'], pak ten první podle GET['id']. Třeba.
WertriK
Profil
Předávej si i id odkazu:

$nahoru = "<a href=\"index?admin=odkazy&smer=nahoru&poradi=".$vypis['poradi']."&id=".$vypis['id']."\"><img src=\"images/up.gif\"></a>";
....
$dolu = "<a href=\"index?admin=odkazy&smer=dolu&poradi=".$vypis['poradi']."&id=".$vypis['id']."\"><img src=\"images/down.gif\"></a>";


A upravíš ty updaty (posun nahoru):
$poradi = $_GET['poradi'];
$id = $_GET['id'];

/* předešlý odkaz posouvám dolů */
mysql_query("UPDATE odkazy SET poradi=poradi+1 WHERE poradi=".$poradi-1." LIMIT 1;");

/* zvolený odkaz posouvám nahoru */
mysql_query("UPDATE odkazy SET poradi=poradi-1 WHERE id = ".$id." LIMIT 1;");

Nookyn
Profil
a logicky by měl bejt jak posun dolů ??? obrátit znamínka ... ?
panther
Profil
Nookyn:
a logicky by měl bejt jak posun dolů ??? obrátit znamínka ... ?
výše máš dvě řádky kódu - nekopíruj je, ale zkus je pochopit. Pak posun opačným směrem nebude problém.
Nookyn
Profil
to já samozřejmě chápu ale třeba včera sem to posunování dělal přez 2 hodiny a nemohl sem na to přijít ... ale dík moc

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: