[php] przechwytywanie zdarzeń

0

Mam taki problem

chcę sobię na zdarzeniu (dokładniej chodzi o on blur) coś tam updatowac w Bazie Danych

wiem, że dostęp do zdarzeń mozna uzyskać z poziomu JavaScript - to jako tako umiem i rozumiem, ale teraz jak to połączyć tak aby na onblur mi updatowało połączenie z bazą Danych

sprawa wygląda tak
1 - wyciagam z bazy danych rekordy i umieszczam je w tabeli
2 - pierwsza kolumna tabeli to textboxy - tam umieszczam treść, którą można modfikować
3 - po deaktywacji (właśnie na onblur) chiałbym aby te dane się aktualizwały w bazie
4 - dostęp mam taki, że id rekordu to nazwa tego tekstboxa więc mogę wywołać to w onblur tak nazwa_funkcji(this.name) i jest id

tylko teraz jak się dostać w tym onblur do bazy danych i updatować ten rekord

0

Używając JavaScript przypisać jakąś funckję do zdarzenia onblur np.

onblur="JakasFunkcja(this.id);"


A potem w JavaScript wykorzystać technologię AJAX żeby wywołać jakiś plik PHP bez przeładowania strony:
<a href="http://advajax.anakin.us/index-pl.htm">http://advajax.anakin.us/index-pl.htm</a>

Zasada działania:
1. Zjeżdżasz myszką z textarea
2. Javascript przejmuje to zdarzenie i wywołuje plik jakiś plik PHP np. 
Zamien.php?id=[ID]&tekst=[TEKST]
Zastępując [ID] i [TEKST] wartościami danego pola.
3. Skrypt robi coś w bazie danych i zwraca np. 0-false lub 1-true
4. JavaScript odbiera odpowiedź i jak jest 0-false to wywala alert'a
0

dzięki za odpowiedż, ale ja za bardzo kumaty nie jestem w temacie

zrobiłem tak:
to plik - taki tylko do testów

<html>
	<head>
	<meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
	<script type="text/javascript" language="javascript">
function asa(id_z,numer)
{
advAJAX.get
(
	{
   	 url : "update.php",
	    parameters : 
   	 {
      	"id" : "id_z",
	      "kolejnosc"" : "numer"
   	 },
	}
);
}
</script>
	</head>
	<body>
		<?php
			$baza_danych = mysql_connect("localhost","root","krasnal") or die("POŁACZENIE Z BAZĄ DANYCH NIE UDAŁO SIĘ");
			mysql_select_db("artykuly");
			$zapytanie="SELECT * FROM Artykul";
			$wynik = mysql_query($zapytanie);
			$ile_znalezionych = mysql_num_rows($wynik);
			echo '<table align="center">';
			for ($i=0; $i <$ile_znalezionych; $i++)
	  		{
			   $wiersz = mysql_fetch_array($wynik);
			   echo "<tr>";
			  	echo "<td><input type=\"text\" size=\"3\" name=\"".$wiersz["id"]."\" value=\"".$wiersz["kolejnosc"]."\" onblur=\"asa(this.name, this.value)\"  /></td>";
			  	echo "</tr>";
			}     
			echo '</table>'; 
		?>
	</body>
</html>

a to osobny do updatowania

<?php mysql_select_db("artykuly"); $id=$_GET["id"]; $kol=$_GET["kolejnosc"]; $zapytanie ="UPDATE Artykul SET kolejnosc=\"$kol\" WHERE id=\"$id\""; mysql_query($zapytanie); ?>

no i nie działa

nie wiem czy to advAJAX tak się umieszcza czy nie - robiem to tak na czuja i trochę mnie wyczucie opuściło

0

JavaScript:

"id" : id_z,
"kolejnosc" : numer

Drugiego id_z i numer nie dajesz w cudzysłowy, bo traktowane są wtedy jako tekst, dajesz bez cudzysłowów, wtedy JavaScript ciągnie dane z tak nazwanych zmiennych.

Plik update.php powinien zwracać jakąś wartość w przypadku sukcesu i porażki a JS powinna odebrać tą wartość i ewentualnie zareagować odpowiednio (alertem lub np. przywróceniem poprzedniej wartości w danym polu textarea)

Plik update.php w ogóle nie łączy się z bazą. Wywołanie AJAX to wywołanie skryptu "od początku", nie ma aktywnego połączenia z bazą danych, także od nowa trzeba je nawiązać i odrzucić (szczególnie że używasz mysql_connect a nie *_pconnect)

Oczywiście plik update.php powinien sprawdzać czy dane zostały przekazane z formularza i poddać kontroli te dane ($_GET) bo inaczej szykuje Ci się atak SQL Injection (ale zakładam że to prosty skrypt i pewnie później to poprawisz)

BTW:
Ja nie bawiłem się jeszcze w technologii AJAX choć wiem do czego służy itp., ale na razie nie jest mi potrzebna, więc z praktycznych wskazówek też nie zawsze będę mógł coś pomóc, chyba że pytanie nie będzie dotyczyć czystej technologii tylko niuansów programowania w PHP/JS/.

0

dzieki za pomoc

co prawda nie udało się

ale cos jeszcze będe mykał

0
prgtw napisał(a)

A potem w JavaScript wykorzystać technologię AJAX żeby wywołać jakiś plik PHP bez przeładowania strony:

sorry za offtopa ale rażą mnie takie "akweny wodne".. co to jest technologia AJAX? jakiś dziwny chwyt marketingowy, bo php, javascript i inne jego składniki istniały już dawno, tylko teraz ktoś ich współprace tak nazwał, przez co wszyscy zachwycają się "nową technologią"...

Zamiast "w JavaScript wykorzystać technologię AJAX" można powiedziec normalnie: wywołaj plik php w JavaScript

tylko tak jest mniej dżezii :/

0

AJAX to taka papka marketingowa. Jak DHTML. Wzięli XMLHttpRequest, dostępny już notabene od IE 4.0, dodali szczyptę W3C DOM, XML i CSS i wyszło im coś "trędi" i "dżezi" ;)

0

OT: W sumie to ja źle to nazwałem technologią ;). To raczej model założeniowy jak wykorzystywać JavaScript, XMLHttpRequest, W3 DOM, CSS itp. w celu jakby aktualizacji strony bez jej przeładowania, choć z możliwością połączenia np. z plikiem na serwerze czy bazą danych poprzez plik php. Zwiększa to przyjazność strony dla użytkownika, szybkość strony, możliwość np. wstępnej walidacji formularza z wykorzystaniem walidacji po stronie serwera (nikt wtedy nie widzi jak realizuje się proces walidacji i nie widzi potencjalnych błędów - przykład).

Inni programiści są dla mnie jak kompilatory - nie "wybaczają" błędów :)

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