Dlaczego nie sortuje?

Dlaczego nie sortuje?
hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0

A co zwraca wyslany formularz.
ASC nie asc
DESC nie desc
I pousuwaj te wykomentowane linie bo tylko balagan robisz i nawet czytac sie tego nie chce.
Gdzie w ogóle jest akcja w formilarzu.

Kopiuj
if(isset($_POST['sortowanie']) AND $_POST['sortowanie'] == "wartosc")

To jest masło maślane bo skoro jest konkretna wartosc to po co sprawdzasz wczesniej czy jest wartosc.

Pytasz sie tak:
Jesli wartosc zmiennej istnieje i jesli ta zmienna ma wartosc jakastam to wykonaj polecenie

Pierwsze zupelnie jest niepotrzebne w przypadku jesli pytasz sie o wartosc zmiennej bo automatycznie ma wartosc (sprawdzasz ja) nie wazne jaką. Ale ją ma. Jesli wartosc nie jest taka sama to warunek zachowa sie tak samo jak dla

Kopiuj
(!isset())

Wiec nie ma sensu powielac tego samego

Kopiuj
SELECT nazwa_kolumny/nazwy_kolumn FROM tabela/tabele ORDER BY nazwa_kolumny/nazwa_kolumn ASC|DESC;

duze litery robia roznice. Poza tym niepotrzebnie robisz to na sesjach. Samo przeslanie parametru ASC lub DESC mozesz zrobic poprzez url metodą get

Kopiuj
<a href="plik.php?sort=DESC">sort DESC</a>
<a href="plik.php?sort=ASC">sort ASC</a>

wyswietl zwrot przez

Kopiuj
print $_GET['sort'];

Pozniej wstaw to do wyboru z tabeli
Mozesz to zrobic analogicznie dla formularza. W ttm momencie action jest puste

CodeRZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 259
0

@hopaj No było przecież:
if(isset($_POST['sortowanie']) AND $_POST['sortowanie'] == 'ASC'){

analizuje wszystko linia po linii, dałem echo do zmiennych, ale dalej nic nie rozumiem, z jakiegoś powodu cały czas się zmienia na DESC. ale czemu?

Kopiuj
if(isset($_POST['sortowanie']) AND $_POST['sortowanie'] == 'ASC'){
	$_SESSION['buttonValue'] = 'DESC';
}
else{
	$_SESSION['buttonValue'] = 'ASC';
}
$sql = $sql.$_SESSION['buttonValue'];
echo '<form action="" method="post">
Posortowano : <input class="btn_sortowanie" type="submit" name="sortowanie" value='.$_SESSION['buttonValue'].'>
</form>';
echo "</br> </br>";
echo $_POST['sortowanie'];
echo $buttonValue;
echo $_SESSION['buttonValue'];
hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0

Czytaj jeszcze raz wczesniejsza moja odpowiedz

Kopiuj
echo '<form action="" method="post">

Mozesz mi powiedziec gdzie wysylasz zmienna formularza?

CodeRZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 259
0

@hopaj

  1. Już rozumeim to z isset, wywaliłem isseta
  2. Poprawiłem dużymi literami
  3. Co do:
    **sort DESC
    sort ASC

wyswietl zwrot przez

print $_GET['sort'];

Pozniej wstaw to do wyboru z tabeli**

to wolałbym postem bo jest bardziej elegancko, ale jak już n sesjach zacząłem to dokończe, a no i trzeba i tak będzie robić przycisk, więc podobny problem, no chyba, że dwa przyciski, ale to pójście na łatwiznę i nie jest elegancko.

  1. Mozesz mi powiedziec gdzie wysylasz zmienna formularza? Zmienną wysyłam do index.php czyli inaczej do mojej aktualnej strony. Tak się robi przecież.
hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0

Tylko zew kodzie tego nie ma.
Metoda post czy get rozni sie tylko tym ze get jest poprzez url. W takim razie jak wiesz jak pobrac/wysw get to wiesz jak wysw post.

CodeRZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 259
0

@hopaj wiem jak wyświetlić post, o tak:
echo $_POST['sortowanie'];

hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0

Tak tylko dalej nie napisales co to zwraca. Bedziemy tak pisac do jutra

CodeRZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 259
0

No właśnie co zwraca? To jest zmienna, co ona ma zwracać? Chodzi ci o true/false w isset($_POST);???

hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0

Kazda zmienna zawiera wartosc (moze zawierac a mkze i nie) a na pewno musi skoro wiesz ze wartosc jest przesylana. A jest. Pytanie czy w ogóle cos sie wysyla.
Jak jest wartosc tej zmiennej.

CodeRZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 259
0

@hopaj a o to chodzi!!! Przesyła wartość string "ASC" lub "DESC"

hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0

Czyli wyswietla sie wartosc DESC kiedy slesz przyciskasz z desc i ASC dla przycisku ASC
?

hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0

Mozesz to zrobic dookola troche.

Kopiuj
if( $_SESSION['buttonValue'] = 'DESC' )
{
// tutaj cala instrukcja do bazy z sortowaniem DESC
}elseif( $_SESSION['buttonValue'] = 'ASC')
{
// tutaj j/w dla ASC
};

To wstaw tuz za przypisaniem sesji

CodeRZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 259
0
Kopiuj
if( $_SESSION['buttonValue'] = 'DESC' )
{
// tutaj cala instrukcja do bazy z sortowaniem DESC
$sql = $sql."DESC";
}elseif( $_SESSION['buttonValue'] = 'ASC')
{
$sql = $sql."ASC";
};

Tak wpisałem i teraz jest cały czas DESC, nie da się nawet na ASC zmienić

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

Znajdż różnicę:

Kopiuj
$_SESSION['buttonValue'] = 'DESC'
$_SESSION['buttonValue'] == 'DESC'
$_SESSION['buttonValue'] === 'DESC'
CodeRZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 259
0

@Patryk27:
to proste! podam z pamięci

  1. przypisanie wartości
  2. porównanie
  3. porównanie tego samego typu.
Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

I którą wersję masz w swoim kodzie - przypisanie czy porównanie?

CodeRZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 259
0

@Patryk27 to @hopaj to pisał. Ale dzięki poprawione, mimo to dalej nie zapamiętuje. Zmienia się ale nie zapamiętuje po odświeżeniu.

hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0

Moj blad. Tak to jest jak sie czlowiek zajmuje kilkoma rzeczami jednoczesnie.
Oczywiscie ma byc

Kopiuj
==
hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0

Czyli

Kopiuj
echo $_SESSION['buttonValue'];

Cos zwraca??

CodeRZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 259
0

@hopaj Zwraca ASC i DESC na zmiane, po kliknięciu, ale nie utrzymuje się po odświeżeniu.

hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0

Dwa pytania:
Jestes pewny ze w pliku w ktorym chcesz wyswietlic zawartosc sesji masz na gorze inicjacje sesji

Kopiuj
session_start();

Co zawiera zmienna

Kopiuj
$sql 

ale konkretnie co

Zrob prosty przyklad:

Kopiuj
if(isset(nazwa sesji))
{
print 'jest';
}else{
print 'nie ma';
};
CodeRZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 259
0

@hopaj jest session start na samiutkiej górze zaraz po obstart
zmienna sql zawiera
"SELECT * FROM $sqltable ORDER BY ID" a potem do niej doklaja się "ASC" lub "DESC".
I to działa, nie działa sesja.

Masz u siebie sqlite? Mogę całość udostępnić.

ten przykład dałem do $_SESSION['buttonValue'] i cały czas jest!

hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0

Doklejasz ale zapomnialea dac spacje

Kopiuj
$sql = $sql . " DESC";

s
Sprawdz co zwraca

Kopiuj
print_r($_SESSION);

Co sie pokazalo w tym przykladzie ktory podalem wczesniej ??

Ustaw inny osobny plik i daj

Kopiuj
<?php

session_start();

echo "<pre>";
print_r($_SESSION);
echo "</pre>";

?>
jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
0
CodeRZ napisał(a):

@Patryk27 to @hopaj to pisał. Ale dzięki poprawione, mimo to dalej nie zapamiętuje. Zmienia się ale nie zapamiętuje po odświeżeniu.

No ładnie, zamiast samemu napisać, to tylko wklejasz to co pisali inni i jeszcze potem zwalasz na nich winę. Powinieneś chyba przeanalizować co wklejasz i dokonać dopasowania do Twoich potrzeb?
Po odświeżeniu Ci nie działa, czy nigdy nie zadziałało? Czy przez odświeżenie rozumiesz zamknięcie karty przeglądarki/przeglądarki i odtworzenie jej ponownie? Czy przeczytałeś już sobie czym się różni sesja od cookies, ale jeszcze raz na spokojnie i ze zrozumieniem?

hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0
Kopiuj
<?php
session_start();

if($_POST['sortowanie'] == 'ASC')
{
$_SESSION['button'] = 'ASC';

//$sql = "SELECT * FROM $sqltable ORDER BY ID ASC"; to potem odkomentuj i poskladaj w calosc

}
elseif($_POST['sortowanie'] == 'DESC')
{
$_SESSION['button'] = 'DESC'; 

//$sql = "SELECT * FROM $sqltable ORDER BY ID DESC"; ; to potem odkomentuj i poskladaj w calosc
};

print 'Wartosc sesji to: ' . $_SESSION['button'] . '<br /><br />';

print "<form action=" . $_SERVER['SCRIPT_NAME'] . " method=post>";
print "<select name=\"sortowanie\">";


print "<option value=\"DESC\">Sortuj DESCENDING</option>";
print "<option value=\"ASC\">Sortuj ASCENDING</option>";
print "<input type=\"submit\" value=\"Sortuj\" />"; 

print '</select></form>';


?>

albo i tak:

Kopiuj
<?php
session_start();

if(!isset($_SESSION['button']))
{ 
$_SESSION['button'] = 'DESC';
}


if($_POST['sortowanie'] == 'ASC')
{
$_SESSION['button'] = 'ASC';

}
elseif($_POST['sortowanie'] == 'DESC')
{
$_SESSION['button'] = 'DESC';
};

if(isset($_SESSION['button'])){

$sql = "SELECT * FROM $sqltable ORDER BY ID " . $_SESSION['button'];


}



print 'Wartosc sesji to: ' . $_SESSION['button'] . '<br /><br />';

print "<form action=" . $_SERVER['SCRIPT_NAME'] . " method=post>";
print "<select name=\"sortowanie\">";


print "<option value=\"DESC\">Sortuj DESCENDING</option>";
print "<option value=\"ASC\">Sortuj ASCENDING</option>";
print "<input type=\"submit\" value=\"Sortuj\" />";

print '</select></form>';


?>

Skopiuj powyzszy kod do innego pliku i sprawdz. Przyklad dziala. Jelsi u Ciebie nie to cos masz skopane.
Ogolnie powinienes sobie juz poradzic

CodeRZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 259
0

@hopaj 1.print_r($_SESSION); zwraca ** Array ( [buttonValue] => ASC )**
2. Doklejasz ale zapomnialea dac spacje - jest spacja, jest wcześniej dana, wiem bo działa i mam pokazywane przez echo końcowe zapytanie sql
3. Ustaw inny osobny plik i daj - dałem i pokazuje asc lub desc, po kliknięciu(odswiezeniu) zmienia na znowu na asc
@jurek1980

Po odświeżeniu Ci nie działa, czy nigdy nie zadziałało? Czy przez odświeżenie rozumiesz zamknięcie karty przeglądarki/przeglądarki i odtworzenie jej ponownie? Czy przeczytałeś już sobie czym się różni sesja od cookies, ale jeszcze raz na spokojnie i ze zrozumieniem?

Po odświeżeniu, czyli np. kliknięciu na któryś button zmieniąjący rekord w bazie, lub ponowne wejśćie na ten adres, zwykłe odświeżenie nie, bo to jeszcze raz wysyła i wtedy się zmienia, więc tak nie. sortowanie zmienia się na asc, z desc, a powinno desc pozostać tak długo jak jest ustawione.

  1. Te skrypty co @hopaj podał, działają. Dzięki, fajnie, poradzę sobie, chociaż szkoda, że nie dało się na przycisku. A gdyby zamienić option na radio? I potem przycisk, zatwierdź. Lepiej, by wyglądało może.

edit:

<option value="DESC">Sortuj DESCENDING</option>"; po co te ** ** znaki przy DESC?

Dziwna sprawa, ale po twojej edycji nie działa już zmiana stanu, (zmiana wartości w tabeli sqlite). Teraz przyciski są nie odpowiednio ułożone, ale to ok, problem w tym, że powinno zmieniać chociaż inną wartość.

hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0

Usun je to zobaczysz

hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0

To jest przyklad jak powinno sie zbudowac warunki i przypisac wartosci sesji i odoowiednio wg tego postepowac. A co Ty z tym zrobisz i pozmieniasz to juz Ty wiesz.Ja nie mam szklanej kuli.
Powinienes tez sie poduczyc poodstaw bo widzie ze dluga droga przed Toba.

CodeRZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 259
0

Dobra, widzę, że muszę jeszcze się dużo nauaczyć. na razie zaprzestanę z tym na rzecz tego: https://4programmers.net/Forum/PHP/313114-ocena_simplestcms?p=1505274#id1505274

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.