Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [AJAX][MySQL][PHP] Przekazywanie zmiennej do pliku
Terrorizer
post
Post #1





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 31.03.2012

Ostrzeżenie: (0%)
-----


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?

Ten post edytował Terrorizer 8.09.2014, 19:17:38
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


  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.

Ten post edytował trueblue 8.09.2014, 19:53:32
Go to the top of the page
+Quote Post
Terrorizer
post
Post #3





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 31.03.2012

Ostrzeżenie: (0%)
-----


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ć (IMG:style_emoticons/default/haha.gif)

Ten post edytował Terrorizer 9.09.2014, 03:14:39
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Terrorizer
post
Post #5





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 31.03.2012

Ostrzeżenie: (0%)
-----


Bardzo mi pomogłeś, siedzenie do samego rana ponownie nie przynosiło mi efektów (IMG:style_emoticons/default/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;


Ten post edytował Terrorizer 9.09.2014, 10:18:50
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
Terrorizer
post
Post #7





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 31.03.2012

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował Terrorizer 9.09.2014, 10:28:58
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A niby czemu jakis guzik w html ma rozwiązac problem nie odebrania danych z GETa (IMG:style_emoticons/default/questionmark.gif) Nie, nie rozwiązuje. W php masz odebrac dane z GETa. Same się nie odbiorą.
Go to the top of the page
+Quote Post
Terrorizer
post
Post #9





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 31.03.2012

Ostrzeżenie: (0%)
-----


Rozumiem, już szukam odpowiedzi na to zagadnienie.
Dzięki!

EDIT: Udało mi się napisać bez googla, łatwiejsze niż sądziłem (IMG:style_emoticons/default/biggrin.gif)

Ten post edytował Terrorizer 9.09.2014, 10:31:32
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.09.2025 - 08:36