Jump to content
php.lv forumi

kasisppr

Reģistrētie lietotāji
  • Posts

    70
  • Joined

  • Last visited

Posts posted by kasisppr

  1. Neesmu pārliecināts, bet, ja mainiji SQL, tad

    $id = mysql_result(mysql_query("SELECT id FROM registretie_lietotaji WHERE niks = $user AND parole = $pass"),0,'id');
    //vai tikai nav japamaina kas vairak???
    $id = mysql_result(mysql_query("SELECT niks FROM registretie_lietotaji WHERE niks = $user AND parole = $pass"),0,'niks');

     

    Paskaties ko isti dara mysql_result() 3-ais parametrs.

  2. Kā man nepasen stāstīja sens darba kolēģis (pietiekami pieredzējis), ja cilvēks vairs negrib neko jēdzīgu darīt vai arī viņam ir apnicis strādāt, tad viņš kļūst par konsultantu.

  3. Vēl viens ieteikums, kurš te ļoti bieži tiek pieminēts, saistībā ar aizsardzību pret SQL injekcijām.

    Nepadod pa tiesho $_POST, $_GET mainīgo uz datubāzi bez jebkādas apstādes, vismaz mysql_real_escape_string() vai mysql_escape_string() izmanto stringiem un intval() veseliem skaitlļem.

  4. Nja xfr33, palasijos tavus PHP piedzīvojumus. Mans ieteikums, pirms sāc ko jēdzīgu/nopietnu programmēt, palasi kaut kādu grāmatu vai plīdz kādu gudrāku tev izstastīt neskaidrās lietas. Jo tavas pieļautās kļūdas ir diezgan vienkāršas(pat sintaktiskas) un tev šķiet tomēr nav īstas nojēga par dažiem PHP programēšanas pamatprincipiem.

     

    Vienkārši var apnikt tev bakstīt katrā nāmajā sekojošajā kodā ar pirkstu, kur tu pielaid kļūdas.

  5. Mazliet precizēšanai!

     

    Gribi, lai pēc jaunuma ievadīšanas parāda visas tēmas un iekavās teksts, ja ievadītais jaunums ir pie šīs tēmas vai vispār jebkurš jaunums ir pie šīs tēmas???

    Ja pirmais gadījums, tad:

    //pienemu, ka jaunums nav vairakas reizes pievienots vienai temai
    SELECT title, IF(it.id IS NULL, 0, 1) AS tema_izveleta
    FROM thema t
    LEFT JOIN izveletas_temas it ON t.id = it.tema_id AND it.jaunums_id = 'svaigi ievadita jaunuma id';

    PHP skripta nocheko, ja 'tema_izveleta' == 1 pieliec klat tekstu.

     

    Ja otrais

    SELECT id, title FROM thema t ; //visas temas

    SELECT DISTINCT(tema_id) FROM izveletas_temas; 
    //temas kuram ir jaunumi

     

    Tālāk PHP scriptā samet abus rezultātus masīvā un veido ko līdzīgu:

    foreach($title_rezultati AS $values)
    {
      if(in_array($values["id"], $izveletas_temas_rezultati)) $iekavas = " (tema izveleta)";
      else $iekavas = "";  
      echo $values["title"].$iekavas;
    }

     

    Nu kaut kā tā.


  6. Pieņemu, ka visas pēdiņas tiešām esi salicis, tāpēc tās kļūdas neapspriedīšu.

     

    if(isset($_GET['page']) && $_GET['page'] == 'results) {..}

    elseif(isset($_GET


    ) && $_GET


    == 'results' and $_GET[info]){..}

     

    Neredzu iemeslu, lai tev vispār kaut reizi izpildītos elseif nosacījums, ja $_GET['page'] = 'result' un pat ir kaut kāda $_GET['info'] vērtība.

    Nostrādās IF nosacījums un viss.

     

    Vai nu maini elseif ar if vietām, vai būvē citu loģiku.

  7. Pats esmu veidojis ko līdzīgu.

    Problēma kā jau minēja ir ar IE, jo tas neatbalsta onmouse eventu option elementiem.

     

    Diemžēl vienkāršu risinājumu šai problēmai nav.

    Variants ir vai nu tu viltīgi pārveido selectu par tabulu vai div elementiem, kuriem onmouse events IE ir atļauts, un operē ar tiem.

     

    Izdomā vai tu to tiešām tik ļoti gribi?

  8. Nu lūk, dzīvs piemērs, kāpēc dažreiz labāk izmantot

    INSERT INTO table (col1, col2, ...) VALUE (col1_value, col2_value, ....);

    nevis

    INSERT INTO table (col1_value, col2_value, ....);

     

    Pirmajā gadījumā pastāv iespēja, ka kods nav jāmaina, ja pieliec papildus kolonas, taču otrā bez izmaiņām kverijā neiztiksi.

  9. Nu tā:

    1) NEKAD pa tiešo bez apstrādes nepadod _POST, _GET, _REQUEST mainīgos MySQL querijam, it sevišķi, ja tie ir "stringi" tipa.

    Tas ir ļoti nedroši, vismaz apstrādā ar mysql_escape_string();

    Uzmini, kas notiks, ja es Tev $_POST['meklet'] padošu, piemēram, kā "xxx'; DROP TABLES; SELECT 'A tabulu vairs nav!!!"???

     

    2) centies izvairīties no LIKE '%'xxx%' sintakses. Tas strādās ilgāk un pie liela datu apjoma tas būs jūtams. Varbūt kādā no taviem gadījumiem der arī LIKE 'xxx%', jo tad var arī noindeksēt attiecīgo tabulas kollonu, kas paātrina meklēšanu.

     

    3) ja tev ir vairāk par 2 scenārijiem uz 1 vērtību, varbūt ir vērts padomāt izmatot nevis IF .. ELSEIF .. ELSE .., bet switch sintaksi.

    switch $tabula
    {
     case 'lietotajs':
     {
      //kods
      break;
     }
     case 'komanda':
     {
      //kods
      break;
      }
      default:
      {
      //kods
      break;
      }
    }

     

    4) vienā vietā kodā tu nodefinē mainīgos $kas un $kas2, bet kur tu tos izmanto, jo tālāk kodā tie neparādās?

  10. Es nekad neesmu manījis, ka forma vispār nosubmito zem $_post[] arī pati savējo <form> tagu vērtības.

    Ieliec kaut ko tādu kā <input type="hidden" name='dzeest_sevi' value="...(tava vertiba)...." />

     

    P.S.

    Andrisp jau pasteidzas ar skaidrojumu.

  11. Esi pārliecināts, ka tiec līdz dzēšanas kodam?

    Esi mēģinājis izdrukāt to SQL kveriju un palaist uz datubāzes?

     

     

    P.S.

    Maz ticams, ka tā varētu būt, bet iespējams.

    Ja nu tomēr viss ir PAREIZI, bet ieraksts nepazūd.

    Man ir gadījies, ka pie vainas ir MySQL menedžeris, kurā ir atvērta attiecīgā tabula, kuru mēģinu caur aplikāciju rediģēt.

    Bet maz ticams.

  12. Izskatās pēc "Iedod gatavu kodu" tēmas.

    Bet kas tev nepatīk sortēšanā izmantojot masīvu, turklāt tu sortē tikai pēc viena parametra - datuma.

    Nezinu pat citu variantu, jo failus nolasi no direktorijas.

     

    $arrFiles = array();
    if ($handle = opendir($demodir)) {
    while (false !== ($file = readdir($handle))) 
    {
     if(stristr($file, $shodienaa4) !== FALSE)
       {
    	$dat = strstr($file , '-');
    	$datums = substr($dat, 3); // taa, kaa nepacenties iedot failu nosaukumus, pieņemu ka datums ir kaut kur te plus ar vel kaut kaadu drazu gala
    	$arrFiles[$datums] = $file;
      }
    }
    closedir($handle);
    if(!empty($arrFiles))
    {
     ksort($arrFiles);
     foreach($arrFiles AS $dat1 => $text)
     {
    	$laiks = substr($dat1, 5, 4);
    	$karte = substr($dat1, 10, -5);
    
    	$st = substr($laiks, 0, 2);
    	$min = substr($laiks, 2, 2);
    
    	echo "<tr><td>".$st.":".$min."</td><td style='text-transform:lowercase'>".$karte."</td>";
    	echo"<td><a href='http://clan.lv/demos/".$text."'>Novilkt</a></td></tr>";
     }
    }

     

    Nu tāds ir mans ķep-ļep ātrais variants.

    Ideja skaidra??

  13. Mana nīstākā poga ir browser "Back", jo tas ir praktisks ekvivalents history.back() funkcijai.

    Lai tā nostrādātu saglabājot iepriekšējās vērtības, jāpievieno PHP hederis:

    header("Cache-Control: private");

    vai ari meta tags HTML koda

    <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="PRIVATE">

     

    Bet principa labāk glabāt tos sessijās ka jau piedāvāja iepriekš.

  14. Un kur problēma vaicājumā jau saskaitīt?

    Select .. from .. where .. order by (saskaitam) asc/desc

     

    Nu nez "problēma" varētu būt tur, ka rezultāti tabulā "cw_rezultati" ir jāsaskaita, tie tam 2x.

    Diemžēl topika autors nav pacenties izskaidrot kāda ir tabulas struktūra un kā tajā tiek glabāti dati, bet kristāla bumbas tagad dārgas un deficīts.

     

    Varbūt Tev ir idejas kā dabūt tos atbilstošo komandu "punktus" (piedevām apstrādātus pēc tām formulām) klāt tai vienā kverijā kā kolonu

    SELECT id, komandas_valsts, komandas_nosaukums, komandas_tags FROM komandas ORDER BY 'id' DESC

     

    Ja jā, tad tiešām nav problēma izmantot tavu piemēru.

    Taču es šobrīd ātrāko variantu redzu glabāt visu masīvos un operēt ar tiem.

  15. Pag, nu ja tu esi nomainījis kveriju uz

    SELECT user_level FROM users WHERE login='$_POST['login']'

    ,

     

    tad spiežot uz to tavu linku, kas aizved uz logout.php, aplikācija atgriežas index.php ar tukšu $_POST['login'] vērtību. un ja vien tev datubāzē nav kāds lietotājs ar login lauka vērtību '' (tukšums) , SQL kverijs tev atgriezis 0 rindas un nekas no tava while(){} ciklā esošā koda neizpildīsies. Drīzāk raksti kaut ko līdzīgu

     

    $user_login = !empty($_POST['login']) ? $_POST['login'] : $_SESSION['login'];
    
    $result = mysql_query("SELECT * FROM users WHERE login='$user_login'");
    $row = mysql_fetch_array($result)
    if($row)
    {
     while($row)
     {
    	 if($row['user_level'] == 2) { // ja pakaape2 - tad ir moderators}
    	 else if($row['user_level'] == 3) { // ja pakaape 3 - tad ir administrators}
    	 else { // ja pakaape 1 - tad ir lietotaajs} //kaut kadu pakapi varbut tomer vajag iedot by default
      }
    }
    else
    {
    // te nak tava login forma
    }

     

    P.S. tu $_POST['login'] rakstīji "login" pēdiņās??? Jo parādītajā SQL kverija piemērā tādu nav.

     

    P.S.S. par koda sintaksi neesmu drošs, jo esu pieradis izmantot ADODB SQL pieprasijumiem.

×
×
  • Create New...