У меня есть форма, в которой выдается сообщение об ошибке, и я не уверен, куда перейти на go отсюда. В форме используется Ajax / PHP, и я задал предыдущий вопрос о подобной форме onsubmit . Вы можете сказать мне, что делает эта форма? . На данный момент я так понимаю:
Формы onsubmit запускаются Ajax .submit, данные формы закодированы
ajax. отправить вызовы ajax .request, который вызывает ajax .post. Здесь я заблудился и надеюсь, что это стандартные методы, которые кто-то более опытный сможет понять и рассказать мне, как эта информация затем передается в действие формы.
в какой-то момент действие формы называется
$ event-> update () запускается и возвращает false (что дает ошибку, на которую я смотрю)
pdologged_preparedQuery запускается с оператором SQL и значениями из формы.
Так что мне не нужно решать эту ошибку прямо здесь, я просто хотел бы иметь возможность продолжаем дальше. Я хочу отладить метод Events.update () и pdologged_preparedQuery (), но я не могу печатать в начале сайта.
Вот форма
<form action="<?php echo $module->path ?>/ajax.php"
method="post"
onsubmit="return Ajax.submit(
this,
function(resp){
AlertSet.addJSON(resp).show();
tabSet.close(<?php echo $tab->number ?>, <?php echo $module- >tabs['view']->number ?>)},
function(resp) {AlertSet.addJSON(resp).show();}
)"
action = "path?> / ajax. php" относится к действию формы, показанному ниже.
Вот методы Ajax .submit и Ajax .request
post: function(type, url, parameters, onready) {
var xhr;
xhr = new this.Xhr(type, onready);
xhr._xhr.open("POST", url, true);
xhr._xhr.setRequestHeader(
"Content-type",
"application/x-www-form-urlencoded"
);
xhr._xhr.send(parameters);
},
request: function(type, request_method, url, parameters, onready) {
switch (request_method.toLowerCase()) {
case "get":
if (parameters != "")
url = url + (url.indexOf("?") == -1 ? "?" : "&") + parameters;
this.get(type, url, onready);
break;
case "post":
this.post(type, url, parameters, onready);
break;
default:
throw "Unknown method";
break;
}
},
submit: function(form, onsuccess, onfailure) {
'use strict';
var i,
use_aim = false,
ajax,
params,
resp;
for (i = 0; i < form.elements.length; i++) {
if (form.elements[i].type == "file") use_aim = true;
}
if (use_aim) {
return Ajax.Aim.submit(form, {
onComplete: function(response) {
resp = JSON.parse(response);
if (!!resp.success) {
if (!!onsuccess) onsuccess(resp);
} else {
if (!!onfailure) onfailure(resp);
}
}
});
} else {
params = "";
for (i = 0; i < form.elements.length; i++) {
if (form.elements[i].name != "") {
if (
form.elements[i].type == "checkbox" ||
form.elements[i].type == "radio"
) {
if (!form.elements[i].checked) continue;
}
if (form.elements[i].type == "select-multiple") {
if (form.elements[i].name.indexOf("[]") == -1)
throw "Put brackets on form element " +
form.elements[i].name +
" so it can submit multiple items";
for (var j = 0; j < form.elements[i].options.length; j++) {
if (form.elements[i].options[j].selected)
params +=
encodeURIComponent(form.elements[i].name) +
"=" +
encodeURIComponent(form.elements[i].options[j].value).replace(
/\+/g,
"%2B"
) +
"&";
}
continue;
}
params +=
encodeURIComponent(form.elements[i].name) +
"=" +
encodeURIComponent(form.elements[i].value).replace(/\+/g, "%2B") +
"&";
}
}
Ajax.request(Ajax.Type.JSON, form.method, form.action, params, {
200: function(resp) {
if (!!resp.success) {
if (!!onsuccess) onsuccess(resp);
} else {
if (!!onfailure) onfailure(resp);
}
},
403: function(resp, headers) {
if (!!headers["Location"]) location.href = "/admin";
},
other: function(resp) {
if (!!onfailure) onfailure(resp);
}
});
}
return false;
},
Вот действие формы - Я получаю ошибку «Ошибка сохранения события». который установлен здесь
$json = array('success' => FALSE);
if ($verb != 'pay')
{
include DOCUMENT_ROOT . '/../private/includes/secure.inc.php';
}
ErrorSet::setAjax(TRUE);
switch ($verb)
{
case 'add':
case 'update':
if (empty($_POST['title']))
{
AlertSet::addValidation('Title cannot be blank.');
}
if (empty($_POST['event_types_id']))
{
AlertSet::addValidation('Event Type cannot be blank.');
}
if (empty($_POST['regions_id']))
{
AlertSet::addValidation('You must select a Region or All Regions.');
}
if (AlertSet::$success)
{
if (XSRF::valid())
{
$days = array();
if ($_POST['recurs'])
{
if ($_POST['frequency'] == 'weekly')
{
if (isset($_POST['weekly_su']))
{
$days[] = 'SU';
}
if (isset($_POST['weekly_m']))
{
$days[] = 'MO';
}
if (isset($_POST['weekly_t']))
{
$days[] = 'TU';
}
if (isset($_POST['weekly_w']))
{
$days[] = 'WE';
}
if (isset($_POST['weekly_th']))
{
$days[] = 'TH';
}
if (isset($_POST['weekly_f']))
{
$days[] = 'FR';
}
if (isset($_POST['weekly_s']))
{
$days[] = 'SA';
}
//echo ' on '.implode(', ', $days).' ';
if (empty($days))
{
$days[] = strtoupper(substr(date('l'), 0, 2));
}
}
}
$event = new Event(array
(
'id' => $_POST['events_id'],
'region' => $_POST['regions_id'],
'title' => $_POST['title'],
'event_type' => array
(
'id' => $_POST['event_types_id']
),
'products_id' => $_POST['products_id'],
'external_registration_link' => $_POST['external_registration_link'],
'location' => $_POST['location'],
'payment_required' => 0,
'member_price' => 0,
'non_member_price' => 0,
'description' => $_POST['description'],
'start_date' => $_POST['start_date'] . ' ' . $_POST['start_hour'] . ':' . $_POST['start_minute'] . ' ' . $_POST['start_ampm'],
'end_date' => $_POST['end_date'] . ' ' . $_POST['end_hour'] . ':' . $_POST['end_minute'] . ' ' . $_POST['end_ampm'],
'recurs' => $_POST['recurs'],
'frequency' => $_POST['frequency'],
'interval' => $_POST['interval'],
'days' => implode(',', $days),
'end_on' => ($_POST['end'] == 'on' ? $_POST['end_on'] : 'NULL'),
'end_after' => ($_POST['end'] == 'after' ? $_POST['end_after'] : 'NULL'),
'monthly' => @$_POST['monthly'],
));
if ($verb == 'add')
{
if ($currentUser->hasPermission('events', $verb))
{
if ($event->add() !== FALSE)
{
$json['success'] = TRUE;
AlertSet::addSuccess('The event was added successfully.');
}
else
{
AlertSet::addError('Error saving event.');
}
}
else
{
AlertSet::addError('You do not have permission to add events.');
}
}
else if ($verb == 'update')
{
if ($currentUser->hasPermission('events', $verb))
{
if ($event->update())
{
$json['success'] = TRUE;
AlertSet::addSuccess('The event was updated successfully.');
}
else
{
AlertSet::addError('Error saving event.');
}
}
else
{
AlertSet::addError('You do not have permission to edit this event.');
}
}
else
{
AlertSet::addError('Verb not recognized.');
}
}
else
{
AlertSet::addError(XSRF::GENERIC_ERROR);
}
}
break;
Вот Events.upate
public function update()
{
$regions_id = '';
if (!empty($this->region)) {
$regions_id = intval($this->region->getId());
}
$event_types_id = '';
if (!empty($this->event_type)) {
$event_types_id = intval($this->event_type->getId());
}
$sql =
'UPDATE events SET
regions_id=:regions_id,
products_id=:products_id,
title=:title,
external_registration_link=:external_registration_link,
event_types_id=:event_types_id,
recurrence=:recurrence,
recurs=:recurs,
frequency=:frequency,
`interval`=:interval,
end_on=:end_on,
end_after=:end_after,
monthly=:monthly,
days=:days,
location=:location,
payment_required=:payment_required,
member_price=:member_price,
non_member_price=:non_member_price,
description=:description,
start_date=:start_date,
end_date=:end_date
WHERE id=:events_id';
$values = array(
':events_id' => $this->id,
':regions_id' => $regions_id,
':products_id' => intval($this->products_id),
':title' => $this->title,
':external_registration_link' => $this->external_registration_link,
':event_types_id' => $event_types_id,
':recurrence' => intval($this->recurrence),
':recurs' => intval($this->recurs),
':frequency' => $this->frequency,
':interval' => $this->interval,
':end_on' => date('Y-m-d', strtotime($this->end_on)),
':end_after' => $this->end_after,
':monthly' => $this->monthly,
':days' => $this->days,
':location' => $this->location,
':payment_required' => intval($this->payment_required),
':member_price' => $this->member_price,
':non_member_price' => $this->non_member_price,
':description' => $this->description,
':start_date' => date('Y-m-d H:i', strtotime($this->start_date)),
':end_date' => date('Y-m-d H:i', strtotime($this->end_date))
);
echo $sql;
if (pdologged_preparedQuery($sql, $values)) {
return true;
}
return false;
}
Вот функция pdologged_preparedQuery ():
if(!function_exists('pdologged_preparedQuery'))
{
function pdologged_preparedQuery($stub, $params)
{
$sql = $stub;
try
{
$rs = Tabmin::$db->prepare($stub);
if ($rs)
{
if ($params)
{
foreach($params as $key=>&$value)
{
if (is_int($value))
$rs->bindParam($key, $value, PDO::PARAM_INT);
else
$rs->bindParam($key, $value, PDO::PARAM_STR);
if (DEBUG)
$sql = str_replace($key,$value,$sql);
}
}
$s = $rs->execute();
if($s)
{
QueryLog::add("pdo:\n\n".$sql);
QueryLog::add("pdo Stub:\n\n".$stub);
return $rs;
}
}
}
catch (PDOException $ex)
{
trigger_error('MySQL Error: '. $ex->getMessage(), E_USER_ERROR);
Console::add('Error SQL: '. $sql);
return false;
}
trigger_error('Programmers do not know what happend, but it is bad.', E_USER_ERROR);
Console::add('Error SQL: '. $sql);
return false;
}
}