Niedziałający ajax.

0

witam. Na wstępie przyznam, że nie znam JS ani ajaxa, a potrzebuje tylko jedną funkcję. Niestety to co mam nie działa, chociaż przed paroma modyfikacjami działało. Chodzi o zaktualizowanie danych w bazie.

kod AJAX:

				function myCall(str) {
					var request = $.ajax({
						url: "views.php",
						type: "GET",	
						data: {title: str}, 			
						success: function(){

									}						
					});
				}

PHP w pliku views.php:

<?php
	require_once("database.php");	
	
	$title=$_GET("title");
	$query="UPDATE hc_video_videos SET views=views+1 WHERE title=$title";
	PutDataIntoDatabase($query);

?>

Działało ok bez argumentu title, czyli samo wywołanie funkcji i dodanie przykładowej tabeli, więc podejrzewam, że gdzieś w zły sposób przekazuję argument. Możliwe tez, że to jakas inna pierdółka typu średnik, ale nie widzę tu takich braków.

0

Spróbuj tak:

function myCall(str) {
                    var request = $.ajax({
                        url: "views.php",
                        type: "GET",    
                        data: {'title': str},             
                        success: function(){
 
                                    }                        
                    });
                }
0

Wciąż bez rezultatu.

0
$query="UPDATE hc_video_videos SET views=views+1 WHERE title=$title"

boże drogi, nie dość, że to dziura jak sosnowiec, to jeszcze bez cudzysłowiów nie zapiszesz tak nic innego jak int/float. poczytaj o sqlinjection zanim ktoś rozwali Ci bazę

0

Działało ok bez argumentu title, czyli samo wywołanie funkcji i dodanie przykładowej tabeli, więc podejrzewam, że gdzieś w zły sposób przekazuję argument. Możliwe tez, że to jakas inna pierdółka typu średnik, ale nie widzę tu takich braków.

Ja bym powiedział, że brakuje ciapków dookoła title (to o czym piał @dzek69). Nie jestem pewien, ale otrzymujesz coś takiego:

UPDATE hc_video_videos SET views=views+1 WHERE title=Star Wars

A to nie jest poprawne. Jeżeli już chcesz to robić w ten sposób to:

$query="UPDATE hc_video_videos SET views=views+1 WHERE title=' " . $title . " ' ";

Możliwe, że jest inny powód, ale to już wewnątrz tej twojej funkcji, której nie pokazałeś.

Ale wiedz, że jeżeli robisz to w ten sposób, to mogę sobie zrobić tak:

twojastrona.pl/views.php?title=NOW(); DROP database xxx; 

I nie masz bazy. Poczytaj o SQL Injection oraz XSS.
W skrócie, żeby dać Ci ogólne pojęcie to:
SQL Injection - jeżeli tworzysz zapytanie sklejając w ten sposób stringa, to mogę sobie postawić średnik i jechać dalej ze swoim zapytaniem. Później Ty wykonasz swoje zapytanie + moje. Jeżeli chcemy tego uniknąć to dobrze jest użyć PDO i bindowania parametrów. Daje nam to prawie 100% skuteczność (bo niestety to też można obejść w szczególnych przypadkach).
XSS - Jeżeli zapisujesz do bazy cokolwiek, co później wyświetlasz na stronie i nie zamieniasz escape'ujesz html'a to mogę sobie zrobić np. tak:

// Założmy, że jest to jakiś post czy coś tam, co później wyświetlasz i każdy to widzi:
POST: bla bla bla... <script>alert("XSS");</script>

Teraz każdy u kogo się ten post zaczyta w przeglądarce zobaczy alert XSS. Możesz w ten sposób ukraść ciasteczko i podpiąć się np. pod sesję admina i zalogować się na jego konto.

1 użytkowników online, w tym zalogowanych: 0, gości: 1