PHP задачи с собеседований
3.06K subscribers
468 photos
6 videos
11 files
359 links
Задачи, тесты и теоретические вопросы по PHP.

Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
Download Telegram
👨🏻‍💻 Необходимо аждую секунду проверять, существует ли уже пользователь с таким логином

Есть страница регистрации. На ней должен работать программа, который каждую секунду берёт из формы данные, и обычным sql проверяет, существует ли уже юзер с такими же.

Как узнавать данные из формы?
Как делать это каждую секунду?
А может быть, лучше сделать js скрипт, который каждую секунду добавляет iframe с check.php?login=nnn?

PHP задачи с собеседований
Проверить если таблица существует mySQL PHP

Вот код PHP

<?
$path = $_SERVER['DOCUMENT_ROOT'];
include_once $path . '/wp-config.php';
include_once $path . '/wp-load.php';
include_once $path . '/wp-includes/wp-db.php';
include_once $path . '/wp-includes/pluggable.php';
global $wpdb;
$serv = $wpdb->dbhost;
$user = $wpdb->dbuser;
$pass = $wpdb->dbpassword;
$name = $wpdb->dbname;
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli($serv, $user, $pass, $name);
$val = mysql_query("SHOW TABLES LIKE `linkName`");
if($val !== FALSE)
{
$sql = "SELECT link FROM linkName";
$result = $mysqli->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "<div id='linkTitle'>".$row["link"]."</div>";
}
}
}
$mysqli->close();
?>
Не работает эта строка


if($val !== FALSE)


Даже контент страницы не загружается после этого кода php. Нужно проверить если таблица linkName существует то выполнить следующий код

"SELECT link FROM linkName"


Где тут ошибка?

PHP задачи с собеседований
👨🏻‍💻 Не могу подключиться к базам данных


Я новичок в php, но очень хочу обучится. Создала обычную форму, но не могу подключиться к базам данных. При нажатии на кнопку, происходит подключение к файлу php, но в браузере ничего не отображается. Не могу найти ошибку.

файлы: index.php:

<!DOCTYPE html>
<html xml:lang="ru" lang="ru">
<head>

<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE-edge">
<meta name="viewport" content="width-device-width? initial- scale-1.0">

<title>CSS</title>

<link rel="stylesheet" href="css/style.css" />
</head>

<body>

<header>
<section>
<form action="/php/register.php" method="post">
<label for="login">Логин</label><br>
<input type="txt" name="login" id="login"><br><br>
<label for="password">Пароль</label><br>
<input type="txt" name="password" id="password"><br><br>
<label for="email">E-mail</label><br>
<input type="txt" name="email" id="email"><br><br>
<button class="button-a">Зарегистрироваться</button>
</form>
</section>
</div>
</header>
</body>
</html>


register.php:

<?php

| require_once('db.php');
$login = $_POST['login'];
$password = $_POST['password'];
$email = $_POST['email'];

?>

db.php:

<?php

$servername = "localhost";
$username = "root";
$password = "";
$bdname = "users";

$conn = mysqli_connect($servername, $username, $password, $bdname);

if (!$conn){
due("Сonnection file". myesquel_connect_error());
} elso {
echo "Успех";
}
?>

может быть что то необходимо подключить, потому что делаю с 0.

PHP задачи с собеседований
Как внутри <?if (!isset($_COOKIE[сюда])){?> вставить php echo

Подскажите, как внутри <?if (!isset($_COOKIE[сюда надо вставить])){?> вставить вот такой код: <?php echo $this->href_to('karma_vote', $profile['id']); ?> Такая конструкция нужна для того, чтобы в $_COOKIE[] на каждой странце был уникальный код, который в другом месте этой страницы выводится с помощью <?php echo $this->href_to('karma_vote', $profile['id']); ?>. Если вставлять как есть - страница не открывается, ошибка 500. Наверное, решение на уровне азов PHP, но я как раз решил постигать их опытным путем и пока не могу сам найти рабочий способ.

PHP задачи с собеседований
Как можно редактировать или удалять сообщения без указания их id на странице?

Есть чат на чистом PHP и Js. У каждого сообщения в атрибутах указан id сообщения из бд. По нему я редактирую или удаляю сообщения. На сервер отправляется id сообщения. На сервере убеждаюсь, что это владелец сообщения, и что-то с ним делаю. Как можно это сделать без указания id сообщения на странице?

PHP задачи с собеседований
Не могу сделать два запроса одновременно в MySQL через php

Вот код

if(isset($_POST['name'])) {
$nameLink = $_POST['name'];
}
$path = $_SERVER['DOCUMENT_ROOT'];
include_once $path . '/wp-config.php';
include_once $path . '/wp-load.php';
include_once $path . '/wp-includes/wp-db.php';
include_once $path . '/wp-includes/pluggable.php';
global $wpdb;
$serv = $wpdb->dbhost;
$user = $wpdb->dbuser;
$pass = $wpdb->dbpassword;
$name = $wpdb->dbname;
$conn = new mysqli($serv, $user, $pass, $name);
$sql = "CREATE TABLE linkName (link VARCHAR(30) NOT NULL)";
$sql .= "INSERT INTO linkName (link) VALUES (".$nameLink.")";
mysqli_close($conn);

Наверное не срабатывает эта строка

$sql .= "INSERT INTO linkName (link) VALUES (".$nameLink.")";

Не могу создать таблицу linkName и вторым действием записать значение $nameLink. Что тут не так?
PHP задачи с собеседований
Не работает библиотека phpWord

Нужно конвертировать файлы на php из формата docx в формат txt. Решил воспользоваться библиотекой phpWord. Написал я следующий код для конвертации:

<?php
require 'vendor/autoload.php';


use PhpOffice\PhpWord\IOFactory;

$inputFile = $_FILES['filename']['tmp_name'];
$outputFile = 'D:\localhost\txt\meow.txt';
function convertDocxToTxt($docxFilePath, $txtFilePath) {
$phpWord = IOFactory::load($docxFilePath);
$txtContent = $phpWord->getFullText();
file_put_contents($txtFilePath, $txtContent);
}

if(move_uploaded_file($_FILES['filename']['tmp_name'], 'uploads/'.$_FILES['filename']['name'])){
echo "Файл скопирован на сервер";
echo "<br>";
echo "<br>";
echo $_FILES['filename']['tmp_name'];
convertDocxToTxt($inputFile, $outputFile);
echo "конвертация завершена";
} else {
echo "Повторите загрузку файла на сервер";
}
?>


Как я подозреваю проблема с самой библиотекой потому что после использования скрипт выдает следующую ошибку:

Fatal error: Uncaught Exception: Cannot find archive file. in D:\localhost\vendor\phpoffice\phpword\src\PhpWord\Shared\XMLReader.php:60 Stack trace: #0 D:\localhost\vendor\phpoffice\phpword\src\PhpWord\Reader\Word2007.php(150): PhpOffice\PhpWord\Shared\XMLReader->getDomFromZip('D:\\localhost\\up...', '_rels/.rels') #1 D:\localhost\vendor\phpoffice\phpword\src\PhpWord\Reader\Word2007.php(114): PhpOffice\PhpWord\Reader\Word2007->getRels('D:\\localhost\\up...', '_rels/.rels') #2 D:\localhost\vendor\phpoffice\phpword\src\PhpWord\Reader\Word2007.php(44): PhpOffice\PhpWord\Reader\Word2007->readRelationships('D:\\localhost\\up...') #3 D:\localhost\vendor\phpoffice\phpword\src\PhpWord\IOFactory.php(89): PhpOffice\PhpWord\Reader\Word2007->load('D:\\localhost\\up...') #4 D:\localhost\file2.php(10): PhpOffice\PhpWord\IOFactory::load('D:\\localhost\\up...') #5 D:\localhost\file2.php(20): convertDocxToTxt('D:\\localhost\\up...', 'D:\\localhost\\tx...') #6 {main} thrown in D:\localhost\vendor\phpoffice\phpword\src\PhpWord\Shared\XMLReader.php on line 60


Не имею честно говоря и малейшего понимания как решить эту проблему, уже долгое время.

PHP задачи с собеседований
Как подключиться из websocket к базе данных?

у меня есть код для работы с websocket, я пытаюсь записать сообщение пользователя в базу данных, но, когда пытаюсь подключиться к базе данных ($this->connectDB = new DB();), выдает ошибку подключения к websocket, сам websocket я запускаю, как параллельные процесс:

<?php

ini_set('display_errors', 1);

exec("php chat-server.php param=value > /dev/null 2>/dev/null &");

require_once 'app/Bootstrap.php';

?>

Код создания объекта подключение к БД:

<?php

namespace App\core;

use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
use App\data\DB;

class Chat implements MessageComponentInterface
{
protected $clients;
public $connectDB;

public function __construct() {

$this->clients = new \SplObjectStorage;
$this->connectDB = new DB();

}

код подключения к БД:

<?php

namespace App\data;

use RedBeanPHP\R;
use RedBeanPHP\RedException;

try{
R::setup('sqlite:' . DATA . 'db.sqlite');
if(!R::testConnection()) {
throw new RedException('No connection');
}
}

catch(RedException $e){
exit(var_dump($e));
}


class DB {

Не знаю, насколько понятен мой вопрос, но что-то тяжело сообразить, как правильно его сформулировать...

PHP задачи с собеседований
Не могу обновить DateTime в MySQL с помощью PHP

При попытке обновить поле с форматом DateTime пишет:

Fatal error: Uncaught Error: Object of class DateTime could not be converted to string in /var/www/MiniCRM/app/models/todo/tasks/ToDoTasksModel.php:137 Stack trace: #0 /var/www/MiniCRM/app/models/todo/tasks/ToDoTasksModel.php(137): PDOStatement->execute() #1 /var/www/MiniCRM/app/controllers/todo/tasks/ToDoTasksController.php(80): app\models\todo\tasks\ToDoTasksModel->edit() #2 [internal function]: app\controllers\todo\tasks\ToDoTasksController->editReg() #3 /var/www/MiniCRM/app/Router.php(59): call_user_func_array() #4 /var/www/MiniCRM/index.php(29): app\Router->run() #5 {main} thrown in /var/www/MiniCRM/app/models/todo/tasks/ToDoTasksModel.php on line 137


А вот какое значение я пытаюсь передать:

2024-01-12T16:41

Вот код:

$finish_date_value = $data['finish_date'];
$reminded_at_option = $data['reminded_at'];
$finish_date = new \DateTime($finish_date_value);

switch ($reminded_at_option) {
case '30_minutes':
$interval = new \DateInterval('PT30M');
break;
case '1_hour':
$interval = new \DateInterval('PT1H');
break;
case '2_hours':
$interval = new \DateInterval('PT2H');
break;
case '12_hours':
$interval = new \DateInterval('PT12H');
break;
case '24_hours':
$interval = new \DateInterval('P1D');
break;
case '7_days':
$interval = new \DateInterval('P7D');
break;
}

$prereminded_at = $finish_date->sub($interval);
$data['reminded_at'] = $prereminded_at->format('Y-m-d\TH:i');

$reminded_at = $data['reminded_at'];

$st = $this->db->prepare("UPDATE `todo_tasks` SET title = ?, description = ?, category = ?, status = ?, priority = ?, finish_date = ?, reminded_at = ? WHERE id = ?");
$st->execute([$title, $description, $category, $status, $priority, $finish_date, $reminded_at, $id]);



PHP задачи с собеседований
Как вывести данные из MySQL при помощи PHP?

Есть таблица news, в ней 5 полей id, text, title, author, date. Необходимо вывести на странице эти данные. У меня никак не получается это сделать: все время какие-либо ошибки. Пробовал использовать функцию mysql_fetch_assoc, но что-то, как ее применять, я не очень понял постоянно - одна и та же ошибка expects parameter 1 to be resource, boolean. Я, конечно, понимаю, что это значит, но вот как исправить - нет...

$news = mysql_query("SELECT * FROM `news` ");
while ($row = mysql_fetch_assoc($news, MYSQL_ASSOC)) {
foreach ($row as $col_value) {
print "\t\t<td>$col_value</td>\n";
}
}


PHP задачи с собеседований
Передача переменных в подключаемый файл

Доброго всем времени суток господа

include('./block.php'); // работает
include('./block.php?alfa=1&beta=2'); // не работает

Собственно не могу передать get переменную в подключаемый файл. Айфреймы в моем случае не катят. В гугле пишут, что 'должно работать'. Но в реальности ошибка

warning: include(./block.php?alfa=1&beta=2)
failed to open stream

короче как бы он пытается найти не файл с переменной, а файл с таким адресом

Подскажите, как прописать GET параметры в подключаемый файл.

PHP задачи с собеседований
Не поворачиваются картинки на мобильном устройстве с использованием php

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

$image = imagecreatefromjpeg($path); 
$rotate = imagerotate($image, $degree, 0);
imagejpeg($rotate, $path);
imagedestroy($image);

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

PHP задачи с собеседований
xdebug не может соединиться с VSCode

Нужно настроить коннект xdebug с VScode. В xdebug конфиги такие (он не в docker):

zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.start_with_request = yes
xdebug.discover_client_host = true
xdebug.client_host = 127.0.0.1
xdebug.client_port = 9000
xdebug.idekey = vsc
xdebug.mode = debug
xdebug.trace_output_name = trace.%s.%u
xdebug.profiler_output_name = cachegrind.out.%R.%u
xdebug.output_dir = /tmp
xdebug.log = /var/log/xdebug.log
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 1
xdebug.output_dir = /var/www/.xdebug
xdebug.cli_color=1

в VSCode в launch.json

{
"version": "0.2.0",
"configurations": [
{
"name": "remote XDebug",
"type": "php",
"request": "launch",
"hostname": "127.0.0.1",
"port": 9000,
"pathMappings": {
"/var/www/crm.itscript.local": "${workspaceRoot}"
}
},
]
}

В логах ошибка - что не удалось соединится с клиентом, не могу понять почему, если они на одном хосте, что клиент что xdebug!

ERR: Could not connect to debugging client. Tried: 127.0.0.1:9000 (fallback through xdebug.client_host/xdebug.client_port).

PHP задачи с собеседований
Php спит перед загрузкой сайта

У меня есть код, вот его кусок:

echo "файл загружен успешно: $filename";
sleep(10);
unlink($filename);

И дело в том, что сайт загружается как раз 10 секунд, и к тому времени файл уже удаляется, как сделать так, чтобы sleep работал вовремя, а не перед загрузкой сайта? Заранее спасибо.

PHP задачи с собеседований