Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Tremura toata, dar nu de la ro...

Renault Android

Recomandare bicicleta e-bike 20&#...

Bing-Content removal tool
 Nu pot accesa monitorulsv.ro de l...

Cum sa elimini urmele de acnee?

Wc Geberit

Routere detinute in trecut si in ...
 Teii din fața casei

E-Mail in serie prin Excel si Out...

Modul alimentare rulou/jaluzea ex...

Recuperare fișiere dupa form...
 Aplicatii stress test RAM

Asigurare auto hibrid

Asus B550M - PC-ul nu porneste di...

Tzanca Uraganu - Inconjurat de Fe...
 

[php] cautare dupa input si sortare dupa buton

- - - - -
  • Please log in to reply
19 replies to this topic

#1
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
Initial:
- La incarcarea unei pagini se afiseaza niste produse.
- Exista un input de tip text, dupa care se pot afisa produse, daca exista, care contin in nume strigul introdus in input.
Asa functioneaza bine.

Final:
Vreau sa introduc un buton care la apasare, sa imi faca sortarea produselor si afisarea lor, in ordinea descrescatoare a numarului de likeuri ale fiecarui produs.

Ma tot invart in juru' cozii si nu reusesc. Ba merge afisarea totala (la intrearea in pagina) si sortarea dupa likeuri, dar nu merge cautarea dupa text, ba merge cautare dupa text si afisarea totala (dar nu si dupa numarul de likeuri); asta in functie de cum ma joc prin cod. E clar ca ceva imi scapa si nu e bine. Ce e gresit? Cum pot remedia?

Ideea este ca as vrea totul in aceeasi pagina (de index.php); ca alta solutie la care m-am gandit ar fi sa fac doua paginii; cea de a doua sa fie cea in care se duce la apasarea butonului de sortare si in cea de a doua pagina sa am un script care imi aduce datele sortate descrescator dupa likeuri. Asa ar merge, as sti sa fac, dar nu vreau in doua pagini.

Multumesc.

HTML
...
...
<div id="input_search">
<form method="post">
<a href="#"><img id="back" src="/img/back.png"></a>
<input type="text" name="search" id="search" maxlenght="50" value="" placeholder="Cautati...">
<button type="submit" id="advanced" name="advanced">Populare</button>
</form>
</div>

<div id="produse">
<?php include 'scripts/search.php'; ?>
</div>
...
...


scriptul PHP
<?php
...
echo "<script>$('#produse').empty();</script>";

$query = "SELECT * FROM produse";
	 $result = mysqli_query($dbconfig, $query);
	 if (mysqli_num_rows($result) > 0) {
	
	 while($row = mysqli_fetch_assoc($result)) {
		 echo "<div class='prod'><a href='produs.php?id=" . $row["id"]. "'>
			 <img src='produspics/" . $row["id"]. "/" . $row["produspic"]. "'>
			 <div class='numerls'>" .$row["produs"]. "</div></a></div>";
	 }
	 }

if (isset($_POST['advanced'])) {
echo "<script>$('#produse').empty();</script>";

	 $queryad = "SELECT * FROM produse ORDER BY likes DESC";
	 $resultad = mysqli_query($dbconfig, $queryad);
	 if (mysqli_num_rows($resultad) > 0) {
	
	 while($rowad = mysqli_fetch_assoc($resultad)) {
		 echo "<div class='prod'><a href='produs.php?id=" . $rowad["id"]. "'>
			 <img src='produspics/" . $rowad["id"]. "/" . $rowad["produspic"]. "'>
			 <div class='numerls'>" .$rowad["produs"]. "</div></a></div>";
	 }
	 }
}

if (isset($_POST['search'])) {
$count = 0;
echo "<script>$('#produse').empty();</script>";

$queryl = "SELECT * FROM produse WHERE produs LIKE '%" . $_POST["search"]. "%'";
$resultl = mysqli_query($dbconfig, $queryl);
if (mysqli_num_rows($resultl) > 0) {
	 $count = 1;
	 while($rowl = mysqli_fetch_assoc($resultl)) {
	 echo "<div class='prod'><a href='produs.php?id=" . $rowl["id"]. "'>
			 <img src='produspics/" . $rowl["id"]. "/" . $rowl["produspic"]. "'>
			 <div class='numerls'>" .$rowl["produs"]. "</div></a></div>";
	 }
}
if ($count == 0) {
	 echo "<script>document.getElementById('produse').innerHTML = '0 rezultate';</script>";
}
echo "<script>$('#search').val('');$('#search').blur();</script>";
}
mysqli_close($dbconfig);
?>


Edited by colombo2003, 07 April 2017 - 02:01.


#2
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005
Odata obtinuta lista cu elemente, sortatea poate fi facuta in browser (JS).

#3
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
SPLHeap cu diferite closures. Avantajul e că le poți combina și recombinare după nevoi și în alte situații, sorta ascendent/descendent după criterii multiple, etc.

#4
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
La inceput (initial) elementele sunt afisare dupa id-ul din baza (primele 10 sa zicem).
Insa lista celor mai populare poate fi alta decat cea initial. Asa ca sortarea in browser (js) nu stiu daca ajuta.

#5
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
Am inceput sa arunc o privire pe SPLHeap... Si incercand sa-l inteleg, am gasit exemplul asta
<?php
class MySimpleHeap extends SplHeap
{
	public function  compare( $value1, $value2 ) {
		return ( $value1 - $value2 );
	}
}
$obj = new MySimpleHeap();
$obj-&gt;insert( 4 );
$obj-&gt;insert( 8 );
$obj-&gt;insert( 1 );
$obj-&gt;insert( 0 );
foreach( $obj as $number ) {
	echo $number.\&quot;\\n\&quot;;
}
/*
	Output display :
	8
	4
	1
	0
*/
?>
Comparatie, comparatie, dar nu inteleg de ce la return e semnul minus (diferenta intre cele doua argumente).
Merci

#6
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005

View Postcolombo2003, on 07 aprilie 2017 - 12:18, said:

La inceput (initial) elementele sunt afisare dupa id-ul din baza (primele 10 sa zicem).
Insa lista celor mai populare poate fi alta decat cea initial. Asa ca sortarea in browser (js) nu stiu daca ajuta.
Caz in care nu o numesc sortare, ci o interogare unde criteriu este populatitatea.

#7
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
Corect. Si cum s-ar putea face?

#8
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005

View Postcolombo2003, on 07 aprilie 2017 - 12:55, said:

Comparatie, comparatie, dar nu inteleg de ce la return e semnul minus (diferenta intre cele doua argumente).
de inegalitate
Se considera doua numere nenule, x,y.
x diferit de y daca exista un numar z (nenul) egal cu diferenta dintre x si y

x != y <=> (x-y) != 0

x < y, (x-y) < 0,
z < 0, (z-0) < 0, si aici ai sa spui ceva de recursitivate, ceea ce este corect, dar zero este element neutru

Edited by MarianG, 07 April 2017 - 14:41.


#9
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
Scuze, dar tot nu inteleg. Pentru ca nu vad nicaieri mai apoi un if, unde daca x > y sa puna pe x, iar daca e invers, sa il puna pe y pe primul loc. Ca eu asta inteleg ca ar fce treaba aia, o comparative intre doua nr successive, pentru a le ordona in final.
Greu, greu la deal cu boii mici... :)

#10
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005
Nu simti ca te repeti?
$query = "SELECT * FROM produse";
		 $result = mysqli_query($dbconfig, $query);
		 if (mysqli_num_rows($result) > 0) {
	while($row = mysqli_fetch_assoc($result)) {
	  echo "<div class='prod'><a href='produs.php?id=" . $row["id"]. "'>
		<img src='produspics/" . $row["id"]. "/" . $row["produspic"]. "'>
		<div class='numerls'>" .$row["produs"]. "</div></a></div>";
	}
		 }

if (isset($_POST['advanced'])) {
echo "<script>$('#produse').empty();</script>";
		 $queryad = "SELECT * FROM produse ORDER BY likes DESC";
		 $resultad = mysqli_query($dbconfig, $queryad);
		 if (mysqli_num_rows($resultad) > 0) {
	while($rowad = mysqli_fetch_assoc($resultad)) {
	  echo "<div class='prod'><a href='produs.php?id=" . $rowad["id"]. "'>
		<img src='produspics/" . $rowad["id"]. "/" . $rowad["produspic"]. "'>
		<div class='numerls'>" .$rowad["produs"]. "</div></a></div>";
	}
		 }
}

if (isset($_POST['search'])) {
$count = 0;
echo "<script>$('#produse').empty();</script>";
$queryl = "SELECT * FROM produse WHERE produs LIKE '%" . $_POST["search"]. "%'";
$resultl = mysqli_query($dbconfig, $queryl);
if (mysqli_num_rows($resultl) > 0) {
		 $count = 1;
		 while($rowl = mysqli_fetch_assoc($resultl)) {
		 echo "<div class='prod'><a href='produs.php?id=" . $rowl["id"]. "'>
						 <img src='produspics/" . $rowl["id"]. "/" . $rowl["produspic"]. "'>
						 <div class='numerls'>" .$rowl["produs"]. "</div></a></div>";
		 }
}



#11
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
Primul select ($query) era pentru starea initiala la intrarea pe pagina. Si afiseaza lista de produse dupa id-ul din baza (asa cum au fost ele introduse).
Al doilea select ($queryl) era tot pentru starea initiala, cand imi afisa rezultate (daca erau) in fct de stringul din input.

Cand am introdus in <form> si butonul pentru afisarea in ordinea desc a popularitatii, atunci au aparut problemele. Initial am crezut ca daca ordinea query dupa id, if(isset... daca apas butonul de cautare dupa string, if (isset...) daca apas butonul de afisare dupa popularitate e ok, dar nu.

M-am gandit sa pun if(isset-ul de la popularitate ca else la if(isset-ul de la cautare. Si tot felul de permutari. Drept pentru care de aia fie mergea cautarea dar la populare nu se intampla nimic (era aceeasiu ordine dupa id), fie mergea afisarea dupa popularitate (dar nu mai afisa cautarea).

Si atunci m-am gandit sa am ordinea: query (sa afiseze dupa id). Daca fac cautare dupa string, afiseaza, daca nu lasa tot dupa if. Si daca fac dupa popularitate sa le afiseze, altfel sa lase tot dupa id. Dar nici asa nu prea vrea sa functioneze. Si atunci, invartindu-ma in jurul cozii, am apelata la ajutor aici.

Sper ca ai inteles cam ce am vrut sa fac si ce a fost in capul meu


PS. Nu-s programator, de aceea anumite chestii le "digger" mai greu. Si incerc sa le fac la cel mai simplist nivel. Si cand spun simplist, inseamna mai mult orientat catre programarea structurata (aia de pe vremea Pascalului care se facea in facultate) si nu cea orientate pe obiecte (cum e acum), care ma cam depaseste.

I

#12
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,189
  • Înscris: 24.02.2007
Codul e plin de gauri de securitate. Expunerea datelor intr-o retea, fie ea si interna, n-ar trebui sa fie un joc.

#13
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
Cam care ar fi acelea? Cum as putea sa le remedies, sau macar sa imbunatatesc ceva?
Multumesc

#14
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,189
  • Înscris: 24.02.2007
Pe scurt, pentru inceput: nu compui niciodata interogari SQL concatenand/interpoland valori si nu trimiti stringuri spre browser fara sa le encodezi potrivit destinatiei (html, valori de atribute, etc)

Pe lung; https://www.owasp.or...x.php/Main_Page

#15
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
Pentru unii or fi de multa vreme fumate astfel de lucruri si simple... M-ai cam pierdut un pic pe drum, dar incerc sa deslusesc...
Multam pt link si info!

#16
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
Am reusit si am rezolvat!

Am pus butonul de submit advanced intr-un alt form.
Iar in script selectul care mi le afiseaza pe toate (dupa id din baza), apoi if-ul in caz ca apas cautare si apoi if-ul in caz ca apas afisarea dupa popularitate.
Stiu, pentru unii e... dar pt mine...


PS. Se poate inchide!

#17
lightpoint

lightpoint

    Member

  • Grup: Members
  • Posts: 785
  • Înscris: 16.02.2017

View Postcolombo2003, on 07 aprilie 2017 - 22:00, said:

PS. Se poate inchide!
No, no eu astept de la tine un exemplu in php cand trimiti username si password prin GET. Posted Image

Edited by lightpoint, 08 April 2017 - 10:45.


#18
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
Asta e la misto sau ce (ca am vazut ca ai acest talent...)?
Niciodata nu folosesc GET ca metjod in formulare. Nici aici, si cu atat mai mult pt user si pass. Atata lucru (diferenta dintre ele) o stiu si eu,
Hai pa!

Anunturi

Second Opinion Second Opinion

Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale.

Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate