lkjhgf345
2.01.2017, 14:29:17
Witam
W prostej aplikacji napisanej w PHP mam formularz. Mam w nim stworzony w JavaScripcie auto uzupełnianie dropdown listy (podaje literę i w dropdown liście pokazuje mi podpowiedzi). Na lokalnym serwerze (wamp, localhost) działa bez problemu. Problem się pojawia kiedy odpalam aplikację z serwera postawionego na linuksie. Bajer krótko mówiąc nie działa. Wpisuje ale lista się nie pokazuje. Myślę zbyteczne jest wklejanie jakiegokolwiek kodu skoro na windowsie działa. Proszę o radę.
kapslokk
2.01.2017, 14:32:28
Pierwsze co przychodzi mi do głowy to wielkości liter - np. w nazwach plików z js'em .
lkjhgf345
2.01.2017, 14:34:21
Muszę sprawdzić, tylko w którym miejscu?
viking
2.01.2017, 14:36:36
Uruchom konsolę w przeglądarce, zobacz jakie są błędy a potem trochę pomyśl.
kapslokk
2.01.2017, 14:36:43
W plikach html jesli masz wstawione <script src="">, to w ścieżce i samej nazwie pliku wielkość liter musi być dokładnie taka jak jest na dysku.
lkjhgf345
2.01.2017, 14:43:52
Hmm sprawa się trochę komplikuje.
Odnośnie liter w src mam tak
src="//code.jquery.com/jquery-1.8.0.min.js"
A co do konsoli to w zakładce JS mam "metoda getPreventedDefault()" jest przestarzała. Należy używać defaultprevented.
kapslokk
2.01.2017, 14:49:03
to jest jedyny plik js? Jesli tak to najwidoczniej masz jakies bledy w PHP.
lkjhgf345
2.01.2017, 14:52:02
Cytat(lkjhgf345 @ 2.01.2017, 14:29:17 )

Na lokalnym serwerze (wamp, localhost) działa bez problemu.
dlatego to mnie dziwi. Mam jeszcze dodane datepicker i ma plik lokalnie ale ta funkcjonalność działa nawet na linuksie.
kapslokk
2.01.2017, 14:53:03
Wlacz wyswietlanie bledow, pokaz kod.
lkjhgf345
2.01.2017, 15:02:56
<link rel="stylesheet" href="strona.css" type="text/css"/> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<link rel="stylesheet" type="text/css" href="tcal.css" /> <script type="text/javascript" src="//code.jquery.com/jquery-1.8.0.min.js"></script>
<form name="sprzedawca" method="POST" action="dane.php" enctype="multipart/form-data" autocomplete="off" > <th colspan="2">dokument
</th>
<div><input type="text" name="data" class="tcal" value="" /></div>
<input type="text" class="search_keyword" id="search_keyword_id" name="klient" />
<script type="text/javascript"> $(function(){
$(".search_keyword").keyup(function()
{
var search_keyword_value = $(this).val();
var dataString = 'search_keyword='+ search_keyword_value;
if(search_keyword_value!='')
{
$.ajax({
type: "POST",
url: "search.php",
data: dataString,
cache: false,
success: function(html)
{
$("#result").html(html).show();
}
});
}
return false;
});
$("#result").live("click",function(e){
var $clicked = $(e.target);
var $name = $clicked.find('.country_name').html();
var decoded = $("
<div/>").html($name).text();
$('#search_keyword_id').val(decoded);
});
$(document).live("click", function(e) {
var $clicked = $(e.target);
if (! $clicked.hasClass("search_keyword")){
$("#result").fadeOut();
}
});
$('#search_keyword_id').click(function(){
$("#result").fadeIn();
});
});
plik search.php
<?php
include('/db.php');
if(isset($_POST['search_keyword'])) {
$search_keyword = $polaczenie->real_escape_string($_POST['search_keyword']);
$sqlCountries="SELECT nazwa FROM sklep WHERE nazwa LIKE '%$search_keyword%'";
$resCountries=$polaczenie->query($sqlCountries);
if($resCountries === false) {
}else{
$rows_returned = $resCountries->num_rows;
}
$bold_search_keyword = '<strong>'.$search_keyword.'</strong>';
if($rows_returned > 0){
while($rowCountries = $resCountries->fetch_assoc())
{
echo '<div class="show" align="left"><span class="country_name">'.str_ireplace
($search_keyword,$bold_search_keyword,$rowCountries['nazwa']).'</span></div>'; }
}else{
echo '<div class="show" align="left">Brak</div>'; }
}
?>
kapslokk
2.01.2017, 15:06:53
Sprawdz teraz czy nazwa pliku search.php jest identyczna jak na serwerze - pod katem wielkosci liter, dodatkowo sprawdz w konsoli przegladarki, czy gdy wpisujesz cos w tego inputa to czy ajax jest wysylany i jakie odpowiedzi dostaje.
Nie wazne... masz blad w php
include('/db.php');
Poczytaj o systemie plikow w linuxie i popraw ten blad.
lkjhgf345
2.01.2017, 15:28:38
Powinno być
include('db.php');
ale niestety dalej dziad nie rusza. Mało tego kiedy próbuję coś wpisać w inputa nic w konsoli się nie pojawia prócz TypeError: $(...).live is not a function.

Nie wiem czy to coś ma wspólnego. Będe musiał porównać z tym co się pokazuje w konsoli na windowsie.
viking
2.01.2017, 15:55:12
Bodajże od 1.7 live jest przestarzałe. Tutaj masz jak to zrobić poprawnie:
https://prophp.pl/article/15/jquery%2C_zdar...e_metoda_%24.on No i popraw to sql injection w zapytaniu.
lkjhgf345
2.01.2017, 17:59:27
Spróbuję przygotować ten skrypt pod windowsem i jak się uda to jutro wrzucić go na linuksa i przetestować. Mam nadzieję że to będzie to.
viking
2.01.2017, 18:16:02
System na którym pracujesz nie ma znaczenia. Po prostu Twój kod jest słaby i przestarzały.
lkjhgf345
2.01.2017, 18:36:36
Nie traktuj mojej odpowiedzi jako niegrzecznej

ale to dlaczego musiałem zakładać ten temat?

Znaczy wychodzę z założenia że jaki ten kod by nie był jeśli działa pod windowsem powinien działać i pod linuksem. Pomijam kwestie jakiś bibliotek czy innych "czynników" środowiskowych które w przypadku PHP czy (chyba?) Javascriptu nie mają znaczenia. Dlatego od początku i jeszcze póki co winie sam system.

<script type="text/javascript">
$(function(){
$(".search_keyword").keyup(function()
{
var search_keyword_value = $(this).val();
var dataString = 'search_keyword='+ search_keyword_value;
if(search_keyword_value!='')
{
$.ajax({
type: "POST",
url: "search.php",
data: dataString,
cache: false,
success: function(html)
{
$("#result").html(html).show();
}
});
}
return false;
});
$("#result").on("click",function(e){
var $clicked = $(e.target);
var $name = $clicked.find('.country_name').html();
var decoded = $("<div/>").html($name).text();
$('#search_keyword_id').val(decoded);
});
$(document).on("click", function(e) {
var $clicked = $(e.target);
if (! $clicked.hasClass("search_keyword")){
$("#result").fadeOut();
}
});
$('#search_keyword_id').click(function(){
$("#result").fadeIn();
});
});
</script>
Czy sama zamiana "live" na "on" wystarczy?
viking
2.01.2017, 18:49:54
Ale zrozum że to nie wina systemu tylko kodu. Przeglądarka w obu systemach jest taka sama, PHP przetwarza kod tak samo. Jedyna różnica to wspomniana wielkość liter. Nie ma możliwości żeby działał na jednym a na innym już nie.
kapslokk
2.01.2017, 18:50:12
Cytat
Znaczy wychodzę z założenia że jaki ten kod by nie był jeśli działa pod windowsem powinien działać i pod linuksem.
Ze złego założenia wychodzisz. Kod, żeby działał pod tymi systemami tak samo, musi być odpowiednio napisany, drobne różnice, jak choćby to, że w unixach wielkość liter ma znaczenie wpływają na to, że kod inaczej zachowuje się inaczej. To nie wina systemu, tylko Twoja
lkjhgf345
2.01.2017, 19:08:22
Niestety. A czy ktoś by mógł mi jeszcze co nieco wskazać w kodzie? Sam już nie wiem gdzie mam jeszcze sprawdzić te litery?
nospor
2.01.2017, 19:15:50
Wlacz wyswietlanie wszystkich bledow potem odpal firebug w Firefox i podejrzyj sobie co zwraca ci ajax i wszystko bedzie jasne, nie trzeba bedzie zgadywac co tam sie zepsulo. Proste
trueblue
2.01.2017, 19:17:05
Sprawdź jaka jest odpowiedź żądania ajaxowego w konsoli w zakładce Network/Sieć.
lkjhgf345
3.01.2017, 07:39:51
Niestety dostęp do tego serwera mam tylko w szkole i mogę to zrobić tylko w ciągu dnia

ehh.....

O to screen z firebug. Te na dole dwie metody POST pojawiły się kiedy zacząłem wpisywać litery w inputa (w tym przypadku to były dwie litery). Przesłano ale nie przychodzi żadna odpowiedź, chyba.
DZIAŁA!! Wszysycy Pomógł
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.