forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   PHP / MySQL (http://forum.boolean.name/forumdisplay.php?f=135)
-   -   Использование "промежуточного" php-скрипта (http://forum.boolean.name/showthread.php?t=13889)

cherepets 14.12.2010 22:17

Использование "промежуточного" php-скрипта
 
В php я немного нуб, простите за кривоватую формулировку.

Вообщем, у меня есть php-скрипт который ничего не отображает. Ему приходят переменные (через GET) и он их пишет в базу.

А есть страница со всякими переключателями, полями и прочей лабудой. На ней пользователь фактически формирует те переменные которые должны быть записаны в базу.

Когда пользователь совершает какое-либо действие на странице - переменные надо сразу записать в базу НЕ перезагружая стрницу.
Как это сделать?

Tadeus 14.12.2010 22:22

Ответ: Использование "промежуточного" php-скрипта
 
http://ru.wikipedia.org/wiki/XMLHttpRequest
http://xmlhttprequest.ru/

cherepets 14.12.2010 22:25

Ответ: Использование "промежуточного" php-скрипта
 
О, как раз то что нужно))
А как нибудь получить и использовать на странице данные от этого php-скрипта?

Tadeus 14.12.2010 22:26

Ответ: Использование "промежуточного" php-скрипта
 
Цитата:

Сообщение от cherepets (Сообщение 171972)
О, как раз то что нужно))
А как нибудь получить и использовать на странице данные от этого php-скрипта?

Там всё есть

cherepets 14.12.2010 22:40

Ответ: Использование "промежуточного" php-скрипта
 
Еще б я это всё внезапно понял))
Пролистав, я написал вот так:
PHP код:

$(document).mouseup(function(){
    
$i=1;
    while(
$i<11){
    var 
Stoppos = $('#im'+$i).position();
     if (
window.XMLHttpRequest) {
        
req = new XMLHttpRequest();
        
req.onreadystatechange processReqChange;
        
req.open('GET','http://cherepets.99k.org/index.php?use=write&n='+$i+'&x='Stoppos.left '&y=' Stoppos.top +'&dat=2010.12.12',true);
        
req.send(null);
    } else if (
window.ActiveXObject) {
        
req = new ActiveXObject('Microsoft.XMLHTTP');
        if (
req) {
            
req.onreadystatechange=processReqChange;
            
req.open('GET','http://cherepets.99k.org/index.php?use=write&n='+$i+'&x='Stoppos.left '&y=' Stoppos.top +'&dat=2010.12.12'true);
            
req.send();
        }
    }
      
$i++};
    }); 

По идее на скрипт при отпускании мыши должны быть отправлены координаты 10 объектов с именами im1 - im10. Но почему то этого не происходит :(

Есть идеи в чем я накосячил?


UPD: виснет на req.send(null);

ABTOMAT 15.12.2010 00:49

Ответ: Использование "промежуточного" php-скрипта
 
Заюзай jQuery и метод оттуда load. (хотя бы потому что твой код не будет работать на разных браузерах)

cherepets 15.12.2010 13:01

Ответ: Использование "промежуточного" php-скрипта
 
Всё равно не работает (хотя и не виснет).

PHP код:

$(document).mouseup(function(){
    
$i=1;
    while(
$i<11){
    var 
Stoppos = $('#im'+$i).position();
    $(
'#result').load('http://cherepets.99k.org/index.php?use=write&n='+$i+'&x='+Stoppos.left+'&y='+Stoppos.top+'&dat=2010.12.12');
    
$i+=1;
    };
}); 

Судя по всему запрос никуда не отправляется. Если задать переменные так {n:$i,x:=Stoppos.left,...} - виснет.

UPD: $.ajax({url}). Работает =)


Следующая проблема:
PHP код:

$query="DELETE FROM records WHERE Date='$dat';";
    
mysql_query($query$db);
    
$query="INSERT INTO records (Date) VALUES ('$dat');";
    
mysql_query($query$db); 

При этом старая запись с такой остается, а новая тоже добавляется. В принципе можно изменить структуру самой базы, но гораздо лучше будет, если заработает удаление)

HAMANN 04.01.2011 14:09

Ответ: Использование "промежуточного" php-скрипта
 
Запросы неправильные.

на добавление:
PHP код:

INSERT INTO records SET records.Date STR_TO_DATE('$dat','%Y.%m.%d'

на удаление:
PHP код:

DELETE FROM records WHERE records.Date STR_TO_DATE('$dat','%Y.%m.%d'

причем входящий параметр $dat должен Быть именно в том формате, который ты укажешь во втором параметре функции STR_TO_DATE

P.S и для безопасности обрабатывай входящие параметры. Чтобы не запороть всю базу некорректными запросами

cyberblut 04.01.2011 20:03

Ответ: Использование "промежуточного" php-скрипта
 
Цитата:

Сообщение от HAMANN (Сообщение 174397)
Запросы неправильные.

Врёшь!! Запросы правильные.

Но вот откуда взялась переменная $dat??

Javascript неправильный. Какие, нахер, долары у переменных в JS? Надо так:

PHP код:

function sendData(i) {
      var 
Stoppos = $('#im' i).position(); 
      $(
'#result').load('http://cherepets.99k.org/index.php', {
        use: 
'write',
        
ni,
        
xStoppos.left,
        
yStoppos.top,
        
dat'2010.12.12'
      
}, function(responseTexttextStatusXMLHttpRequest) {
        if( 
11 ) {
          
sendData(1);
        }
      }); 
}

$(
document).mouseup(function(){
  
sendData(1);
}); 

----
Но лучше всего отправлять все данные (все 10 позиций) в одном запросе через массивы.
----

А в обработчике небольшое дополнение:
PHP код:

$dat date('Y-m-d'strtotime($_GET['dat']));

//Мне так больше нравится :)
$query="DELETE FROM records WHERE Date='" $dat "';"
mysql_query($query$db); 

$query="INSERT INTO records (Date) VALUES ('" $dat "');"
mysql_query($query$db); 


cherepets 11.01.2011 13:21

Ответ: Использование "промежуточного" php-скрипта
 
Всем спасибо, тот скрипт закончен и прекрасно работает =)
Он и до этого был правильный, просто у хостера какая-то беда с MySQL вероятно.

Сейчас столкнулся с прямо таки паранормальным явлением у них. У поля NULL запрещен, но запись с пустым значением в этом поле все равно вносится. О_о
Возможно, конечно, это я что-то недопонимаю...

ABTOMAT 12.01.2011 01:31

Ответ: Использование "промежуточного" php-скрипта
 
Цитата:

У поля NULL запрещен, но запись с пустым значением в этом поле все равно вносится. О_о
Возможно, конечно, это я что-то недопонимаю...
Вообще хорошим тоном считается валидация ещё до записи в БД средствами похапе (или на чём там сайт)

cyberblut 12.01.2011 02:09

Ответ: Использование "промежуточного" php-скрипта
 
Цитата:

Сообщение от cherepets (Сообщение 175228)
Сейчас столкнулся с прямо таки паранормальным явлением у них. У поля NULL запрещен, но запись с пустым значением в этом поле все равно вносится. О_о
Возможно, конечно, это я что-то недопонимаю...

Пустое значение != NULL
Если присваеваешь, например, к varchar = '', то сохранится строка нулевой длины, а не NULL. Для int, float и т.д. сохранится 0. Чтобы присвоить NULL, его надо указать явно или просто пропустить в INSERT`e соответствующее поле.

cherepets 12.01.2011 16:29

Ответ: Использование "промежуточного" php-скрипта
 
Присвоение пустого поля происходит именно при пропуске в INSERT.
Что '' тоже значение я знаю))

Еще меня сильно удивляет что их сервер не знаком с базами InnoDB. Мне всегда казалось что это одни из самых распространенных баз...

cyberblut 13.01.2011 02:55

Ответ: Использование "промежуточного" php-скрипта
 
Что значит не знаком с InnoDB? Это один из дефолтных типов таблиц, используемый в MySQL. Либо они, либо ты неправильно их готовишь.

cyberblut 13.01.2011 02:57

Ответ: Использование "промежуточного" php-скрипта
 
Цитата:

Сообщение от cherepets (Сообщение 175363)
Присвоение пустого поля происходит именно при пропуске в INSERT.

Значит при создании таблицы поле было указано с дефолтным значением. Например:
PHP код:

name varchar(30not null default '' 



Часовой пояс GMT +4, время: 00:48.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot