Konstantin18ko
@Konstantin18ko
Стоматолог

Почему один и тот же код на разных серверах работает по разному?

Есть AJAX запрос:
$.ajax({
                    async: false,
                    url: "../php/blank_SOPe_show.php",
                    type: 'POST',
                    data: {
                        card_in_for_blank: card_in_for_blank,
                        enter_day_for_blank: enter_day_for_blank
                    },
                    success: function (data, textStatus, jqXHR) {
                        blank = 'SOPe';
                        tinyMCE.activeEditor.setContent('');
                        tinyMCE.execCommand('mceInsertContent', true, data);
                        $.toast({
                            text: "Запись 'ПЕРВИЧКА' в редакторе!",
                            heading: "ПРЕДУПРЕЖДЕНИЕ",
                            icon: "warning"
                        });
                    }
                });

Есть PHP запрос blank_SOPe_show.php.
<?php

include './connect.php';

$card_in_for_blank = htmlspecialchars($_POST['card_in_for_blank']);
$enter_day_for_blank = htmlspecialchars($_POST['enter_day_for_blank']);

$link = mysqli_connect($HOST, $USER, $PASS) or die(mysqli_errno($link));
mysqli_select_db($link, $SELECT_DB);
mysqli_set_charset($link, "UTF8");

if ($link) {

    $stmt = mysqli_prepare($link, "SELECT s.text_blank FROM stories AS s, cards AS c WHERE s.card=c.id_card AND card_in='302' AND s.type_blank='SOPe' AND s.day_blank='06.03.2017'");

    if ($stmt) {
        
        mysqli_stmt_bind_param($stmt, "ss", $card_in_for_blank, $enter_day_for_blank);

        /* запускаем запрос */
        mysqli_stmt_execute($stmt);

        /* связываем переменные с результатами запроса */
        mysqli_stmt_bind_result($stmt, $text_blank);

        mysqli_stmt_fetch($stmt);
        
        mysqli_stmt_close($stmt);

        if ($text_blank) {
            echo htmlspecialchars_decode($text_blank);
        }
    }
}


Таблица в БД была создана таким запросом:
CREATE TABLE `stories` (
  `id_history` int(11) NOT NULL AUTO_INCREMENT,
  `card` int(11) NOT NULL,
  `type_blank` varchar(100) NOT NULL,
  `day_blank` varchar(100) NOT NULL,
  `text_blank` longtext NOT NULL,
  PRIMARY KEY (`id_history`),
  KEY `stories_cards_fk` (`card`),
  CONSTRAINT `stories_cards_fk` FOREIGN KEY (`card`) REFERENCES `cards` (`id_card`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

Что удивительно, скрипт blank_SOPe_add.php работает (он такой же, но только с командой INSERT INTO).
<?php

include './connect.php';

$card_in_for_blank = htmlspecialchars($_POST['card_in_for_blank']);
$card_out_for_blank = htmlspecialchars($_POST['card_out_for_blank']);
$number_ward_for_blank = htmlspecialchars($_POST['number_ward_for_blank']);
$patient_for_blank = htmlspecialchars($_POST['patient_for_blank']);
$birthday_for_blank = htmlspecialchars($_POST['birthday_for_blank']);
$enter_day_for_blank = htmlspecialchars($_POST['enter_day_for_blank']);
$doctor_for_blank = htmlspecialchars($_POST['doctor_for_blank']);
$diagnosis_for_blank = htmlspecialchars($_POST['diagnosis_for_blank']);
$mkb_for_blank = htmlspecialchars($_POST['mkb_for_blank']);
$text_blank = htmlspecialchars($_POST['text_blank']);

$link = mysqli_connect($HOST, $USER, $PASS) or die(mysqli_errno($link));
mysqli_select_db($link, $SELECT_DB);
mysqli_set_charset($link, "UTF8");

if ($link) {

    $stmt = mysqli_prepare($link, "SELECT s.id_history FROM stories AS s, cards AS c WHERE s.card=c.id_card AND card_in=? AND s.type_blank=? AND s.day_blank=?");

    if ($stmt) {

        $type_blank = "SOPe";
        mysqli_stmt_bind_param($stmt, "sss", $card_in_for_blank, $type_blank, $enter_day_for_blank);

        /* запускаем запрос */
        mysqli_stmt_execute($stmt);

        /* связываем переменные с результатами запроса */
        mysqli_stmt_bind_result($stmt, $id_history);

        mysqli_stmt_fetch($stmt);

        mysqli_stmt_close($stmt);

        if ($id_history) {
            $healthy = array("История болезни №" . $card_in_for_blank, "а\к " . $card_out_for_blank, "Палата №" . $number_ward_for_blank, $patient_for_blank, $birthday_for_blank, $enter_day_for_blank . "г. ", $doctor_for_blank, $diagnosis_for_blank, "МКБ-Х: " . $mkb_for_blank);
            $yummy = array("История болезни №['card_in']", "а\к ['card_out']", "Палата №['number_ward']", "['patient']", "['birthday']", "['enter_day']г. ", "['doctor']", "['diagnosis']", "МКБ-Х: ['mkb']");

            $file = str_replace($healthy, $yummy, $text_blank);

            $stmt = mysqli_prepare($link, "UPDATE stories SET text_blank=? WHERE id_history=? AND type_blank=?");
            
            $type_blank = "SOPe";
            mysqli_stmt_bind_param($stmt, "sss", $text_blank, $id_history, $type_blank);
            mysqli_stmt_execute($stmt);
            mysqli_stmt_close($stmt);
            
            echo htmlspecialchars_decode($text_blank);
        } else {
            $healthy = array("История болезни №" . $card_in_for_blank, "а\к " . $card_out_for_blank, "Палата №" . $number_ward_for_blank, $patient_for_blank, $birthday_for_blank, $enter_day_for_blank . "г. ", $doctor_for_blank, $diagnosis_for_blank, "МКБ-Х: " . $mkb_for_blank);
            $yummy = array("История болезни №['card_in']", "а\к ['card_out']", "Палата №['number_ward']", "['patient']", "['birthday']", "['enter_day']г. ", "['doctor']", "['diagnosis']", "МКБ-Х: ['mkb']");

            $file = str_replace($healthy, $yummy, $text_blank);

            $stmt = mysqli_prepare($link, "INSERT INTO stories (id_history, card, type_blank, day_blank, text_blank) VALUES (null, (SELECT id_card FROM cards WHERE card_in=?), ?, ?, ?)");
            
            $type_blank = "SOPe";
            mysqli_stmt_bind_param($stmt, "ssss", $card_in_for_blank, $type_blank, $enter_day_for_blank, $text_blank);
            mysqli_stmt_execute($stmt);
            mysqli_stmt_close($stmt);
            
            echo htmlspecialchars_decode($text_blank);
        }
    }
}

Сам сайт изначально стоял на EasyPHP Win10 1607 15055.0, сейчас перекинул на RPi 3 Raspbian Jessie with PIXEL kernel 4.4.
  • Вопрос задан
  • 386 просмотров
Решения вопроса 1
Konstantin18ko
@Konstantin18ko Автор вопроса
Стоматолог
Изменил поле с LONGTEXT на MEDIUMTEXT.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@mletov
Что означает "работает по-разному"? Какое поведение ожидается? Какое реальное поведение на обоих серверах? Что показывает js консоль (не удивлюсь, если там error 404)? Без телепатии ничего не понятно

Возможно, при переносе у вас сбились пути, но гадать - дело неблагодарное. Больше деталей нужно.
Ответ написан
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
исходя из "работает на Win и не работает на Linux" вангую, что съехали пути. Или права на файлы. Но без текста ошибки можно только гадать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы