Gå til innhold

Javascript og PHP - kan ikke hente ut informasjonen jeg trenger.


Anbefalte innlegg

Hei. Jeg har et problem med Javascript og PHP, hvor jeg allerede har etablert informasjon som er globalt hentet fram fra min SQL database. Altså, brukernavn, epost, osvosv.

Problemet oppstår når jeg skal hente fram informasjon i real-time med Javascript, hvor disse PHP-variablene faller bort og jeg ikke får tak i informasjonen jeg tidligere helt fint har kunne hentet ut. Side-navigeringssystemet mitt består av den klassiske GET['page'] som blir vist ved å da vise .php-filen med en include("fil.php");.

Her er problemstillingen i kodeformat:
 

Quote

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/
libs/jquery/1.3.0/jquery.min.js"></script>
<script type="text/javascript">
var auto_refresh = setInterval(function (){
$('#load_updates').load('./corridor/travel/travelMap.php').fadeIn("slow");
}, 0); // refresh every 10000 milliseconds

</script>

<div id="load_updates"> </div>

Og her er da altså travelmap.php:
 

Quote

<?PHP
include("../cg.php");
$query = $dbh->prepare("SELECT * FROM `tweet` WHERE `id` > '0' and `user` = '$c_name' ORDER BY id DESC LIMIT 19");
        $query->bindParam(":to", $r['id'], PDO::PARAM_INT);
        $query->execute();
        while($to = $query->fetch(PDO::FETCH_ASSOC)){
   echo "<font size=3 color=orange><b>";
   echo $to['user'];
   echo "</font></b> (<font color=lightblue>";
   echo $to['time'];
   if($rank = '100'){
   echo "<font color=\"red\"><a href=\"index.php?corr=side&slett_igl&id=$to[id]\"><b> [Slett]</b></a></font>";
}
echo "";
   echo '<br>'.$to['msg'].'<br>';
   
     if(isset($_GET['id']) && $rank = '19') {
   
   $sql='DELETE FROM tweet WHERE `id` = "'.$_GET['id'].'" ';
   escape_value($sql);
    echo '
 <script type="text/javascript" language="JavaScript">
    setTimeout(function () {
                      location.href = \'index.php?corr=house&mng=house\'; 
               }, 0);
</script>
';
        }}

?>

PHP-variablen ville under normale forhold vist $c_name som brukerens navn, men når Javascript henter ut filen i real-time faller denne variablen bort og det kunne like så greit vært skrevet ingenting under "user".

Jeg prøvde også å hente ut database-informasjon ved å lokalisere config-filen (noe jeg heller ikke har trengt tidligere), men dette funker bare halvveis ettersom jeg får kontakt med databasen - men ikke med de allerede etablerte variablene.

Lenke til kommentar
Videoannonse
Annonse

Bare for å forstå problemstillingen.

Du har to filer.
1) "hovedside" som har Javascript koden.

2) en PHP-fil som henter informasjonen fra databasen.

Når du åpner "hovedside", så vil du ved hjelp av JavaScript laste inn det PHP-filen laster ned inn i <div id="load_updates"> </div>?

Får du feilmelding?

Lenke til kommentar
40 minutes ago, Merko said:

Bare for å forstå problemstillingen.

Du har to filer.
1) "hovedside" som har Javascript koden.

2) en PHP-fil som henter informasjonen fra databasen.

Når du åpner "hovedside", så vil du ved hjelp av JavaScript laste inn det PHP-filen laster ned inn i <div id="load_updates"> </div>?

Får du feilmelding?

Nei, jeg tror ikke det. Hehe. Litt komplisert å forklare.

Jeg har etablert alt av PHP-variabler å hente i config.php-filen min, som er included i index.php. Dette gjør at ALT som foregår innunder index.php kan hente fram ønsket informasjon etablert i config.php, som blant annet variablen $c_name - som henter fram brukernavn gjennom SQL SELECT.

Men når jeg bruker AJAX til å hente ut informasjon slik som i koden overfor ($('#load_updates').load('./corridor/travel/travelMap.php').fadeIn("slow");), så forsvinner disse variablene /blir ubrukelige, slik at når $c_name blir brukt i travelpmap.php så fungerer den ikke på hovedsiden - ved bruk av javascript for å hente fram infoen i real-time.

Endret av Debutanten
Lenke til kommentar

Oi, her var det mye rart på en gang.

La oss begynne med å formatere koden din skikkelig, sånn at det er mulig for resten av oss å lese hva det er du har tenkt:
 

<?PHP
include("../cg.php");
$query = $dbh->prepare("SELECT * FROM `tweet` WHERE `id` > '0' and `user` = '$c_name' ORDER BY id DESC LIMIT 19");
$query->bindParam(":to", $r['id'], PDO::PARAM_INT);
$query->execute();
while($to = $query->fetch(PDO::FETCH_ASSOC)){
  echo "<font size=3 color=orange><b>";
  echo $to['user'];
  echo "</font></b> (<font color=lightblue>";
  echo $to['time'];
  if($rank = '100'){
    echo "<font color=\"red\"><a href=\"index.php?corr=side&slett_igl&id=$to[id]\"><b> [Slett]</b></a></font>";
  }
  echo "";
  echo '<br>'.$to['msg'].'<br>';

  if(isset($_GET['id']) && $rank = '19') {
    $sql='DELETE FROM tweet WHERE `id` = "'.$_GET['id'].'" ';
    escape_value($sql);
    echo '
      <script type="text/javascript" language="JavaScript">
        setTimeout(function () {
          location.href = \'index.php?corr=house&mng=house\'; 
        }, 0);
      </script>
    ';
  }
}
?>

Ettersom du forteller at noen av variablene er definert i cg.php må vi bare gjøre noen antakelser om innholdet der, om du ikke ønsker å dele kildekoden.

Jeg vil begynne med å nevne at ajax-kallet ditt til denne filen ikke spesifiserer noen GET-parametre:
 

load('./corridor/travel/travelMap.php')

Så om du forventer å finne noe som helst i $_GET[] så må dette spesifiseres her, i form av f.eks:

load('./corridor/travel/travelMap.php?id=5')

 

Videre foregår det noen rare ting med database-spørringen din, jeg ser du bruker PDO, som er veldig bra, men du bruker det på en rar måte, og ser ut til å ha med noe kode som ikke er i bruk.
 

$dbh->prepare("SELECT * FROM `tweet` WHERE `id` > '0' and `user` = '$c_name' ORDER BY id DESC LIMIT 19");

Her legger du verdien av en variabel direkte inn i spørringen, dette må du absolutt ikke gjøre, bruk bindParam eller bindValue. I dette tilfellet bør du bytte ut med f.eks:

$query = $dbh->prepare("SELECT * FROM `tweet` WHERE `id` > '0' and `user` = :cName ORDER BY id DESC LIMIT 19");
$query->bindValue(":cName", $c_name, PDO::PARAM_STR);

Jeg ser du allerede har et kall til bindParam, men der refererer du til :to som jeg ikke ser noe sted i spørringen din, så denne gjør ingenting.

Et stykke lenger ned ser jeg noe enda mer hårreisende:

$sql='DELETE FROM tweet WHERE `id` = "'.$_GET['id'].'" ';
escape_value($sql);

Jeg kjenner ikke til at PHP har noen funksjon med navn escape_value(), så jeg regner med dette er noe hjemmesnekret. Uansett hva den funksjonen gjør, eller hvem som har skrevet den, så skal du slutte å bruke den umiddelbart. Her må du gjøre det samme som jeg har beskrevet over, med bindParam:
 

$deleteStatement = $dbh->prepare('DELETE FROM tweet WHERE `id` = :id');
$deleteStatement->bindValue(":id", $_GET['id'], PDO::PARAM_INT);
$deleteStatement->execute();

 

  • Liker 3
Lenke til kommentar

Jeg skulle ikke ha sett denne tråden rett før jeg skulle sove fordi dette gjorde vondt i sjelen og jeg fikk litt problemer med å sove etterpå.

Du bør lese deg opp på grunnleggende sikkerhet på web, bl.a. CSRF, XSS og SQL injection som er et gjentagende problem i koden her (see innlegget til Thorbear). Du kan ikke stole på noen, i hvert fall ikke klienten.

18 hours ago, Debutanten said:

   echo "<font color=\"red\"><a href=\"index.php?corr=side&slett_igl&id=$to[id]\"><b> [Slett]</b></a></font>";

Hva skjer hvis jeg gir deg en lenke som ligner denne som du trykker på mens du er logget inn på din nettside? Dette forumet lar meg ikke legge dette inn som et bilde men det kunne man gjort andre steder og da ville nettleseren din ha sendt forespørselen automatisk og gjort skade (CSRF).

Sannsynligvis sårbar for XSS:

18 hours ago, Debutanten said:

echo '<br>'.$to['msg'].'<br>';

 

18 hours ago, Debutanten said:

Side-navigeringssystemet mitt består av den klassiske GET['page'] som blir vist ved å da vise .php-filen med en include("fil.php");.

Jeg håper for all del at dette ikke gjøres på følgende måte uten å sjekke verdien:

include/require $_GET['page'] . '.php';

Sammen med å ta et kurs eller lignende for sikkerhet vil jeg sterkt anbefale å bygge på grunnleggende koding fordi det ser ut som at koden her er skrevet av noen som ikke helt vet hva de holder på med.

Endret av ahw_
Skriveleif, CSRF, XSS.
Lenke til kommentar
3 minutes ago, Debutanten said:

Takker for svar. Jeg er fullstendig klar over sikkerhetshullene. Jeg drev og redigerte gjennom gamle filer, og holder på å omkode alt til PDO. :)

Men det å legge GET-parametrene inn i ajax-kallet fikset problemet med at verdiene ikke fantes? Eller har vi bare svart med masse som var urelatert til problemet ditt? ;) 

Lenke til kommentar
4 minutes ago, Thorbear said:

Men det å legge GET-parametrene inn i ajax-kallet fikset problemet med at verdiene ikke fantes? Eller har vi bare svart med masse som var urelatert til problemet ditt? ;) 

Nei, problemet var noe så komitragisk som at den AJAX-requeste .php-filen hadde feile kordinater til config.php.

På den annen side; det du fortalte meg om _GET gir mening, men jeg forstår det virkelig ikke!

Endret av Debutanten
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...