Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][MySQL][PHP] Przekazywanie zmiennej do pliku
Forum PHP.pl > Forum > Przedszkole
Terrorizer
Cześć,

Wciąż usiłuję stworzyć coś w rodzaju przycisku Like na stronie.
Sporo czytałem o ajaxie i generalnie mam wizję jak to zrobić, o ile nie zrozumiałem czegoś źle.

Posiadam pętlę wyświetlającą zdjęcia z bazy i wygląda ona tak:
  1. $allphotos = mysql_query("SELECT * FROM photos");
  2. while ($numphotos = mysql_fetch_assoc($allphotos)){
  3. echo "<div class='thisphotobox'><div class='photouser'>" . "Dodał:<a href=' " . $numphotos['user'] . "' class='proflink'> ".$numphotos['user']."</a></div>";
  4. echo "<div class='photodate'>" . $numphotos['date'] . "</div>";
  5. echo '<img src="'.$numphotos['link'].'" alt="photo" class="photolink" align="middle">';
  6. echo '<div class="guziktak"><img src="gfx/guzik tak.png" alt="guzik" onclick="ajaxvotelike()"></div>';
  7. echo '<div class="guziknie"><img src="gfx/guzik nie.png" alt="guzik" onclick="ajaxvotedislike()"></div></div><br>';

Jak pewnie zauważyliście dodałem do guzików przeznaczonych do głosowania funkcję onclick, która odwołuje się do funkcji ajaxowej która wygląda tak:
  1. <script>
  2. function ajaxvotelike(){
  3. xmlhttp.open("GET","ajaxlike.php",true);
  4. xmlhttp.send();
  5. }
  6. </script>
  7. <script>
  8. function ajaxvotedislike(){
  9. xmlhttp.open("GET","ajaxdislike.php",true);
  10. xmlhttp.send();
  11. }
  12. </script>

Teraz stworzyłem pliki nazwane ajaxlike i ajaxdislike na serwerze, w których chciałbym umieścić skrypt php zapisujący polubienie do bazy.
O ile moje zrozumienie ajaxa w ogóle jest logiczne i poprawne....
Chciałbym was zapytać, w jaki sposób w jednym z tych plików ajaxlike i ajaxdislike odnieść się do konkretnego zdjęcia?
Na głównej stronie, gdzie istnieje pętla i funkcje stworzyłem zmienną w której zawarte jest ID fotki, czy mogę jakoś przesłać wartość zmiennej do pliku ze skryptem php?
trueblue
  1. echo '<div class="guziktak"><img src="gfx/guzik tak.png" alt="guzik" onclick="ajaxvotelike(tu_id_fotki)"></div>';
  2. echo '<div class="guziknie"><img src="gfx/guzik nie.png" alt="guzik" onclick="ajaxvotedislike(tu_id_fotki)"></div></div><br>';



  1. function ajaxvotelike(id){
  2. xmlhttp.open("GET","ajaxlike.php?id="+id,true);
  3. xmlhttp.send();
  4. }
  5.  
  6. function ajaxvotedislike(id){
  7. xmlhttp.open("GET","ajaxdislike.php?id="+id,true);
  8. xmlhttp.send();
  9. }

Możesz to załatwić jednym skryptem PHP i jedną funkcją JS, gdzie dodatkowym parametrem będzie like(1)/dislike(0).

EDIT: mała poprawka, oczywiście w deklaracji ajaxvotedislike też ma być parametr.
Terrorizer
Hmm dalej to nie działa... Klikam na przycisk i nic się nie dzieje
Przycisk wygląda tak:
  1. echo '<div class="guziktak"><img src="gfx/guzik tak.png" alt="guzik" onclick="ajaxvotelike($photoid)"></div>';

funkcja tak:
  1. function ajaxvotelike($photoid) {
  2. xmlhttp.open("GET", "ajaxvotelike.php?id=" + $photoid, true);
  3. xmlhttp.send();
  4. }

a skrypt ajaxvotelike.php działa poprawnie, ponieważ wklepując ręcznie do przeglądarki np. ajaxvotelike.php?id=10 dodają się lajki

EDIT:
Zmienna photoid istnieje wewnątrz pętli while, która wyświetla mi zdjęcia z bazy danych. Natomiast funkcja jest w skrypcie ajaxowym w headzie strony
Czytając o zasięgu zmiennych wpadłem na pomysł ,że może być to zmienna lokalna, która nie sięga do skryptu java script.
Muszę jeszcze poczytać jak sobie z tym poradzić ale myślę ,że to dobry trop.
Próbowałem dopisać przed zmienną słowo "global" jednak to niczego nie zmienia

EDIT2:
Hmmm... Przecież zmienne w javascript oznacza się jako Var a nie $
Natomiast debugger chromowy pokazuje mi unexpected token var. Ja już nie wiem co zrobić haha.gif
trueblue
http://stackoverflow.com/questions/1051245...a-double-quotes
http://php.net/string

var służy do deklaracji zmiennej i wpływa na jej zasięg.
Nie musisz nazywać zmienne poczynając od "$", dolar tu żadnej magii nie robi.
Terrorizer
Bardzo mi pomogłeś, siedzenie do samego rana ponownie nie przynosiło mi efektów tongue.gif

Wciąż istnieje problem zmiennej, pozwolę sobie jeszcze raz opisać problem gdyby komuś nie chciało się czytać całego tematu:

Mam guzik odpalający funkcję:

  1. function ajaxvotelike(photoid) {
  2. var xmlhttp=new window.XMLHttpRequest();
  3. xmlhttp.open("GET", "ajaxvotelike.php?id=" + photoid, true);
  4. xmlhttp.send();
  5. }

A funkcja uruchamia skrypt w osobnym pliku ajaxvotelike.php który wygląda tak:

  1. <?php session_start(); ?>
  2. <?php include 'connect.php'; ?>
  3.  
  4. <?php
  5. $photoinfo = mysql_query('SELECT * FROM photos WHERE id="'.$photoid.'" ');
  6.  
  7. mysql_query('UPDATE photos SET likes=likes+1 WHERE id="'.$photoid.'" ');
  8. ?>


Jestem niemal przekonany ,że jest to wina zmiennej, ponieważ dodając do skryptu w ajaxvotelike.php taką linijkę jak poniżej, nagle wszystko zaczyna działać?

  1. $photoid = 10;
nospor
Nigdzie w php nie tworzysz zmiennej $photoid to niby czemu ma ci sie sama w magiczny sposob wytrzasnac? Przeciez to ID przekazujesz GETem pod nazwą ID to i weź łaskawie stamtad je wyciągnij a nie oczekujesz ze php zrobi to samo za ciebie
Terrorizer
Ale czy guzik tego typu nie powinien rozwiązywać sytuacji??
Pętla wyrzuca mi kolejne zdjęcia oraz te przyciski przypisując do nich odpowiednie id które są zapisywane właśnie w tej zmiennej.
Przycisk przekazuje to do funkcji, a funkcja "powinna" przekazać do skryptu php. Nie bardzo rozumiem co poszło źle
  1. while ($numphotos = mysql_fetch_assoc($allphotos)){
  2.  
  3. $photoinfo = mysql_query('SELECT * FROM photos WHERE link="'.$numphotos['link'].'" ');
  4. $fetchinfo = mysql_fetch_assoc($photoinfo);
  5.  
  6.  
  7. $photoid = $fetchinfo['id'];
  8. echo '<div class="guziktak"><img src="gfx/guzik tak.png" alt="guzik" onclick="ajaxvotelike('.$photoid.')"></div>';
  9. }
nospor
A niby czemu jakis guzik w html ma rozwiązac problem nie odebrania danych z GETa questionmark.gif Nie, nie rozwiązuje. W php masz odebrac dane z GETa. Same się nie odbiorą.
Terrorizer
Rozumiem, już szukam odpowiedzi na to zagadnienie.
Dzięki!

EDIT: Udało mi się napisać bez googla, łatwiejsze niż sądziłem biggrin.gif
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.