I'm working on an ajax long polling function with mysql and it doesn't really seem to work. My computer is overheating and the website crashes after some minutes. Also, the poll.php doesn't even receive the content from data.php, instead, poll.php shows {"type":"connect_error).
I have not done any long polling before.
I have 3 files:
data.php
<?php
session_start();
define ('DB_HOST', 'localhost');
define ('DB_USER', 'root');
define ('DB_PASSWORD', 'root');
define ('DB_NAME', 'story_creator');
function sqlSelect($query) {
// Create connection
$conn = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$result = mysqli_query($conn, $query);
// Check connection
if (mysqli_errno($conn)) {
echo "Failed: " . mysqli_error($conn);
}
$resultArray = array();
if ($result) {
while ($row = mysqli_fetch_array($result)) {
$resultArray[] = $row;
}
}
return $resultArray;
}
$news = sqlSelect("SELECT type FROM users_news_feed WHERE user_id = {$_SESSION['user_id']} AND date > 0;");
echo json_encode($news);
?>
poll.php
<?php
$filename = 'data.php';
$lastmodif = isset($_POST['timestamp'])? $_POST['timestamp']: 0;
$currentmodif = filemtime($filename);
while ($currentmodif <= $lastmodif) {
usleep(10000);
clearstatcache();
$currentmodif = filemtime($filename);
}
$response = array();
$response['type'] = file_get_contents($filename);
$response['timestamp'] = $currentmodif;
echo json_encode($response);
?>
Javascript
<script>
var timestamp = null;
function waitForMsg(){
$.ajax({
type: "POST",
url: "functions/poll.php",
async: true,
cache: false,
timeout: 50000, /* Timeout in ms */
data: { 'timestamp': timestamp },
success: function(data){
// if(data == ''){
// Just console.log the data
console.log(data);
setInterval(
waitForMsg(), /* Try again after.. */
1000); /* milliseconds (15seconds) */
// }
},
complete: function(){
setInterval(waitForMsg(), 7000);
}
});
}
$(document).ready(function() {
waitForMsg();
});
</script>
Related
How can I iterate through the object sent back from the php script below in my jquery/ajax call?
I tried result[0] whiche gave me back c. That means that I'm being returned a string.What code should I write to be returned company1 etc. ?
DROP DATABASE IF EXISTS test;
CREATE DATABASE test;
USE test;
CREATE TABLE company(
name VARCHAR(255),
id INT PRIMARY KEY AUTO_INCREMENT
);
INSERT INTO company(name) VALUES( 'company1');
INSERT INTO company(name) VALUES( 'company2');
INSERT INTO company(name) VALUES( 'company2');
$.ajax({
type: "GET",
url: "manager-get-company.php",
success: function (response) {
//iterate through response here
//console.log(response[0]; -> log Company1
//console.log(response[1]; -> log Company2
}
});
<?php
//manager-get-company.php
$hostname = 'localhost';
$username = 'root';
$password = '';
$database_name = 'test';
$con = mysqli_connect($hostname,$username,$password,$database_name);
//Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
exit();
}
$sql= mysqli_query($con, 'SELECT name FROM company');
while($row = mysqli_fetch_array($sql)){
echo $row['name'];
}
In ajax add dataType : "json",
$.ajax({
type: "GET",
dataType : "json",
url: "manager-get-company.php",
success: function (response) {
//iterate through response here
if(!response.error){
console.log(response[0]);
}
}
});
In php
$result = [];
//Check connection
if (mysqli_connect_errno()) {
$result['error'] = "Failed to connect to MySQL: " . mysqli_connect_error();
}else{
$sql= mysqli_query($con, 'SELECT name FROM company');
while($row = mysqli_fetch_array($sql)){
$result[] = $row['name'];
}
}
echo json_encode($result);
Edited : use $result['error'] not result['error']
I have a problem, clicking in a < tr > of a table I call a javascript function which in turn calls a function in php to get data in a database. The click on the table row works, sql works, and from the console.log command I know there is an answer in reponseText. but it does not work and I get the error back, I'll post the code. I hope you can help me.
file config.php
//database credentials
define('DBHOST','localhost');
define('DBUSER','root');
define('DBPASS','');
define('DBNAME','toor');
try{
//create PDO connection
$db = new PDO("mysql:host=".DBHOST.";charset=utf8mb4;dbname=".DBNAME, DBUSER, DBPASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch(PDOException $e) {
//show error
echo '<p class="bg-danger">'.$e->getMessage().'</p>';
exit;
}
//include the user card, pass in the database connection
include($_SERVER['DOCUMENT_ROOT'].'cards.php');
$card = new card($db);
file cards.php
<?php
class card
{
private $_db;
function __construct($db){
$this->_db = $db;
}
public function view_card_id($id)
{
$rows = array();
$statement = $this->_db->prepare('SELECT * FROM card_details WHERE card_id = :card_id');
$statement->execute(array(':card_id' => $id));
$numrows = $statement->fetch(PDO::FETCH_ASSOC);
if($numrows < 1) {
$this->error = "Error";
return false;
} else {
$statement->bindColumn("card_id", $cid);
$statement->bindColumn("a", $a);
$statement->bindColumn("b", $b);
$rows[] = array('card_id' => $numrows['card_id'], 'a' => $numrows['a'], 'b' => $numrows['b']);
while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
$row = array('card_id' => $cid, 'a' => $a, 'b' => $b);
$rows[] = $row;
}
return $rows;
}
}
file index.php
<?php
//include config
require_once($_SERVER['DOCUMENT_ROOT'].'config.php');
?>
html code ....
<script src="/js/Cards.js" type="text/javascript"></script>
file Cards.js
$('#table-cards tr').click(function() {
var id = $(this).find("a").text();
$.ajax({
type: 'POST',
url: '/classes/cardsFunc.php',
dataType:'text',
data: {functionname: "view_card", id: id },
success: function(response){
//Use response
alert("Server echo: "+response);
console.log(response);
},
error: function(msg){
console.log(msg);
alert("Error: "+msg);
}
});
});
In the Cards.js file, once the $ .ajax function is called, it does not return to success but to error, but in the console.log I see the array of the executed query under the responseText entry.
that is, in the error response, I see the result of the query, which in theory should be in the response of success.
I also tried to use
$.post('/classes/cardsFunc.php', { functionname: 'view_card', id: id }, function(data){
});
but nothing
file cardsFunc.php
<?php
//include config
require_once($_SERVER['DOCUMENT_ROOT'].'config.php');
if(isset($_POST['functionname']) && $_POST['functionname'] == "view_card"){
$card_view = $card->view_card_id($_POST['id']);
print json_encode($card_view);
}
?>
thank you for the time you have dedicated to me
I noticed that if I recreate the connection to the db in the file cardsFunc.php, everything works, but I do not understand why, since everything is in the config.php file.
Like this:
file cardsFunc.php
<?php
//database credentials
define('DBHOST','localhost');
define('DBUSER','root');
define('DBPASS','');
define('DBNAME','toor');
try{
//create PDO connection
$db = new PDO("mysql:host=".DBHOST.";charset=utf8mb4;dbname=".DBNAME, DBUSER, DBPASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch(PDOException $e) {
//show error
echo '<p class="bg-danger">'.$e->getMessage().'</p>';
exit;
}
//include the user card, pass in the database connection
include($_SERVER['DOCUMENT_ROOT'].'cards.php');
$card = new card($db);
if(isset($_POST['functionname']) && $_POST['functionname'] == "view_card"){
$card_view = $card->view_card_id($_POST['id']);
print json_encode($card_view);
}
?>
I have this array of objects:
var desks = [];
function Desk(id, name, x, y) {
var desk = {};
desk.id = id;
desk.name = name;
desk.x = x;
desk.y = y;
desks.push(desk);
}
And I have a MySQL table with desk_id, desk_name, desk_x and desk_y columns.
When I click a button I want to update the values in the table with the Desk objects.
Here's basically what I'm trying achieve:
JS
$("#btn").click(function() {
$.ajax({
method: "POST",
url: "phpfile.php",
data: desks
})
});
PHP
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
require "../db.php";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$desks = $_POST("desks");
for($i = 0; $i < sizeof($desks); $i++) {
$sql = "UPDATE desks SET desk_x=$desks[i]->x WHERE desk_id=$desks[i]->id";
$conn->query($sql);
$sql = "UPDATE desks SET desk_y=$desks[i]->y WHERE desk_id=$desks[i]->id";
$conn->query($sql);
}
$conn->close();
}
?>
I don't know whats wrong with it. Any help is appreciated.
Do like this
JS
$("#btn").click(function() {
$.ajax({
method: "POST",
url: "phpfile.php",
data: {desks:desks}
})
});
PHP
$desks = $_POST("desks");
$sql = "UPDATE desks SET desk_x=$desks->x,desk_y=$desks->y WHERE desk_id=$desks->id";
$conn->query($sql);
You need the stringify the array when you send it.
JS
$("#btn").click(function() {
$.ajax({
method: "POST",
url: "phpfile.php",
data: { "desks" : JSON.stringify(desks) }
})
});
PHP
$desks = json_decode($_POST["desks"]);
foreach($desks as $key => $value) {
$sql = "UPDATE desks SET desk_x=".$value->x.",desk_y=".$value->y." WHERE desk_id=".$value->id;
$conn->query($sql);
}
This is the first time I worked with Ajax in combination with PHP and I'm having a hard time getting it to work.
I have this piece of Ajax code:
$.ajax({
url: '/dev/php/login.php',
type: 'POST',
dataType: 'json',
error: function(date) {
console.log(date);
alert("Het emailadres of wachtwoord is onjuist");
},
data: {email:email,password:password},
success: function(response) {
console.log(response);
alert(response);
}
})
With this PHP code:
<?php
$servername = "blur";
$username = "blur";
$dbpassword = "blur";
$dbname = "blur";
$emailadres = $_POST['email'];
$password = $_POST['password'];
// Create connection
$conn = new mysqli($servername, $username, $dbpassword, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$encodedpass = md5($password);
$sql = "SELECT first_name, last_name FROM account WHERE `email`='$emailadres' AND `password`='$encodedpass'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "Name: " . $row["first_name"]. " " . $row["last_name"] . " WEEEE";
}
}
else {
if (!function_exists('http_response_code'))
{
function http_response_code($newcode = NULL)
{
static $code = 200;
if($newcode !== NULL)
{
header('X-PHP-Response-Code: '.$newcode, true, $newcode);
if(!headers_sent())
$code = $newcode;
}
return $code;
}
}
}
$conn->close();
?>
For some reason the error function in Ajax always gets called, even when the response text echoes me the name from the database. It looks like this:
I wrote the ajax in the JavaScript function. That code is
function getValidate(checkID)
{
alert(checkID);
$.ajax({
type: 'post',
url: 'checkval.php',
datatype: 'json',
data: {checkID : checkID},
success: function (response) {
if (response === "OK"){
alert("Validation Successed.");
}else if(response === "NG"){
alert("Check Already Exists.");
}
},
error : function(err, req) {
alert("Error Occurred");
}
});
}
this code is outputs only "Error Occurred".
the connected php script is
<?php
echo("welcome");
$check = $_POST['checkID'];
$host = 'localhost';
$database = 'database';
$username = 'root';
$password = 'root';
$dbc = mysqli_connect($host,$username,$password,$database);
$checkno = $check;
$sql = "select claimno from check_details where checkno = $checkno";
$result = mysqli_query($dbc,$sql);
$rows = mysqli_num_rows($result);
if($rows != 0)
{
echo "NG";
}
else
{
echo "OK";
}
?>
at a time of calling the JavaScript function php file not executed......
please give me the idea to success it...........
Try this :
if($rows != 0)
{
$return = "NG";
}
else
{
$return = "OK";
}
echo json_encode($return);
Also you set datatype to json so response data must be json type
$.ajax({ dataType:"json"});
In php, store result in one variable and return json_encode
<?php
echo("welcome");
$check = $_POST['checkID'];
$host = 'localhost';
$database = 'database';
$username = 'root';
$password = 'root';
$dbc = mysqli_connect($host,$username,$password,$database);
$checkno = $check;
$sql = "select claimno from check_details where checkno = '$checkno'"; //use single quote
$result = mysqli_query($dbc,$sql);
$rows = mysqli_num_rows($result);
if($rows != 0)
{
$res = "NG";
}
else
{
$res = "OK";
}
echo json_encode($res);
?>
You are getting error occurred, because of below code. Try logging something meaningful to triag this.
error : function(err, req) {
alert("Error Occurred");
}
Please try below code to get a clue of the error
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(err.Message);
}
Reference: Take a look at this query
It seems that the php script is not working well.
Debug it with try and catch and see what output is comming.