Как я могу отладить эту форму - PullRequest
0 голосов
/ 05 августа 2020

У меня есть форма, в которой выдается сообщение об ошибке, и я не уверен, куда перейти на 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...