Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  foreach ja while loop sorteerimine märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
redenergy
HV veteran
redenergy

liitunud: 22.03.2004




sõnum 28.01.2012 05:54:24 foreach ja while loop sorteerimine vasta tsitaadiga

Tervist, mul oleks natuke abi vaja sorteerimisega kuupäevade järgi, ehkist keegi oskab aidata või on sellega tegemist teinud.

Nimelt mul on checkboxid gruppidega. Ühest sql tabelist võetakse andmed selekteeritud gruppidega ning kuvatakse listi.
Pisike jupp koodi, et ettekujutus tekiks.
sql:
  1. $checkbox = $_POST['checkbox'];
  2. IF(isset($checkbox)){
  3. foreach($checkbox AS $group){
  4. $result = mysql_query("SELECT list.catnum, list.$currency AS value, list.description, list.valueID, list.type, list.userID, UNIX_TIMESTAMP(list.timestamp) AS timestamp, categories.catname, categories.catnum, categories.catID
  5. FROM list
  6. LEFT JOIN categories
  7. ON list.catnum = categories.catnum AND list.userID = categories.userID
  8. WHERE list.userID = 1 AND list.date >= '$sdate' AND list.date <= '$edate' AND categories.catID = '$group'
  9. ORDER BY timestamp DESC
  10. LIMIT $offset, $rows ")
  11. OR die(mysql_error());
  12. while($row = mysql_fetch_array($result)){
  13. $description = $row['description'];
  14. $value = $row['value'];
  15. $catname = $row['catname'];
  16. $catid = $row['catID'];
  17. $timestamp = $row['timestamp'];
  18. $time = date('d.m.Y', $timestamp);
  19. }
  20. }
  21. }
  22.  

Iga teatud grupi andmed on sorteeritud kuupäeva järgi aga kuidas saaks terve listi ajajärgi sorteerida?

Tänan
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 9
tagasi üles
vaata kasutaja infot saada privaatsõnum
troglodyte
Kreisi kasutaja
troglodyte

liitunud: 09.08.2002




sõnum 28.01.2012 12:36:16 vasta tsitaadiga

Kui ma õigesti olen aru saanud, siis võiksid sa SQL lauses categories.catID = '$group' tingimuse asendada IN-klausliga: categories.catID IN ('grupp1', 'grupp2', 'gruppN') ning seda foreach blokki ei ole enam vaja (kui siis ainult IN-klausli parameetri ehitamiseks).
_________________
ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn
Kommentaarid: 34 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 34
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
redenergy
HV veteran
redenergy

liitunud: 22.03.2004




sõnum 04.02.2012 07:35:37 vasta tsitaadiga

Hei, proovisin nii aga ei tööta. Kuvatakse ainult esimene väärtus. Uurisin netist ka ja selleks peab kasutama miskit dünaamilist mysql'i, et muutuja IN klausli panna vms.
Kas on miskit alternatiivi?
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 9
tagasi üles
vaata kasutaja infot saada privaatsõnum
troglodyte
Kreisi kasutaja
troglodyte

liitunud: 09.08.2002




sõnum 04.02.2012 13:08:58 vasta tsitaadiga

Dünaamilist MySQL-i? Tahaks näha Artiklit kus sellisest asjat räägitakse.
Kuid äkki näitad seda mittetoimivat koodi?

_________________
ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn
Kommentaarid: 34 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 34
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
redenergy
HV veteran
redenergy

liitunud: 22.03.2004




sõnum 05.02.2012 10:50:37 vasta tsitaadiga

Ikka thumbs_up.gif
sql:
  1.  
  2. $checkbox = $_POST['checkbox'];
  3. IF(isset($checkbox)){
  4. $first = true;
  5. foreach($checkbox AS $key => $value){
  6.         IF($first != false){
  7.                 $value = "". $value;
  8.         }
  9.         else{
  10.                 $value = ",". $value;
  11.         }
  12.         $group .= $value;
  13.         $first = false;
  14. }
  15. }
  16. }
  17. $result = mysql_query("SELECT list.catnum, list.$currency AS value, list.description, list.valueID, list.type, list.userID, UNIX_TIMESTAMP(list.timestamp) AS timestamp, categories.catname, categories.catnum, categories.catID
  18. FROM list
  19. LEFT JOIN categories
  20. ON list.catnum = categories.catnum AND list.userID = categories.userID
  21. WHERE categories.catID IN ('$group') AND list.userID = 1 AND list.date >= '$sdate' AND list.date <= '$edate'
  22. ORDER BY timestamp ASC
  23. LIMIT $offset, $rows ")
  24. OR die(mysql_error());
  25.  
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 9
tagasi üles
vaata kasutaja infot saada privaatsõnum
Erti-Chris
HV vaatleja
Erti-Chris

liitunud: 23.07.2011




sõnum 05.02.2012 11:19:48 vasta tsitaadiga

php:
  1.  
  2. <?php
  3. if(isset($_POST['checkbox']))
  4. {
  5. if(!is_array($_POST['checkbox']))
  6.   $_POST['checkbox'] = array($_POST['checkbox']);
  7.  
  8. $groups_string = join(",", array_map(
  9.            create_function('$obj',
  10.               'return "\'".mysql_real_escape_string($obj)."\'";'),
  11.               $_POST['checkbox']));
  12.  
  13. // mysql QUERY HERE
  14. // use $groups_string LIKE THIS:
  15. // .. WHERE blabla IN ($groups_string)
  16. }
  17.  
  18. ?>
  19.  
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
redenergy
HV veteran
redenergy

liitunud: 22.03.2004




sõnum 15.02.2012 13:44:49 vasta tsitaadiga

Siiski kuvatakse ainult ühe kategooria sisu.
Panen ka checkboxi koodi siia igaks juhuks.

sql:
  1.  
  2. $result = mysql_query("SELECT catnum, catID, catname FROM categories
  3. WHERE userID = 1 ")
  4. OR die(mysql_error());
  5. $cell_ctr = 0;
  6. echo '<tr>';
  7. while($row = mysql_fetch_array($result)){
  8. $catname = $row['catname'];
  9. $catid = $row['catID'];
  10.   IF(($cell_ctr % 5) == 0) // 2 IS the number of COLUMNS
  11.   {
  12. ?>
  13. </tr>
  14. <tr>
  15. <?php
  16.     $cell_ctr = 0;
  17.   }
  18. ?>
  19. <td align='left' width='130'><input type="checkbox" id="checkbox[]" name="checkbox[]" value="<?=$catid; ?>"/><?=$catname; ?></td>
  20. <?php
  21.   $cell_ctr++;
  22. }
  23. IF($cell_ctr == 1){
  24. ?>
  25. <td></td>
  26. </tr>
  27. <?php
  28. }
  29. else IF($cell_ctr == 2){
  30. echo '</tr>';
  31. }
  32. ?>
  33. </tr>
  34. </table>
  35. <input type="submit" name="test" value="OK" />
  36. </form>
  37.  


Edit--

Tundub, et pean midagi muud välja mõtlema icon_smile.gif
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 9
tagasi üles
vaata kasutaja infot saada privaatsõnum
napoleon
Unknown virus
napoleon

liitunud: 08.12.2008



Autoriseeritud ID-kaardiga

sõnum 24.03.2012 14:38:50 vasta tsitaadiga

Teemaalgatajale soovitan soojalt otsida googlest, mis on SQL injection ning oma koodis vastavad korrektuurid teha. Sellist koodi avalikult veebi riputada ei soovitaks isegi vaenlasele....
Kommentaarid: 77 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 60
tagasi üles
vaata kasutaja infot saada privaatsõnum
redenergy
HV veteran
redenergy

liitunud: 22.03.2004




sõnum 26.05.2012 15:43:06 vasta tsitaadiga

Teema algataja teab väga hästi mis see on. See asi lahendatakse ära ühes teises failis.
Teema eesmärk ei olnud see thumbs_up.gif
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 9
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  foreach ja while loop sorteerimine
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.