PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 13
maxapet Отправлено: 13 Февраля, 2017 - 15:05:13 • Тема: Проблема с путём к файлу • Форум: Вопросы новичков

Ответов: 2
Просмотров: 222
OrmaJever пишет:
Есть прекрасная константа __DIR__, попробуйте использовать её

Спасибо, посмотрю, что это такое, попробую использовать.
maxapet Отправлено: 13 Февраля, 2017 - 13:46:08 • Тема: Проблема с путём к файлу • Форум: Вопросы новичков

Ответов: 2
Просмотров: 222
Пытаюсь сохранить картинку на сервере. Есть такой скрипт php, который хранится в папке scripts и вызывается через AJAX :
PHP:
скопировать код в буфер обмена
  1. <?
  2. class uploadResult {
  3.     var $errCode;
  4.     var $errDescription;
  5.     var $imagePath;
  6. }
  7.  
  8.     $result = new uploadResult();
  9.     $result->imagePath = "";
  10.     $result->errDescription = "";
  11.    
  12. define("UPLOAD_DIR", "/my-images/");
  13.  
  14. if (!empty($_FILES["myImage"])) {
  15.     $myImage = $_FILES["myImage"];
  16.  
  17.     // проверяем на наличие ошибок при загрузке
  18.     if ($myImage["error"] !== UPLOAD_ERR_OK) {
  19.         $result->errCode = UPLOAD_ERR_OK;
  20.         $result->errDescription = "Ошибка при загрузке файла изображения";
  21.         echo json_encode($result);
  22.         exit;
  23.     }
  24.  
  25.     $name = $myImage["name"];
  26.  
  27.     // перемещаем файл в постоянное место хранения
  28.     $success = move_uploaded_file($myImage["tmp_name"], UPLOAD_DIR.$name);
  29.     if (!$success) {
  30.         $result->errCode = 1;
  31.         $result->imagePath = UPLOAD_DIR.$name . $myImage["tmp_name"];
  32.         $result->errDescription = "Ошибка при перемещении загруженного файла в место постоянного хранения";
  33.         echo json_encode($result);
  34.         exit;
  35.     }
  36.  
  37.     // задаем права на новый файл
  38.     chmod(UPLOAD_DIR . $name, 0644);
  39.    
  40.     $result->errCode = 0;
  41.     $result->imagePath = UPLOAD_DIR.$name;// . $myImage["tmp_name"];
  42.     $result->errDescription = "Файл " . $myImage["tmp_name"] . " загружен на сервер";
  43.     echo json_encode($result);
  44.     exit;
  45. } else {
  46.         echo "<p>Произошла ошибка.</p>";
  47.         exit;
  48.    
  49. }
  50. ?>

На Денвере всё работало. Перешёл на OpenServer - перестало работать. Получаю ошибку:

Warning: move_uploaded_file(/my-images/DSC00753.JPG): failed to open stream: No such file or directory in D:\OpenServer\domains\my-gen\scripts\loadImage.php on line 28

Warning: move_uploaded_file(): Unable to move 'D:\OpenServer\userdata\temp\phpEE1F.tmp' to '/my-images/DSC00753.JPG' in D:\OpenServer\domains\my-gen\scripts\loadImage.php on line 28


Попытался заменить разделители на DIRECTORY_SEPARATOR - не помогло.
Решил проверить, существуют ли файлы.
Немного исправил код:
PHP:
скопировать код в буфер обмена
  1. l<?
  2. require_once ("utils.php");
  3.  
  4. class uploadResult {
  5.     var $errCode;
  6.     var $errDescription;
  7.     var $imagePath;
  8. }
  9.  
  10.     $result = new uploadResult();
  11.     $result->imagePath = "";
  12.     $result->errDescription = "";
  13.    
  14. define("UPLOAD_DIR", join(DIRECTORY_SEPARATOR, array(DIRECTORY_SEPARATOR."my-images")));
  15.  
  16. if (!empty($_FILES["myImage"])) {
  17.     $myImage = $_FILES["myImage"];
  18.  
  19.     // проверяем на наличие ошибок при загрузке
  20.     if ($myImage["error"] !== UPLOAD_ERR_OK) {
  21.         $result->errCode = UPLOAD_ERR_OK;
  22.         $result->errDescription = "Ошибка при загрузке файла изображения";
  23.         echo json_encode($result);
  24.         exit;
  25.     }
  26.     $fullPath = file_build_path(UPLOAD_DIR, $myImage["name"]);
  27.     echo ".".UPLOAD_DIR.DIRECTORY_SEPARATOR." - ".(file_exists(".".UPLOAD_DIR.DIRECTORY_SEPARATOR) ? "Файл есть!" : "Файл не найден!");
  28.     exit;

Если в функцию file_exist передаю имя сохраняемого файла, то получаю сообщение, что такой файл есть. Если передаю имя папки куда нужно его поместить, то получаю сообщение, что она не существует.
Пробовал разные варианты: ставил точку слева, два разделителя - не работает, хоть плачь!

Не могу понять, в чём проблема, и как сделать так, чтобы и под Windows работало - так удобнее разрабатывать, и под Linux - на нём хостинг.
(Добавление)
Решил проблему, добавив две точки и разделитель перед именем целевой папки. Т.е строка, задающая целевую папку выглядит так:
PHP:
скопировать код в буфер обмена
  1. define("UPLOAD_DIR", join(DIRECTORY_SEPARATOR, array("..", "ьн-images")));


Осталось только проверить, будет ли это работать в Linux...
maxapet Отправлено: 03 Декабря, 2016 - 04:55:22 • Тема: Ошибка JSON parser'а в Javascript • Форум: JavaScript & VBScript

Ответов: 1
Просмотров: 641
Есть такой класс:
PHP:
скопировать код в буфер обмена
  1.  
  2. class AjaxResult {
  3.     // признак успеха
  4.     var $success;
  5.     // описание ошибки, если она есть
  6.     var $errorDescription;
  7.  
  8.     function __construct(){
  9.         $this->success = true;
  10.         $this->errorDescription = "";
  11.     }
  12.  
  13.     function AjaxResult($_success, $_errorDescription){
  14.         $this->success = $_success;
  15.         $this->errorDescription = $_errorDescription;
  16.     }
  17. }
  18.  

Использую его так:
PHP:
скопировать код в буфер обмена
  1.  
  2. catch(Exception $ex) {
  3.     $mysqli->rollback();
  4.     $erDescr = $ex->getMessage();
  5.     $result = new AjaxResult(false, $erDescr);
  6.     echo json_encode($result);
  7.     exit;
  8. }
  9.  

Выполняю вот такой запрос:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $.ajax({
  3.     type: _method,
  4.     url: url,
  5.     data: _data,
  6.     success: function (data){
  7.         var _data = $.getJSON(data);
  8.         if (_data.success === true)
  9.             alert("Данные успешно сохранены");
  10.         else {
  11.             alert("Ошибка при сохранении данных. Описание ошибки:\n" + _data.errorDescription);
  12.         }
  13.     },
  14.     error: function (jqxhr, status, errorMsg) {
  15.         alert("Ошибка при выполнении AJAX-запроса:\n" + "Статус: " + status + "\nОписание: " + errorMsg);
  16.     },
  17.     dataType: "json"
  18. })
  19.  

в Javascript получаю ошибку AJAX-запроса в errorMsg:

Unexpected token < in JSON at position 0

Понимаю, что первым символом должна быть открывающая прямая скобка, а вместо неё первой идёт угловая. Но в чём дело? Что делаю не так?

N.B. При выводе

Получаю такую строку:

{"success":true,"errorDescription":""}

Т.е. всё, вроде бы, правильно, и вообще нет никаких угловых скобок.
maxapet Отправлено: 25 Сентября, 2016 - 04:09:29 • Тема: Что не так в коде? • Форум: Работа с СУБД

Ответов: 3
Просмотров: 782
Мелкий пишет:
При создании триггера delimeter изменили?

А разве он не меняется автоматом?

P.S. Тот же самый код, но добавленный через раздел "Триггеры" phpMyAdmin, сработал.
maxapet Отправлено: 24 Сентября, 2016 - 08:16:11 • Тема: Что не так в коде? • Форум: Работа с СУБД

Ответов: 3
Просмотров: 782
Хочу создать триггер на удаление записей. Написал такой код:

CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TRIGGER `lead-gen`.`after_delete_CommonSettings`
  2. AFTER DELETE ON `trigger_CommonSettings` FOR EACH ROW
  3. BEGIN
  4. DELETE FROM `emails` WHERE OLD.WidgetId = WidgetId;
  5. DELETE FROM `siteurls` WHERE OLD.WidgetId = WidgetId;
  6. END


Получаю ошибку:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4

Голову сломал, что может быть не так?
maxapet Отправлено: 23 Сентября, 2016 - 13:13:00 • Тема: Как проверить наличие запсис с заданным значением? • Форум: Работа с СУБД

Ответов: 0
Просмотров: 714
Хочу проверить, есть ли запись с заданным значением. Использую mysqli. Для проверки наличия записи использую оператор T-SQL EXISTS.
Написал такой код (фрагмент):
PHP:
скопировать код в буфер обмена
  1.    $query = "SELECT EXISTS (SELECT * FROM EMails WHERE EMail = ?)";
  2.     $email = "myemail@myemail.ru";
  3.     $prepared = $mysqli->prepare($query);
  4.     if (!$prepared)
  5.         echo "Ошибка при создании объекта $prepared";
  6.     $prepared->bind_param("s", $email);
  7.     if($prepared->execute()) {
  8.         echo "affected rows: ".($prepared->affected_rows)."<br />";
  9.         echo "num rows: ".($prepared->num_rows)."<br />";
  10.         echo "sqlstate: ".$prepared->sqlstate."<br />";
  11.     } else {
  12.         echo "Запрос не прошёл";
  13.     };
  14.     $prepared->close();
  15.  

В phpMyAdmin запрос работает - возвращает 1.

А на странице получаю вот что:

affected rows: -1
num rows: 0
sqlstate: 00000

Не то смотрю? Как результат выполнения такого запроса?
maxapet Отправлено: 06 Сентября, 2016 - 17:26:04 • Тема: Почему не работает запрос? • Форум: Вопросы новичков

Ответов: 11
Просмотров: 568
Sail пишет:
maxapet пишет:
Т.е.получается, что $mysqli->num_rows содержит пустое значение

А какое значение содержит $mysqli->affected_rows?
(Добавление)
Ну, или $result->num_rows?

Спасибо, действительно, я не тот параметр проверял. $mysqli->affected_rows показывает, что выборка не пустая.
(Добавление)
Мелкий пишет:
maxapet пишет:
$mysqli = new mysqli("localhost", "user", "userpwd", "mydb");

maxapet пишет:
echo 'Выбрано строк: ' . $mysqli->num_rows;

http://php.net/manual/en/class.mysqli.php
Где вы вообще нашли у объекта класса mysqli свойство num_rows?

Проверьте свой error_reporting. И display_errors заодно. Здесь E_NOTICE, который вы, судя по всему, не видите. А неизвестная переменная или свойство объекта - кидает E_NOTICE и представляется NULL, NULL после приведения к строке - пустая строка ''.

Спасибо, действительно, у меня "смещались в кучу кони, люди...". Я смешал функциональный и объектно-ориентированный подходы. Если использовать $mysqli->affected_rows, то всё работает.
maxapet Отправлено: 05 Сентября, 2016 - 01:57:51 • Тема: Почему не работает запрос? • Форум: Вопросы новичков

Ответов: 11
Просмотров: 568
За пробел спасибо, увидел. Убрал, но не помогло.
Fart пишет:
Покажи строчку запроса mysql после вывода результата введенного в phpmyadmin

Вот запрос, выведенный командой echo:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM emails WHERE CustomerId = '{15EE63AC-F070-4BEA-BB78-4E6687A1ED79}' AND WidgetId = '{00000000-0000-0000-0000-000000000000}'

А вот так выглядит запрос после выполнения в phpMyAdmin
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT *
  2. FROM emails
  3. WHERE CustomerId =  '{15EE63AC-F070-4BEA-BB78-4E6687A1ED79}'
  4. AND WidgetId =  '{00000000-0000-0000-0000-000000000000}'


Записи есть точно, я специально две добавил. И запрос через phpMyAdmin их выбирает.
Но строка
PHP:
скопировать код в буфер обмена
  1. echo 'Выбрано строк: ' . $mysqli->num_rows;
возвращает Выбрано строк: Т.е.получается, что $mysqli->num_rows содержит пустое значение.
(Добавление)
Fart пишет:
Покажи строчку запроса mysql после вывода результата введенного в phpmyadmin
(Добавление)
А пробел существует и он учитывается. в примере:
твоем


А должен


(Добавление)
Несмотря на то, что пробела у это нет



Если пробел не причем и у тебя есть согласно примеру данные, значит по любому вывод нулевой в запросе и записей нет
Попробовал такой запрос: SHOW TABLES - в phpMyAdmin отработал нормально, а со страницы сайта опять ничего не вернул.
maxapet Отправлено: 04 Сентября, 2016 - 17:20:34 • Тема: Почему не работает запрос? • Форум: Вопросы новичков

Ответов: 11
Просмотров: 568
OrmaJever пишет:
Побуду капитаном очевидностью, причина может быть одна - в таблице нет записей удовлетворяющих данное условие.

Я ведь написал: один и тот же запрос. Я вывожу строку запроса через echo, копирую строку запроса, и вставляю её в phpMyAdmin. В phphMyAdmin запрос возвращает строки, со страницы сайта - нет.
maxapet Отправлено: 04 Сентября, 2016 - 13:51:10 • Тема: Почему не работает запрос? • Форум: Вопросы новичков

Ответов: 11
Просмотров: 568
Внешние фигурные скобки нужны, чтобы вставить значение переменной в строку, в внутренние - в таком виде guid генерится. В БД guid хранится с фигурными скобками.
А про пробел я не понял - в каком месте он лишний?
maxapet Отправлено: 04 Сентября, 2016 - 12:14:01 • Тема: Почему не работает запрос? • Форум: Вопросы новичков

Ответов: 11
Просмотров: 568
Я так и сделал. Подставил запрос в phpMyAdmin, и он отработал нормально.
maxapet Отправлено: 04 Сентября, 2016 - 09:40:26 • Тема: Почему не работает запрос? • Форум: Вопросы новичков

Ответов: 11
Просмотров: 568
Подключение к MySQL проходит нормально, а запрос возвращает 0 записей. Этот же запрос через phpMyAdmin выбирает необходимые записи.
PHP:
скопировать код в буфер обмена
  1.  
  2.         $userId = "{15EE63AC-F070-4BEA-BB78-4E6687A1ED79}"
  3.         $widgetId = "{00000000-0000-0000-0000-000000000000}";
  4.  
  5.         $mysqli = new mysqli("localhost", "user", "userpwd", "mydb");
  6.         if($mysqli->connect_errno){
  7.                 echo "Ошибка при подключении к БД. Код ошибки: ".$mysqli->connect_errno." Описание ошибки: ".$mysqli->connect_error;
  8.                 exit;
  9.         }
  10.        
  11.         $query = "SELECT * FROM emails WHERE CustomerId = '{$userId }' AND WidgetId = '{$widgetId}'";
  12.         $result = $mysqli->query($query)
  13.                 or die("Ошибка при загрузке настроек пользователя. Описание ошибки: " . $mysqli->error);
  14.         echo 'Выбрано строк: ' . $mysqli->num_rows;
  15.  

В чём может быть дело?
maxapet Отправлено: 31 Августа, 2016 - 08:26:22 • Тема: Почему не подключается к БД? • Форум: Работа с СУБД

Ответов: 0
Просмотров: 704
Установил Denwer, создал БД, таблицы в ней и пользователя user-name задал пользователю пароль user-pwd, дал пользователю грант на SELECT, INSERT, UPDATE и DELETE.
Пытаюсь подключиться вот таким образом:
PHP:
скопировать код в буфер обмена
  1. <?
  2.     mysql_connect("localhost", "user-name", "user-pwd")
  3.     or die("Ошибка при подключении к БД: " . mysql_error());
  4.     echo "Подключение к БД установлено";
  5. ?>
  6.  
Способ подключения вычитал в книге Маклафлина.
Если указываю пароль, то получаю сообщение об ошибке:
Ошибка при подключении к БД: Access denied for user 'user-name'@'localhost' (using password: YES)

Если же вместо пароля указываю пустую строку, то подключения проходит нормально, и вижу сообщение
Подключение к БД установлено.

В чём может быть дело?

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB