• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Czat - php, jquery, ajax, mysql - nie zapisuje w bazie danych

Object Storage Arubacloud
0 głosów
454 wizyt
pytanie zadane 19 lutego 2017 w JavaScript przez Miki Bywalec (2,480 p.)
zamknięte 20 lutego 2017 przez Miki

Witam.

Próbuję nauczyć się jquery (obecnie znikoma styczność) i ajaxa (brak wiedzy na ten temat). Uznałem, że najlepiej rozpocząć naukę od "przepisania" czegoś sensownego np. czat-u i spróbowania zrozumienia co tam autor dobrego robi. Wszystko szło ładnie i było zrozumiałe aż nie zaczął się ajax (w 4 odcinku). Kod który przepisywałem nie działa (nie zapisuje tekstu do bazy danych) i teraz nie wiem czy się gdzieś pomyliłem czy... no właśnie, bo na filmiku wszystko działa. Nie wiem co jest grane bo nie wyrzuca mi błędów. Mogę prosić o rzut okiem na kod? Znając mojego farta brakuje jakiegoś przecinka lub mam nie tą bibliotekę ;(

 

link do poradnika (chodzi mi o ostatnie minuty gdzie tekst jest wprowadzony do bazy danych): https://www.youtube.com/watch?v=ssOPDgBMoiE

 

cały kod:

index.php

<!DOCTYPE HTML>
<html lang="pl">
	<head>
		<meta charset="utf-8" />
		<title>Chat</title>
		<script type="text/javascript" src="js/jquery.js"></script>
		<link rel="stylesheet" href="Style/Style.css" type="text/css" />
	</head>
	<body>

		<h2>LOGIN FORM</h2>
		<div id="LoginDiv">
			<form method="post" action="pages/UserLogin.php">
				<table>
					<tr>
						<td>Email: </td><td><input type="email" name="UserMailLogin" /></td>
					</tr>
					<tr>
						<td>Password: </td><td><input type="password" name="UserPasswordLogin" /></td>
					</tr>
					<tr>
						<td></td><td><input type="submit" value="LOG IN" /></td>
					</tr>
					<?php 
						if (isset($_GET['error'])) {
					?>					
					<tr>
						<td></td><td><span style="color:red">Error Login</span></td>
					</tr>
					<?php 
						} 
					?>
				</table>
			</form>
		</div>		
		
		<br /><br /><br />
		
		<h2>SING UP FORM</h2>
		<div id="SingUpDiv">
			<form method="post" action="pages/InsertUser.php">
				<table>
					<tr>
						<td>Your Name: </td><td><input type="text" name="UserName" /></td>
					</tr>
					<tr>
						<td>Your Email: </td><td><input type="mail" name="UserMail" /></td>
					</tr>		
					<tr>
						<td>Password: </td><td><input type="password" name="UserPassword" /></td>
					</tr>
					<tr>
						<td></td><td><input type="submit" value="SING UP" /></td>
					</tr>
					<?php 
						if (isset($_GET['success'])) {
					?>					
					<tr>
						<td></td><td><span style="color:green">User Inserted</span></td>
					</tr>
					<?php 
						} 
					?>
				</table>
			</form>
		</div>

	</body>
</html>

Home.php

<?php

	session_start();
	
?>
<!DOCTYPE HTML>
<html lang="pl">
	<head>
		<meta charset="utf-8" />
		<title>Chat</title>
		<link rel="stylesheet" href="../Style/Style.css" type="text/css" />
		<script type="text/javascript" src="../js/jquery.js"></script>
		<script type="text/javascript">
			$(document).ready(function() {

				$("#ChatText").keyup(function(e) {
					
					if (e.keyCode ==13) {						
						var ChatText = $("#ChatText").val();
						$.ajax({
							type:'POST',
							url:'InsertMessage.php',
							data:{ChatText:ChatText},
							success:function() {
								
								$("#ChatText").val("");
								
							}
							
						});							
					}
					
				});
				
			});
		</script>	
	</head>
	<body>
		<h2>Welcome <span style="color:green"><?php echo $_SESSION['UserName']; ?></span></h2>
		<br/><br/>
		
		<div id="ChatBig">
			<div id="ChatMessages">
			
			</div>
			<textarea id="ChatText" name="ChatText"></textarea>
		</div>
	</body>
</html>

conn.php

<?php
	
	try {
		
		$bdd = new PDO("mysql:host=localhost;dbname=chat","root","");
		
	} catch(Exception $e) {
		
		die("ERROR: ".$e->getMessage());
		
	}

?>

classes.php

<?php

	class user {
		
		private $UserName, $UserMail, $UserPassword;
		
		public function getUserId() {
			return $this->UserId;
		}
		
		public function setUserId($UserId) {
			$this->UserId=$UserId;
		}
		
		public function getUserName() {
			return $this->UserName;
		}
		
		public function setUserName($UserName) {
			$this->UserName=$UserName;
		}
		
		public function getUserMail() {
			return $this->UserMail;
		}
		
		public function setUserMail($UserMail) {
			$this->UserMail=$UserMail;
		}
		
		public function getUserPassword() {
			return $this->UserPassword;
		}
		
		public function setUserPassword($UserPassword) {
			$this->UserPassword=$UserPassword;
		}		
		
		public function InsertUser() {
			include "conn.php";
			$req=$bdd->prepare("INSERT INTO users(UserName,UserMail,UserPassword) VALUE(:UserName,:UserMail,:UserPassword)");			
			$req->execute(array(
				'UserName'=>$this->getUserName(),
				'UserMail'=>$this->getUserMail(),
				'UserPassword'=>$this->getUserPassword()
			));
		}
		
		public function UserLogin() {
			include "conn.php";
			$req=$bdd->prepare("SELECT * FROM users WHERE UserMail=:UserMail AND UserPassword=:UserPassword");
			$req->execute(array(
				'UserMail'=>$this->getUserMail(),
				'UserPassword'=>$this->getUserPassword()
			));
			if($req->rowCount()==0) {
				header("Location: ../index.php?error=1");
				return false;
			} else {
				while($data=$req->fetch()) {
					$this->setUserId($data['UserId']);
					$this->setUserName($data['UserName']);
					$this->setUserMail($data['UserMail']);
					$this->setUserPassword($data['UserPassword']);
					header("Location: Home.php");
					return true;
				}
			}
		}

	}	
	
	class chat {
		
		private $ChatId, $ChatUserId, $ChatText;
		
		public function getChatId() {
			return $this->ChatId;
		}
		
		public function setChatId($ChatId) {
			$this->ChatId=$ChatId;
		}		
		
		public function getChatUserId() {
			return $this->ChatUserId;
		}
		
		public function setChatUserId($ChatUserId) {
			$this->ChatUserId=$ChatUserId;
		}		
		
		public function getChatText() {
			return $this->ChatText;
		}
		
		public function setChatText($ChatText) {
			$this->ChatText=$ChatText;
		}
		
		public function InsertChatMessage() {
			include "conn.php";
			
			$req=$bdd->prepare("INSERT INTO chats(ChatUserId,ChatText) VALUE(:ChatUserId,:ChatText)");			
			$req->execute(array(
				'ChatUserId'=>$this->getChatUserId(),
				'ChatText'=>$this->getChatText()
			));
		}
		
	}

?>

InsertUser.php

<?php

	include "classes.php";
	$user = new user();
	
	if (isset($_POST['UserName']) && isset($_POST['UserMail']) && isset($_POST['UserPassword'])) {
		$user->setUserName($_POST['UserName']);
		$user->setUserMail($_POST['UserMail']);
		$user->setUserPassword($_POST['UserPassword']);
		$user->InsertUser();
		
		header("Location: ../index.php?success=1");
	}

?>

UsertLogin.php

<?php

	session_start();
	
		include "classes.php";	
		$user = new user();
		$user->setUserMail($_POST['UserMailLogin']);
		$user->setUserPassword($_POST['UserPasswordLogin']);
		
		if ($user->UserLogin()==true){
			$_SESSION['UserId']=$user->getUserId();
			$_SESSION['UserName']=$user->getUserName();
			$_SESSION['UserMail']=$user->getUserMail();
		}

?>

InsertMessage.php

<?php

	session_start();
	
		include "classes.php";
		if (isset($_POST['ChatText'])) {
			$chat = new chat();
			$chat->setChatUserId($_SESSION['UserId']);
			$chat->setChatText(($_POST['ChatText']);
			$chat->InsertChatMessage();
		}

?>

jquery.js

http://code.jquery.com/jquery-2.1.0.min.js

 

ps. nie podałem tu styli.css i bazy z phpmyadmin bo nie chcę robić jeszcze większego spamu niż jest ;)

ps2. dziękuję wszystkim za poświęcony czas na przeczytanie tego posta i pomoc

komentarz zamknięcia: problem rozwiazany... byl zbedny nawias

2 odpowiedzi

0 głosów
odpowiedź 19 lutego 2017 przez Boshi VIP (100,240 p.)
A co ci zwraca response?W ogóle sprawdzałeś, czy ten request poszedł?
komentarz 19 lutego 2017 przez hoktaur Pasjonat (22,250 p.)
to chyba powinien być komentarz ;)
komentarz 19 lutego 2017 przez Miki Bywalec (2,480 p.)

z tego co widzę to nie odpala mi funkcji InsertChatMessage();

0 głosów
odpowiedź 19 lutego 2017 przez Assasz Nałogowiec (30,460 p.)
Funkcja InsertChatMessage, przy podstawianiu wartości do zapytania powinny być dwukropki przed placeholderami.
komentarz 19 lutego 2017 przez Miki Bywalec (2,480 p.)

Dwukropki chyba są prawidłowo

$req=$bdd->prepare("INSERT INTO chats(ChatUserId,ChatText) VALUE(:ChatUserId,:ChatText)"); 

podobny zapis działa przy tworzeniu nowego użytkownika więc raczej tu nie tkwi problem

komentarz 19 lutego 2017 przez Assasz Nałogowiec (30,460 p.)
Chodziło mi przy execute.
komentarz 19 lutego 2017 przez Miki Bywalec (2,480 p.)

Przy tworzeniu usera tam nic nie dawałem i działa prawidłowo... napisz mi w którym miejscu dać dwukropek bo nie ogarniam na tyle kodowania

 

PS. Zamieniłem funkcje by sprawdzić czy działa i mnie nie przekierowało. Więc chyba funkcji InsertChatMessage() nie odpala

		public function InsertChatMessage() {
			include "conn.php";	
			
			header("Location: test.php");
			/*
			$req=$bdd->prepare("INSERT INTO chats(ChatUserId,ChatText) VALUE(:ChatUserId,:ChatText)");			
			$req->execute(array(
				'ChatUserId'=>$this->getChatUserId(),
				'ChatText'=>$this->getChatText()
			));
			*/
		}

 

komentarz 19 lutego 2017 przez Assasz Nałogowiec (30,460 p.)
Rzeczywiście, dwukropki nie są potrzebne, taka ciekawostka.

Wszedłem w komentarze pod filmem i widzę, że ludzie mają ten sam problem. Czyli to autor popełnił błąd ;) Sam nie wiem w czym problem... spróbuj wykonać w tej funkcji coś innego niż przekierowanie. Pozostałe funkcje tej klasy działają prawidłowo?
komentarz 19 lutego 2017 przez Miki Bywalec (2,480 p.)

Nie wiem za bardzo jak sprawdzić inne funkcje z tej klasy ale to jest praktycznie kopiuj-wklej z klasy user która mi działa prawidłowo

Wychodzi na to, że problem leży w "ajax-ie". Nie podał biblioteki ani gotowego kodu i nie ma jak tego sprawdzić

Błąd chyba leży gdzieś tu Home.php

		<script type="text/javascript">
			$(document).ready(function() {

				$("#ChatText").keyup(function(e) {
					
					if (e.keyCode ==13) {				
						
						alert($("#ChatText").val());
						/*
						var ChatText = $("#ChatText").val();
						$.ajax({
							type:'POST',
							url:'InsertMessage.php',
							data:{ChatText:ChatText},
							success:function() {
								
								$("#ChatText").val("");
								
							}
							
						});	
						*/						
					}					
					
				});
				
			});
		</script>

 

komentarz 19 lutego 2017 przez Assasz Nałogowiec (30,460 p.)
Sam pisałeś, że to tamta funkcja nie działa. Ja w Ajaxie błędów nie widzę, jeśli jest podłączona biblioteka jQuery to powinno chodzić dobrze. Rozumiem, że po naciśnięciu entera textarea się czyści? Jeśli tak, to działa na 100%. Możesz też dodać do Ajaxa funkcję error z konsolą lub alertem, aby sprawdzić, czy dobrze się wykonuje.
komentarz 19 lutego 2017 przez Miki Bywalec (2,480 p.)

wywaliłem ajax-a i zrobiłem to "po staremu"

 

i wywaliło mi błąd w pliku InsertMessage.php w 9 linii...

było $chat->setChatText(($_POST['ChatText']);

a powinno być $chat->setChatText($_POST['ChatText']);

 

otwarty nawias... idę się pociąć :/ 3 godziny tego szukałem ;/

 

PS. Problem rozwiązany, dzięki za pomoc

komentarz 19 lutego 2017 przez Assasz Nałogowiec (30,460 p.)
Uroki programowania :)
komentarz 19 lutego 2017 przez Miki Bywalec (2,480 p.)

Tak jak pisałem na początku w pierwszym poście

...Znając mojego farta brakuje jakiegoś przecinka...

dużo się nie pomyliłem... jeszcze raz dzięki za pomoc... teraz mogę iść spokojnie spać a jutro podziałam dalej ;)

Podobne pytania

0 głosów
1 odpowiedź 212 wizyt
0 głosów
0 odpowiedzi 250 wizyt
+1 głos
2 odpowiedzi 231 wizyt

92,539 zapytań

141,382 odpowiedzi

319,476 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...