Как войти через сокет

У меня есть сайт, назовем его phone.names.xol.com. Используя веб-сайт, у меня проблема со входом

Там я создал базу данных с именем backe.Пароль 1234. (Можно поделиться паролем). В этой базе данных (backe) у меня есть имя таблицы это пользователи. Мой сокет — «home/tiger/mysql/run/mysql.sock».

Через локалхост - все работает

Я создал на локальном хосте имя базы данных с именем таблицы пользователей. Пользователь root, пароль пустой. Я могу войти на эту страницу без проблем.

Это connection.php. Он находится внутри файла с именем b, поэтому b/connection.php

 <?php
    
    
    $host='phones.names.xol.com';
    $db = 'backe';
    
    
    $user='root';
    $pass='1234';
    
    
    
    if (gethostname()=='phones.names.xol.com') {
        $mysqli = new mysqli($host, $user, $pass, $db,null,'home/tiger/mysql/run/mysql.sock');
    } else {
            $mysqli = new mysqli($host, $user, $pass, $db);
    }
    
    if ($mysqli->connect_errno) {
        echo "Failed to connect to MySQL: (" . 
        $mysqli->connect_errno . ") " . $mysqli->connect_error;
    }


// Check connection
    if (!$mysqli) {
      die("Connection failed: " . mysqli_connect_error());
    }{
    echo "Connected successfully to database";
    }
    
    
    
    
    
    
    function check_login($mysqli)

{

if (isset($_SESSION['user_id']))
{

$id = $_SESSION['user_id'];
$query = "select * from users where user_id = '$id' limit 1";
$result = mysqli_query($mysqli,$query);

if ($result && mysqli_num_rows($result) > 0){
$user_data = mysqli_fetch_assoc($result);
return $user_data;



}


} 
}
function random_num($length){
    $text = " ";
    if ($length < 5 ){
        $length = 5;
    }
    $len = rand(4,$length);
    for ($i=0; $i < $len; $i++){
        $text .= rand(0,9);
        
}
return $text;
}
    
    ?>

В файле login.php я даю основные части кодов, которые у меня есть.

<?php





session_start();
include("b/connection.php");

if ($_SERVER['REQUEST_METHOD'] == "POST")
{
    
    //something was posted
    $user_name = $_POST['user_name'];
    $password = $_POST['password'];
    if (!empty($user_name) && !empty($password) && !is_numeric($user_name))
    {
        
    $user_id = random_num(20);  
        $query = "insert into users ( user_id,user_name,password) values ('$user_id','$user_name','$password')";
    
    mysqli_query($mysqli, $query);
    header("Location: index.html");
    die;
    }
    else{
        echo "Please enter some valid information!";
    }
    
}






?> 

и это форма этого кода как

<form method = "post" >
Username: <input type = "text" name = "user_name"/>
<br/>
Password: <input type = "password" name = "password" />
<br/>
<input type = "submit" value = "Login"/><br><br>


</form>

Как я могу заставить его работать по ссылке (скажем, https:\www.phones.names.xol.com), как это работает на локальном хосте? Я пытался это сделать в течение нескольких часов, но мне не удалось. База данных хороши, проблема, я думаю, в b/connection.php.

ВНИМАНИЕ: при использовании mysqli вы должны использовать параметризованные запросы и bind_param для добавления любых данных в ваш запрос. НЕ ИСПОЛЬЗУЙТЕ для этого интерполяцию или конкатенацию строк, потому что вы создали серьезную ошибку SQL-инъекций. НИКОГДА не помещайте $_POST, $_GET или какие-либо данные непосредственно в запрос, это может быть очень вредно, если кто-то попытается воспользоваться вашей ошибкой.

tadman 15.12.2020 00:43

Какие именно ошибки вы получаете, когда пробуете это в размещенной среде?

ADyson 15.12.2020 00:43

ПРЕДУПРЕЖДЕНИЕ: Написание уровня управления доступом — непростая задача, и есть много возможностей сделать это серьезно неправильно. Любая современная среда разработки , такая как Laravel , имеет встроенную систему аутентификации . Как минимум следуйте рекомендациям по обеспечению безопасности и никогда не храните пароли в виде простого текста или слабого хэша, такого как SHA1 или MD5.

tadman 15.12.2020 00:43
$host обычно просто 'localhost'. Конечно, вы должны использовать подготовленные операторы.
StackSlave 15.12.2020 00:44

Создание случайных чисел для вашего user_id кажется плохим планом. Почему бы не использовать столбец AUTO_INCREMENT?

tadman 15.12.2020 00:45

@tadman да, действительно. но в любом случае проблема не в этом

user14579891 15.12.2020 01:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
184
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы подключаетесь к локальному сокету:

$mysqli = new mysqli('localhost', $user, $pass, $db, null, '/home/tiger/mysql/run/mysql.sock');

Я предполагаю, что это предназначено для передачи /host, а не относительного пути, такого как host.

привет, я должен заменить ваш ответ этим $mysqli = new mysqli($host, $user, $pass, $db,null,'home/tiger/mysql/run/mysql.sock');?

user14579891 15.12.2020 01:48
$host является частью проблемы здесь. Так и должно быть 'localhost'. Домен сайта совершенно не имеет значения, если вы используете локальный сокет.
tadman 15.12.2020 02:07

Вы также должны проверить этот путь. Я почти уверен, что это должно быть /home/..., если только по какой-то странной причине у вас нет буквального home пути относительно вашего веб-корня.

tadman 15.12.2020 02:07

Он показывает мне строку ошибки 22: это строка с сокетом $mysqli = new mysqli('localhost', $user, $pass, $db,null,

user14579891 15.12.2020 02:10

Какая ошибка, конкретно? Пожалуйста, включите полный текст.

tadman 15.12.2020 02:10

строка 34: $mysqli = new mysqli('localhost', $user, $pass,$db); if ($mysqli->connect_errno) { echo "Не удалось подключиться к MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; }

user14579891 15.12.2020 02:11

ошибка: (HY000/2002): нет такого файла или каталога и всего пути к нему

user14579891 15.12.2020 02:11

Если вам нужно подключиться через сокет, вы должны указать путь к сокету. В этой строке нет.

tadman 15.12.2020 02:11

Еще раз подтвердите путь. Я почти уверен, что это /home/... нет home/...

tadman 15.12.2020 02:12

да, это /home, а не home... в строке 22 у меня есть это сообщение об ошибке: mysqli::__construct(): (HY000/1045): доступ запрещен для пользователя 'root'@'localhost' (используя пароль: НЕТ)

user14579891 15.12.2020 02:12

$ пользователь = 'корень'; $ пройти = ''; $host='локальный'; $db = 'назад'; это то, как я определяю их

user14579891 15.12.2020 02:14

➟ ➡︎ Подтвердите путь к сокету.

tadman 15.12.2020 02:17

'/home/tiger/mysql/run/mysql.sock' это так..

user14579891 15.12.2020 02:19

Хорошо, теперь обязательно используйте это в своем вызове new. Этот код, который вы показываете, использовал его неправильно.

tadman 15.12.2020 02:25

Я использовал этот /home/tiger/mysql/run/mysql.sock и получал эти ошибки

user14579891 15.12.2020 02:26

Если он говорит, что путь не найден, это может быть неправильно, вам нужно подтвердить это и, возможно, скорректировать его на основе информации, которую только вы можете найти. Я не могу больше помочь. Обычно это включает в себя вход в систему на рассматриваемой машине и использование таких инструментов, как ls или find, чтобы определить, где находится этот сокет.

tadman 15.12.2020 02:27

Предупреждение: mysqli::__construct(): (HY000/1045): доступ запрещен для пользователя 'root'@'localhost' (используя пароль: НЕТ) вы имеете в виду, что это означает, что мой сокет неверен?

user14579891 15.12.2020 02:29

ребята, это сработало, я удаляю строки, у меня была проблема, ваш ответ работает нормально. Большое спасибо за вашу помощь.

user14579891 15.12.2020 02:40

Другие вопросы по теме