Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][JavaScript][PHP]Dlaczego odświeża całą strone
Forum PHP.pl > Forum > Przedszkole
abel1
witam mam problem z odświeżaniem całej strony po wysłaniu wiadomości
  1. <?php
  2.  
  3.  
  4.  
  5.  
  6. ini_set( 'display_errors', 'On' );
  7. error_reporting( E_ALL );
  8.  
  9. if (!isset($_SESSION['zalogowany']))
  10. {
  11. header('Location: index.php');
  12. exit();
  13. }
  14. @$nickname = $_SESSION['user'];
  15.  
  16.  
  17. require 'db_config.php';
  18. $user = $_POST['uzytkownik'];
  19. try {
  20. $polaczenie = new PDO(DB_DRIVER . ":dbname=" . DB_DATABASE . ";host=" . DB_SERVER, DB_USER, DB_PASSWORD);
  21.  
  22. $polaczenie->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  23. $zapytanie = $polaczenie->query("SELECT * FROM kanal WHERE user='$user'");
  24.  
  25. while($row = $zapytanie->fetch())
  26. {
  27. $kolor=$row['kolor'];
  28. $tlo = $row['tlo'];
  29. //$tlo_domyslne=$row['tlo_domyslne'];
  30. $rtmp = $row['rtmp'];
  31. $nazw_kanal = $row['nazwa_kanal'];
  32. if (isset($_POST['wyslane']))
  33. {
  34.  
  35. }
  36. }
  37. }
  38. catch(PDOException $e)
  39. {
  40. echo $zapytanie. "<br />" . $e->getMessage();
  41. }
  42.  
  43.  
  44.  
  45. $polaczenie = null;
  46. ?>
  47. <!doctype html>
  48. <html lang=”pl”>
  49. <head>
  50. <title></title>
  51. <link rel="stylesheet" href="style.css" type="text/css">
  52. <meta charset="UTF-8">
  53.  
  54. <meta name="description" content="Opis naszej strony">
  55. <meta name="keywords" content="Tutaj słowa kluczowe oddzielone przecinkiem">
  56. <!--[if lt IE 9]>
  57. <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  58. <![endif]-->
  59.  
  60. </head>
  61. <body style="background-color:<?php echo $kolor ?>; background-image:url('<?php echo $tlo ?>');">
  62. <div style="float:left;margin-left:50px;":><a href="/">Nazwa strony</a></div><div style="float:left; margin-left:250px;"><form method="post" action="" ><input style="width:300px;height:25px;" type="search" placeholder="Wpisz szukany tekst Będzie działać ale jeszcze nie teraz -:)" name="key" /></form></div>
  63. <?php
  64. if(!isset($_SESSION['user'])){
  65. echo'<div style="float:right; margin-right:20px;"> <form method="post" action="zaloguj.php"><b>Login:</b> <input type="text" name="login" /> <b>Hasło:</b> <input type="password" name="haslo" /> <input class="zaloguj" type="submit" value="Zaloguj się" /></div><div style="clear: both"></div><br /><hr> <div style="margin-top:50px;text-align: center;"><a href="rejestracja.php">Zarejestruj się i nadawaj na żywo</a> ';
  66. }
  67.  
  68. else
  69. {
  70. echo '<div style="float:right;margin-right:100px;"><a href="inbox.php">Odbiorcza</a><br /><a href="new_pw.php">Nadawcza</a><br /><a href="kanal.php">Ustawienia</a><br /><a href="kanal_user.php">Twój kanał</a><br /><a href="lista_kanal.php">Lista kanałów</a><br /><a href="log_out.php">Wyloguj</a></div><div style="clear: both"></div><br /><hr>';
  71. }
  72. ?>
  73. <div style="margin:0 auto;width:865px;">
  74. <div id="tytul" style="border:1px solid;">Kanał : <?php echo $user ?></div>
  75.  
  76.  
  77.  
  78. <script type="text/javascript" src="player/flowplayer-3.2.13.min.js"></script>
  79. <div id="player" style="border:1px solid;width:600px;height:400px;float:left;display: block;"></div>
  80. <script>
  81. $f("player", "/player/flowplayer-3.2.18.swf", {
  82. clip: {
  83. url: '',
  84. live: true,
  85. provider: 'rtmp',
  86. },
  87. plugins: {
  88. controls: {
  89. url: '/player/flowplayer.controls-3.2.16.swf',
  90. all: false,
  91. fullscreen: true,
  92. play: true,
  93. volume: true
  94. },
  95. rtmp: {
  96. play: false,
  97. scrubber: false,
  98. url: '/player/flowplayer.rtmp-3.2.13.swf',
  99. netConnectionUrl: '',
  100. }
  101. }
  102. });
  103. </script>
  104.  
  105. </div>
  106.  
  107. <div id="czat_logowanie" style="float:left;">
  108. <!---------------- czat-------------------------------->
  109. <?php
  110.  
  111.  
  112. @$nickname = $_SESSION['user'];
  113.  
  114.  
  115. $id = $_SESSION['id'];
  116.  
  117.  
  118.  
  119. ?>
  120.  
  121. <!DOCTYPE HTML>
  122. <html lang='pl'>
  123. <head>
  124. <meta charset='utf-8'>
  125. <meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1'>
  126. <title></title>
  127. <link href="style/style.css" rel="stylesheet" type="text/css" />
  128.  
  129. <script language="javascript" type="text/javascript">
  130. <!--
  131. var httpObject = null;
  132. var link = "";
  133. var timerID = 0;
  134. var nickName = "<?php echo $nickname; ?>";
  135.  
  136. // Get the HTTP Object
  137. function getHTTPObject(){
  138. if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
  139. else if (window.XMLHttpRequest) return new XMLHttpRequest();
  140. else {
  141. alert("Twoja przeglądarka nie działa z AJAX.");
  142. return null;
  143. }
  144. }
  145.  
  146. // Change the value of the outputText field
  147. function setOutput(){
  148. if(httpObject.readyState == 4){
  149. var response = httpObject.responseText;
  150. var objDiv = document.getElementById("result");
  151. objDiv.innerHTML += response;
  152. objDiv.scrollTop = objDiv.scrollHeight;
  153. var inpObj = document.getElementById("msg");
  154. inpObj.value = "";
  155. inpObj.focus();
  156. }
  157. }
  158.  
  159. // Change the value of the outputText field
  160. function setAll(){
  161. if(httpObject.readyState == 4){
  162. var response = httpObject.responseText;
  163. var objDiv = document.getElementById("result");
  164. objDiv.innerHTML = response;
  165. objDiv.scrollTop = objDiv.scrollHeight;
  166. }
  167. }
  168.  
  169. // Implement business logic
  170. function doWork(){
  171. httpObject = getHTTPObject();
  172. if (httpObject != null) {
  173. link = "message.php?nick="+nickName+"&msg="+document.getElementById('msg').value;
  174. httpObject.open("GET", link , true);
  175. httpObject.onreadystatechange = setOutput;
  176. httpObject.send(null);
  177. }
  178. }
  179.  
  180. // Implement business logic
  181. function doReload(){
  182. httpObject = getHTTPObject();
  183. var randomnumber=Math.floor(Math.random()*10000);
  184. if (httpObject != null) {
  185. link = "message.php?all=1&rnd="+randomnumber;
  186. httpObject.open("GET", link , true);
  187. httpObject.onreadystatechange = setAll;
  188. httpObject.send(null);
  189. }
  190. }
  191.  
  192. function UpdateTimer() {
  193. doReload();
  194. timerID = setTimeout("UpdateTimer()", 5000);
  195. }
  196.  
  197.  
  198. function keypressed(e){
  199. if(e.keyCode=='13'){
  200. doWork();
  201. }
  202. }
  203. //-->
  204. </script>
  205.  
  206.  
  207.  
  208. </head>
  209. <body onload="UpdateTimer();">
  210. <div id="main_czat">
  211. <div id="caption">Czacik </div>
  212.  
  213.  
  214.  
  215.  
  216. <?php
  217. $data = file("$id");
  218. echo '<div id="result">';
  219. foreach ($data as $line) {
  220. echo $line;
  221. }
  222. ?>
  223. </div>
  224. <div id="sender" onkeyup="keypressed(event);">
  225. <form method="post" > <input type="text" name="msg" id="msg" />
  226. <div class="btn"><input type="submit" value="wyslij" onclick="doWork();"></form>
  227. </div>
  228. </div>
  229. <?php
  230. if(isset($_POST['msg'])){
  231.  
  232. }
  233.  
  234. ?>
  235. </div>
  236.  
  237.  
  238. </body>
  239. <!---------------------------koniec--------------------------------------->
  240. </div>
  241. <div style="clear: both"></div>
  242. <hr>
  243. <br />
  244. <div style="text-align: center;font-weight:bold;"> Nazwa_Strony&copy 2015</div>
  245. </body>
  246. </html>

Dodam że raz już zastosowałem ten sam czat w innym projekcie i tam wszystko działa jak powinno natomiast tutaj z jakiegoś powodu zamiast odświeżać samo okna czatu odświeża całą stronę
Niestety na JS nie znam się w ogóle i nie napisałem tego czata a tym samym nie wiem jak to naprawić
Liczę na waszą pomoc
trybun
Zapewne problem leży po stronie php...

  1. if (!isset($_SESSION['zalogowany']))
  2. {
  3. header('Location: index.php');
  4. exit();
  5. }
abel1
gdyby to była wina tego if-a to by mnie przenosiła do index.php
ale ten problem występuje również na innych podstronach na których mam ten czat
Najzwyczajniej zamiast odświeżyć samo okno czata żeby pojawiła się wiadomość która własnie napisałem to odświeża całą stronę
I nie ma znaczenia jaka to podstrona czy to index.php czy inna na której jest ten czat
Odświeża strone nie przenosi nigdzie
viking
Nie widzę żebyś miał jakiś kod który na submit formularza zabrania domyślnej akcji czyli wysyłki a co za tym idzie odświeżenia strony. Widzę za to @ w kodzie oraz możliwość sql injection.
trybun
Cytat(viking @ 15.09.2016, 07:08:16 ) *
Nie widzę żebyś miał jakiś kod który na submit formularza zabrania domyślnej akcji czyli wysyłki a co za tym idzie odświeżenia strony. Widzę za to @ w kodzie oraz możliwość sql injection.


Faktycznie SQLI jak byk na wstępie.


Co do przeładowania spróbuj zakomenntować kod w funkcji doReload i wstaw tam jakieś alert albo wyprintuj coś w konsoli, jak nie będzie odświeżać a funkcja będzie wywoływana to już wiesz gdzie jest błąd i gdzie naprawiać.
Puszy
Jak na moje oko to wciśnięcie "ENTER" po wpisaniu wiadomości wysyła formularz który przeładowuje stronę. Wystarczy użyć preventDefault(), szczerze nie wiem jak to tutaj zaimplementować. Musiałbyś jakoś pobrać eventListenera w doWork()
abel1
Cytat(viking @ 15.09.2016, 07:08:16 ) *
Nie widzę żebyś miał jakiś kod który na submit formularza zabrania domyślnej akcji czyli wysyłki a co za tym idzie odświeżenia strony. Widzę za to @ w kodzie oraz możliwość sql injection.


Masz może na myśli to :
  1. $zapytanie = $polaczenie->query("SELECT * FROM kanal WHERE user='$user'");

Jeżeli tak to raczej nie przewiduje wstrzyknięcia tutaj czegokolwiek , to zapytanie ustawia tylko to co już zostało zdefiniowane w bazie
Ale chętnie przeczytam w jaki sposób można wstrzyknąć coś do bazy nie mają c do dyspozycji formularza ( jestem początkujący w PHP )
Cytat(puszy)
Jak na moje oko to wciśnięcie "ENTER" po wpisaniu wiadomości wysyła formularz który przeładowuje stronę. Wystarczy użyć preventDefault(), szczerze nie wiem jak to tutaj zaimplementować. Musiałbyś jakoś pobrać eventListenera w doWork()

Jak byś mógł jakoś to sprecyzować, tak jak napisałem nie znam JS i szczerze nawet nie wiem o czym piszesz.
tak naprawdę potrzebuje rozwiązania nie naprowadzenia na rozwiązanie
viking
$user = $_POST['uzytkownik'];

A to niby co? Dane pochodzą z post. Najprostsza metoda na preventDefault w tym kodzie to zwrócenie false. Dodaj do funkcji return false.
abel1
Cytat(viking @ 16.09.2016, 21:23:54 ) *
$user = $_POST['uzytkownik'];

A to niby co? Dane pochodzą z post. Najprostsza metoda na preventDefault w tym kodzie to zwrócenie false. Dodaj do funkcji return false.


Masz na myśli tą funkcje

  1. function keypressed(e){
  2. if(e.keyCode=='13'){
  3. doWork();
  4. }
  5. }


I powinienem to dodać tak

  1. function keypressed(e){
  2. if(e.keyCode=='13'){
  3. doWork();
  4. return false;
  5. }
  6. }


A co do $user = $_POST['uzytkownik']; , to jest post z innej podstrony gdzie jest formularz do którego user nic nie może wpisać ponieważ formularz zawiera tylko przyciski które nie są do modyfikacji przez użytkownika
viking
Możesz tez dodać w onclick (powinno tam być onsubmit swoją drogą) po dowork(). Nie ma znaczenia czy jest do odczytu. Mozna to szybko zmienić w konsoli albo wysłać nowy form.
abel1
był byś tak dobry i napisał kod jaki mam wstawić i gdzie
Jak już pisałem ja się nie znam na JS nie mam pojęcia gdzie co wstawić
viking
Już pisałem. Po dowork();return false; jak nie zadziała kombinuj z eventami. W google jest pełno materiałów na ten temat.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.