Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][JavaScript][PHP]Z PHP przez HTML do JS i z powrotem ;)
Forum PHP.pl > Forum > Przedszkole
Singularity
Witam,

Mam plik PHP, który wysyła zmienne do pliku HTML. Te zmienne, np. $sHash, $iId, $Alt, $sFileLink itd. służą do dynamicznego generowania galerii obrazów
i w pliku HTML przyjmują postać __hash__, __alt__, __fileLink__ itd.
Czyli mamy np. <a href="__fileLink__"><img src="__imgUrl__" alt="__alt__" width="100%" height="100%"></a>

I teraz pytanie:

Czy możliwe jest przesłanie jednej z tych zmiennych do funkcji JavaScript za pomocą onclick? Jeśli tak, to jak powinno to wyglądać?

onclick="myCall('__ZMIENNA__');" ? Próbowałem, ale w tym przypadku do funkcji dociera nie zmienna, ale jej ostatnia wartość (np. alt albo hash ostatniego
wyświetlonego na stronie zdjęcia).

A po stronie JS?

<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
function myCall( questionmark.gif? ) {
var request = $.ajax({
url: "URL DO INNEGO PLIKU PHP",
type: "POST",
dataType: "html"
});

request.done(function(msg) {
$("#mybox").html(msg);
});

request.fail(function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
});
}
</script>

Z góry dziękuję za wskazówki!

EDIT: Dodam jeszcze może dla wyjaśnienia, co chcę osiągnąć: Wyświetla się galeria zdjęć, użytkownik klika na link pod jednym ze zdjęć, co powoduje zmianę liczby
wyświetleń danego zdjęcia o 1. Na zasadzie: "Views: 13". Click. "Views:14". Tak więc to kliknięcie powinno uruchomić skrypt i zwrócić zmienną (w tym przypadku
hash zdjęcia), którą ajax wyśle dalej do pliku PHP, który z kolei uaktualni tabelę Photos w tym wierszu, w którym znajduje się konkretny hash.
Wszystko to już zrobiłem, jedyne co nie działa to właśnie przesłanie odpowiedniej zmiennej, bo do tej pory czego bym nie próbował, +1 view dostaje zawsze ostatnie
zdjęcie na stronie...
IProSoft
http://jsfiddle.net/YHFnL/
Singularity
Ok, to już jakiś krok do przodu, ale ja nie chcę przesyłać linku tylko hash. Próbuję tak, ale nie działa:

HTML:

<a class="po_click" id="__hash__" href="#"><img></a>

JS:

<script>
$('.po_click').on('click', function(){
var request = $.ajax({
url: "http://my-site/templates/viewscounter.php",
type: "GET",
data: {n : 'id'},
dataType: "html"
});
});
</script>

viewscounter.php:

<?php
Header("content-type: application/x-javascript");

$hash = $_GET['n'];

mysql_connect("IP", "USER", "PASSWORD") or die(mysql_error());
mysql_select_db("DB NAME") or die(mysql_error());

mysql_query("UPDATE `bx_photos_main` SET `Views` = `Views` +1 WHERE `Hash` = '".$hash."'");

Linki i połączenie z bazą danych działa. Sprawdzałem.
IProSoft
Pokazałem Ci tylko wzór, wystarczy zmienić attr('href') na attr('id'), nie czekaj zawsze na gotowca tylko kombinuj :-)
[JAVASCRIPT] pobierz, plaintext
  1. <script>
  2. $('.po_click').on('click', function(){
  3. var id = $(this).attr('id');
  4. var request = $.ajax({
  5. url: "http://my-site/templates/viewscounter.php",
  6. type: "GET",
  7. data: { n : id },
  8. dataType: "html"
  9. });
  10. });
  11. </script>
[JAVASCRIPT] pobierz, plaintext
Singularity
Kombinowałem smile.gif Dzięki!

Ale teraz jest nowy problem - wyskakuje mi kilka alertów 'undefined' a ilość wyświetleń zdjęcia zmienia się o losową(?) liczbę - 5,6, czasem kilkanaście!

Może wkleję całe pliki. Najpierw PHP (w tym przypadku tylko funkcja, bo cały plik jest ogromny), który wysyła zmienne do html:

  1. function _getSharedThumb ($iId, $sFileLink, $sHash = '')
  2. {
  3. $sIdent = strlen($sHash) > 0 ? $sHash : $iId;
  4. $result = mysql_query("SELECT `title` FROM `bx_photos_main` WHERE `Hash` = '".$sHash."'");
  5. $aUnit = array(
  6. 'imgUrl' => $this->getImgUrl($sIdent),
  7. 'hash' => $sHash,
  8. 'fancyUrl' => str_replace("browse","file",$this->getImgUrl($sIdent)),
  9. 'fileLink' => $sFileLink,
  10. );
  11. return $this->oModule->_oTemplate->parseHtmlByName('thumb.html', $aUnit);
  12. }


Teraz HTML + skrypt:

  1. $('.single_image').on('click', function(){
  2. var id = $(this).attr('id');
  3. var request = $.ajax({
  4. url: "/templates/base/viewscounter.php",
  5. type: "GET",
  6. data: { n : id },
  7. dataType: "html",
  8. });
  9.  
  10. request.done(function() {
  11. alert( $(this).attr('id') );
  12. return false;
  13. });
  14.  
  15. request.fail(function(jqXHR, textStatus) {
  16. alert( "Request failed: " + textStatus );
  17. });
  18. });
  19.  
  20. <div class="sys_file_search_pic bx_photos_file_search_pic">
  21. <a class="single_image" id="__hash__" href="__fileLink__"><img src="/images/enlarge.png" width="28px" height="28px"></a>
  22. </div>


viewscounter.php i update bazy danych:

  1. <?php
  2. Header("content-type: application/x-javascript");
  3.  
  4. $hash = $_GET['n'];
  5.  
  6. // Make a MySQL Connection
  7. mysql_connect("...", "...", "...") or die(mysql_error());
  8.  
  9. // Retrieve all the data from the "example" table
  10. mysql_query("UPDATE `bx_photos_main` SET `Views` = `Views` +1 WHERE `Hash` = '".$hash."'");


Jestem zupełnie nowy w tym, ale może chodzi o to, że w tym przypadku kliknięcie na pojedyncze zdjęcie tak naprawdę uruchamia skrypt dla każdego zdjęcia w galerii,
wykonuje go tylko dla klikniętego, a resztę zwraca jako undefined? No i dlaczego pojedyncze kliknięcie powoduje kilka odwołań do bazy danych?


EDIT:
Już wiem. Wszystko zależy od kolejności zdjęcia. Dla ostatniego na stronie ilość odwiedzin rośnie o 0, dla przedostatniego o 1, trzeciego od końca o 2 itd.
Jak zrobić, żeby niezależnie od kolejności wzrastała o 1 ?
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.