Задать вопрос
Ответы пользователя по тегу PHP
  • Как реализовать редактирование уже существующих записей (программа есть но не работает)?

    @aleksmir
    Системный администратор, программист
    Тут две ошибки, первая - это при определении $note_id, должно быть так:
    $node_id = isset($_POST['id']) ? $_POST['id'] : $_GET['note'];

    Вторая, это нужно подставлять значения $_POST после перерисовки и вычисленную $node_id:
    <form method="POST">
    <p>Заголовок заметки: <input type="text" name="title"  value = "<?php echo isset($_POST['title']) ? $_POST['title'] : $edit_note['title']; ?>"/></p>
    <p>Текст заметки: <textarea name="article"><?php echo isset($_POST['article']) ? $_POST['article'] : $edit_note['article']; ?></textarea></p> 
    <input type="hidden" name = "note" value="<?php echo $node_id; ?>"/>
    <input type="submit" name= "submit" value="Изменить"/>
    </form>

    Тут тоже ошибка, она на сохранение не влияет, но вызывает ошибку выполнения, которая у вас не отображалась скорее всего потому, что вывод ошибок отключен. Можно подправить так:
    if (isset($_POST)) {
    $title = $_POST['title'];
    $article = $_POST['article'];
    $update_query = "UPDATE notes SET title = '$title', article = '$article' WHERE id = $note_id";
    $update_result = mysqli_query ($link, $update_query);
    }
    Ответ написан
    Комментировать
  • Возможно ли уменьшить время запроса?

    @aleksmir
    Системный администратор, программист
    Приведите пожалуйста код создания структуры таблицы pictures, тогда будет более предметный разговор. Сколько записей в таблице pictures?
    Из общих рекомендаций:
    1) `result`='WAITING' - поле должно быть проиндексировано, иначе запись ищется полным перебором всех записей;
    2) условие DATE(`date`) точно правильно написано?
    3) если ищете по дате, то поле `date` тоже должно быть проиндексировано;
    4) лучше вместо отдельных индексов использовать составной индекс INDEX `result_date` (`result`, `date`);
    5) проверьте свои запросы SELECT и UPDATE с помощью команды EXPLAIN, по ней можно будет посмотреть - где происходят тормоза;
    6) у вас в этом коде PHP происходит до 11 обращений к БД; операция UPDATE наиболее медленная, вполне вероятно, что она и выполняется в течение нескольких секунд 10 раз; но если будет индекс, то проблем не должно быть;
    7) если не поможет, то несколько запросов UPDATE можно заменить одним запросом с помощью функций обновления через условие;
    8) кстати для поля `hash` также нужен индекс, раз по нему выполняется поиск;
    9) ещё бы я рекомендовал ключ сделать числовым, т.е. `hash` заменить на поле `id` типа UNSIGNED INT AUTOINCREMENT и сделать его ключом PRIMARY KEY;
    10) поле `result` тоже нужно сделать числовым и записывать в него, например число 0, если 'WAITING' и 1, если 'PROCESS'.

    Уверен, что после выполнения рекомендаций все будет "летать".
    Ответ написан
    Комментировать
  • Почему возникает ошибка при создании столбцов?

    @aleksmir
    Системный администратор, программист
    PHP не виноват. Тут больше вопрос к СУБД. При создании-удалении процедуры происходит какой-то сбой на стороне БД.

    Можете попробовать убрать создание процедуры, оставить только создание столбцов:

    <?php
    
    public function createQuery($array, $table)
    	{
    		$query = 'use database_name; ';
    		foreach($array as $key => $value){
    			$query.= "
    				IF NOT EXISTS (
    				SELECT *
    				FROM information_schema.COLUMNS
    				WHERE COLUMN_NAME = '".$key."'
    				AND TABLE_NAME = '".$table."'
    				AND TABLE_SCHEMA = DATABASE()
    				) THEN
    				ALTER TABLE `".$table."`
    				ADD COLUMN `" .$key."` TEXT NULL DEFAULT null;
    				END IF;";
    			}
    		return $query;
    	}
    
    ?>


    Но результат будет зависеть от возможностей вашей СУБД.
    Ответ написан
    Комментировать
  • Как отобразить определённый шаблон в зависимости от состояния пользователя?

    @aleksmir
    Системный администратор, программист
    Как-то так (это конечно часть кода, отвечает на заданный вопрос):

    <?php
    
    // Файл testpass.php - проверка пароля
    // 	$_POST['login'] - логин из формы HTML
    //	$_POST['pass']	- пароль из формы HTML
    
    // проверка логина и пароля
    	// ...
    	$is_login = true; // присваивается, если проверка прошла успешно
    	
    // вывод страницы index.html
    	// ...
    	// вывод кнопок "Войти", "Зарегистрироваться"
    		if (!$is_login) {
    			echo('<button>Войти</button>');
    			echo('<button>Зарегистрироваться</button>');
    		}
    
    ?>


    Чтобы ответить более точно, надо как минимум понимание - как вы выводите страницу index.html.
    Ответ написан
  • Преобразование строки?

    @aleksmir
    Системный администратор, программист
    Вот так можно:

    <?php
    
    $str = 'https://anvis.iaai.com:443/resizer?imageKeys=29697105~SID~B607~S0~I1~RW2592~H1944~TH0&amp;width=161&amp;height=120';
    $mas = explode('&', $str);
    $mas[1] = 'amp;width=845';
    $mas[2] = 'amp;height=633';
    $str = implode('&', $mas);
    echo($str);
    
    ?>


    А вообще причина была в том, что у вас точка с запятой лишняя в конце:

    '&amp;width=161&amp;height=120;'

    Поэтому str_replace() тоже будет работать:

    <?php
    
    $str = 'https://anvis.iaai.com:443/resizer?imageKeys=29697105~SID~B607~S0~I1~RW2592~H1944~TH0&amp;width=161&amp;height=120';
    $find = '&amp;width=161&amp;height=120';
    $replace = '&width=845&height=633';
    $res = str_replace($find, $replace, $str);
    echo($res);
    
    ?>
    Ответ написан
    Комментировать