Связывание переменных из файла mysql get не работает? - PullRequest
0 голосов
/ 10 октября 2018

Это скрипт, который я делаю, который проверяет, вошли ли в систему, перенаправляет ли он, если не создал страницу профиля и перенаправляет на TOS.У меня есть рабочий код, используя базовую вставку, которая работает (сверху).Тогда тот, который я не могу получить, используя подготовленные операторы ниже.

<?php
    session_start();
    require ('../../../mysql_connect/mysqli_connect_accounts.php');
    require ('../steamauth/steamauth.php');
    require ('../steamauth/userInfo.php');
    $steamid=$_SESSION['steamid'];

    $query = "SELECT * FROM `".$steamid."`";

    $response = @mysqli_query($dbc, $query);

if($response){
        header("Location: http://theskindealer.com/index.php");
    } else {    
        $create = "CREATE TABLE `".$steamid."` (
        steamid VARCHAR(30), 
        fullname VARCHAR(30),
        tradeurl VARCHAR(30),
        email VARCHAR(50),
        age INT(3),
        tos INT(1),
        access INT(1),
        first INT(1),
        balance DECIMAL(9,2)
        )";
        if ($dbc->query($create) === TRUE) {
            $insert = "INSERT INTO `".$steamid."` (steamid, first, access, tos, balance, age, email, tradeurl, fullname) VALUES ($steamid, 1, 0, 0, 0.00, 0, 0, 0, 0)";

            if ($dbc->query($insert) === TRUE) {
                header("Location: http://theskindealer.com/tos/accept.php");
            } else {
                header("Location: http://theskindealer.com/pages/errorlogin.php");
            }
        } else {
            header("Location: http://theskindealer.com/pages/errorlogin.php");
        }
}
$dbc->close();

mysqli_close($dbc);

?>

Тогда ... Этот код либо перенаправляет на индексирование все время, даже после очистки БД, и не сохраняет данные.Или белые экраны и не сохраняйте данные.

<?php
    session_start();
    require ('../../../mysql_connect/mysqli_connect_accounts.php');
    require ('../steamauth/steamauth.php');
    require ('../steamauth/userInfo.php');
    $steamid=$_SESSION['steamid'];

    $query = "SELECT * FROM `".$steamid."`";

    $response = @mysqli_query($dbc, $query);

if($response){
        header("Location: http://theskindealer.com/index.php");
    } else {    
        $create = "CREATE TABLE `".$steamid."` (
        steamid VARCHAR(30), 
        fullname VARCHAR(30),
        tradeurl VARCHAR(30),
        email VARCHAR(50),
        age INT(3),
        tos INT(1),
        access INT(1),
        freeze INT(1),
        balance DECIMAL(9,2)
        )";
        if ($dbc->query($create) === TRUE) {
            $insert = "INSERT INTO `".$steamid."` (steamid, freeze, access, tos, balance, age, email, tradeurl, fullname) VALUES (:steamid, :freeze, :access, :tos, :balance, :age, :email, :tradeurl, :fullname)";
            $stmt = $dbc->prepare($insert);
            $stmt->bind_param(':steamid', $steam64);
            $stmt->bind_param(':freeze', $freeze);
            $stmt->bind_param(':access', $access);
            $stmt->bind_param(':tos', $tos);
            $stmt->bind_param(':balance', $balance);
            $stmt->bind_param(':age', $age);
            $stmt->bind_param(':email', $email);
            $stmt->bind_param(':tradeurl', $tradeurl);
            $stmt->bind_param(':fullname', $fullname);

            $steam64 = $steamid;
            $freeze = 0;
            $access = 0;
            $tos = 0;
            $balance = 0.00;
            $age = 0;
            $email = "null";
            $tradeurl = "null";
            $fullname = "null";

            $stmt->execute();

            header("Location: http://theskindealer.com/tos/accept.php");

        } else {
            header("Location: http://theskindealer.com/pages/errorlogin.php");
        }
}
$stmt->close();
$dbc->close();
mysqli_close($dbc);

?>

Спасибо заранее за любую помощь!Советы приветствуются, так как я новичок в php и mysql!

1 Ответ

0 голосов
/ 10 октября 2018

При использовании mysqli_stmt :: bind_param первым аргументом является тип данных bind_param('s', $variable) https://php.net/manual/en/mysqli-stmt.bind-param.php

Кроме того, MySQLi не поддерживает именованные параметры в отличие от PDO

Вам потребуетсячтобы изменить код для работы с MySQLi, настройте типы данных по мере необходимости.

//...

$insert = "INSERT INTO `".$steamid."` (steamid, freeze, access, tos, balance, age, email, tradeurl, fullname) 
           VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
$stmt = $dbc->prepare($insert);
$stmt->bind_param('sssssssss', 
    $steam64, 
    $freeze, 
    $access, 
    $tos, 
    $balance, 
    $age, 
    $email, 
    $tradeurl, 
    $fullname
);

//...

Советы / предложения:

Я рекомендую вам использовать оператор строгого сравнения === TRUE, это хорошая практика для принятия.

Закрытие соединений с базой данных

Вам нужно вызывать только один тип mysqli::close, поскольку они выполняют одну и ту же функцию, mysqli_close($dbc); не требуется.

$dbc->close();
///mysqli_close($dbc);

Включить операторы

Вам не нужно переносить include путей в скобках.Это просто дополнительные издержки, которые лексер не должен обрабатывать.include require и их _once варианты являются языком PHP управляющими структурами , а не вызовами функций.

Кроме того, вы всегда должны указывать полный путь, чтобы избежать неоднозначности, избегая поиска include_path, когда файл не найден, и потенциальных уязвимостей в пути.

Кроме того, чтобы избежать ненужной загрузки конфигурационных сценариев несколько раз, таких как подключение к базе данных, на которое полагаются ваши другие сценарии, вы можете использовать require_once.

Пример:

require_once __DIR__ . '/../../../mysql_connect/mysqli_connect_accounts.php';

Сеансы

Вы должны всегда проверять, существует ли уже сессия, прежде чем использовать session_start.

if (!session_id()) {
    session_start();
}

Рекомендуется также восстановить идентификатор сеанса, используя session_regenerate_id(), чтобы избежать перехвата сеанса.Источник: http://php.net/manual/en/features.session.security.management.php#features.session.security.management.session-id-regeneration

Использование одинарных / двойных кавычек

Настоятельно рекомендуется использовать только одинарные кавычки.

Помимо незначительной производительностиПотеря при использовании двойных кавычек, смешивание одинарных и двойных кавычек в вашем коде часто приводит к путанице и трудностям поиска ошибок.Значения в одинарных кавычках обрабатываются как буквенные строки и всегда приводят к вводимому вами значению и не требуют экранирования.При использовании двойных кавычек лексер анализирует строку, чтобы определить, есть ли специальные символы, которые необходимо интерпретировать, например, используя $ или \.

http://php.net/manual/en/language.types.string.php

Исключением является случай, когда вам нужно использовать специальные символы, такие как \r \n \t и т. Д., Для обработки которых лексеру требуются двойные кавычки.

Например:

echo 'Hello you owe $money';
//vs
echo 'Hello you owe ' . $money;
//vs
echo "Hello you owe $money";
//vs
echo "Hello you owe \$money";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...