Afisare continut div fara a se da refresh la pagina AJAX

Ai o întrebare legată de PHP? Incercăm să îi găsim soluţie. Sau poate doar vrei să publici un cod interesant.

Moderatori: Zamolxe, Moderatori

tamara
PHPRomania Supporter
Mesaje: 11
Membru din: Mie Apr 27, 2011 3:36 pm

Afisare continut div fara a se da refresh la pagina AJAX

Mesajde tamara » Mar Aug 26, 2014 4:30 pm

Am o problema careia nu ii dau de capat. Daca ma poate ajuta cineva si pe mine.
Intr-o pagina am 3 div-uri (stanga, central, dreapta)
In Div-ul din stanga mi se afiseaza cuprinsul (treeview) unui document doc1
In div-ul central continutul documentului doc1
In div-ul din dreapta se afiseaza sectiuni din alt document doc2 ce au legatura cu documentul doc1 din div-ul central.

Cand dau click pe un capitol din cuprins (adica un nod din treeview - div-ul stanga) mi se afiseaza in div-ul central textul din capitolul respectiv al documentului doc1, iar in div-ul din dreapta textul in legatura din doc2.

Intrebarea mea este: Cum sa afisez in div-ul din dreapta textul fara sa dau refresh la pagina.

Mai jos este codul:

Cod: Selectaţi tot

<div id="Document">
   <div id="CuprinsDiv" class="ScrollContent">
        <?php   CreateTree($cod_document); ?>
    </div>
   <div id="TextWrapperDiv" style="height:100%; overflow-y: auto;">
      <?php   AfisareText($cod_document); ?>
   </div>
   <div id="RightDiv" style="height:100%; overflow-y: auto;">          
       <?php
          $textContinut = "";
           if(isset($_POST['userId'])){
            $sectiune = $_POST['userId'];
            $conn = new PDO("sqlsrv:Server=localhost\\SQL2012;Database=database" , "user", "parola");
            $sql="select texthtml from documentetext where COD_SECTIUNE = ".$sectiune;
   
            $q=$conn->prepare($sql);
            $q->execute();
   
            $q->bindColumn(1, $texthtml);
            
            while($q->fetch())
            {
               $textContinut .= $texthtml;
                  
            }
            echo $textContinut;
      
         }
         else
         {
            echo $textContinut;
         }

      ?>
    </div>
</div>
         
<script type="text/javascript">
$(document).ready(function(){
   $(".link").click(function(){
      var stringId = $(this).attr('id');
      var userId = stringId.substring(5,12);
      $.ajax({
         type:"POST",
         url: "<?php echo $_SERVER['REQUEST_URI']; ?>",
         data: {userId : userId},
         success: function(result)
         {
            var textcontinut = <?php echo json_encode($textContinut); ?>;
            $('#RightDiv').text(textcontinut);
         }
      });
   });
});
</script>


Nu vreau sa se dea refresh la div-ul stanga si central.
Multumesc



Avatar utilizator
Birkoff
Senior Member
Mesaje: 6380
Membru din: Joi Mar 18, 2004 2:34 pm
Localitate: Bucuresti
Contact:

Re: Afisare continut div fara a se da refresh la pagina AJAX

Mesajde Birkoff » Mar Aug 26, 2014 4:57 pm

1) la apelul prin ajax trebuie sa trimiti catre un script care iti va returna strict portiunea care vrei sa o afisezi fara alte div-uri (din ce vad tu ceri url: "<?php echo $_SERVER['REQUEST_URI']; ?>", care e acelasi script deci iti va returna iar toata structura de div-uri din el.

2) nu filtrezi datele primite (nu previi contra atac xss/sql injection si altele)

3) nu tratezi erorile in ajax (ai doar cazul succes nu si cel de error)

4) varianta aleasa pe tine e dead seo (motoarele de cautare nu vor indexa in veci ce preiei tu prin ajax), trebuie sa oferi si o varianta clasica pentru seo.
1) CMS, ERP, CRM, etc... (doar pentru clienti))
2) Portofoliu, servicii, contact, blog
3) Folositi aceasta clasa sql in proiectele voastre (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.

Avatar utilizator
artur99
Average Member
Mesaje: 55
Membru din: Joi Ian 10, 2013 9:00 pm
Contact:

Re: Afisare continut div fara a se da refresh la pagina AJAX

Mesajde artur99 » Mar Aug 26, 2014 5:58 pm

Ai nevoie de 3 pagini:

index.php: unde ai cele 3 div-uri:
- Primul completat cu cuprinsul
- Al 2-lea si al 3-lea goale sau cu un text gen "Selectati titlul din cuprins"
- Cand e selectat un titlu din cuprins, iei cu jquery->ajax continutul din getcontent.php si il pui al 2-lea div si din getsimilar.php si il pui in al 3-lea div
getcontent.php
- Un fisier care doar afiseaza continutul in functie de un request de tip GET sau POST trimis prin ajax din index.php
getsimilar.php
- Un fisier care textul in legatura din doc2 in functie de un request de tip GET sau POST trimis prin ajax din index.php

Si asa ai rezolvat tot... ;)


Acolo ai PDO deci nu cred ca e predispus la SQL injection... Si xss nu stiu pe unde s-ar putea executa... :D

emanue1
PHPRomania Supporter
Mesaje: 12
Membru din: Joi Iun 05, 2014 1:16 pm

Re: Afisare continut div fara a se da refresh la pagina AJAX

Mesajde emanue1 » Mar Aug 26, 2014 7:20 pm

artur99 scrie:Acolo ai PDO deci nu cred ca e predispus la SQL injection... Si xss nu stiu pe unde s-ar putea executa... :D


Are PDO, dar nu este folosit cum trebuie. Variabila $sectiune este luata direct din $_POST si face o interogare cu ea concatenata la query, nu trimisa ca parametru (bind), aici poti face sql injection.
XSS se poate aplica tot pe variabila $sectiune, dupa injection.

Avatar utilizator
artur99
Average Member
Mesaje: 55
Membru din: Joi Ian 10, 2013 9:00 pm
Contact:

Re: Afisare continut div fara a se da refresh la pagina AJAX

Mesajde artur99 » Mar Aug 26, 2014 8:27 pm

emanue1 scrie:
artur99 scrie:Acolo ai PDO deci nu cred ca e predispus la SQL injection... Si xss nu stiu pe unde s-ar putea executa... :D


Are PDO, dar nu este folosit cum trebuie. Variabila $sectiune este luata direct din $_POST si face o interogare cu ea concatenata la query, nu trimisa ca parametru (bind), aici poti face sql injection.
XSS se poate aplica tot pe variabila $sectiune, dupa injection.

Wikipedia:

Cod: Selectaţi tot

Cross-site scripting (XSS) is a type of computer security vulnerability typically found in Web applications. XSS enables attackers to inject client-side script into Web pages viewed by other users.

Eu nu vad unde este executat codul inserat de pontetialul atacator... :D Daca ajunge un tag sau un atribut in baza de date nu inseamna ca e XSS... Doar daca este si afisat...
Cred... :bom:

tamara
PHPRomania Supporter
Mesaje: 11
Membru din: Mie Apr 27, 2011 3:36 pm

Re: Afisare continut div fara a se da refresh la pagina AJAX

Mesajde tamara » Mie Aug 27, 2014 1:46 pm

Multumesc de raspunsuri si sfaturi
Am rezolvat.
Am schimbat in Ajax url-ul si mi-a iesit pana la urma.


Înapoi la “Cod PHP”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 18 vizitatori