2015-04-08 3 views
0

Я не могу понять, почему моя функция не видит переменную $ conn. Другие функции, похоже, работают очень хорошо.Почему я не могу передать переменную подключения моей функции?

Вот файл, в котором я называю свою функцию:

require_once('../functions.php'); 
if('POST' == htmlspecialchars($_SERVER['REQUEST_METHOD'])) {  
    $user_id = $_SESSION["user_id"]; 
    $day = $_POST["day"]; 
    $month = $_POST["month"]; 
    $year = $_POST["year"]; 
    $type = ''; 
    $content = $_POST["content"]; 
    add_bullet($user_id, $day, $month, $year, $type, $content, $conn); 
} 

А вот мой functions.php

require_once('../include/db_connect.php');  
// other functions here.. 
function add_bullet($user_id, $day, $month, $year, $type, $content, $conn) {  
    $sql = "INSERT INTO `mbt`.`bullets` (`id`, `user`, `day`, `month`, `year`, `type`, `content`) VALUES ('', '$user_id', '$day', '$month', '$year', '$type', '$content');"; 
    mysqli_query($conn, $sql);  
} 

Мои другие функции, кажется, прекрасно работают, используя тот же метод.

Вот мой db_connect.php

$dbserver = "xxx"; 
$dbuser = "xxx"; 
$dbpassword = "xxx"; 
$dbname = "xxx"; 

$conn = new mysqli($dbserver, $dbuser, $dbpassword, $dbname); 

if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } 
+0

Вы начали сеанс? –

+0

Добавьте отчет об ошибках в начало файла (ов) сразу после открытия PHP-тега , например '

+0

Да, если я повторяю $ user_id, он появляется. – Roman

ответ

0

Вы не можете просто использовать то, что когда-либо переменной вы хотите от других файлов .. Добавить этот глобальный и попробовать потом ..

$content = $_POST["content"]; 
global $conn; 
add_bullet($user_id, $day, $month, $year, $type, $content, $conn); 

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

+0

Это сработало, спасибо. Но из моего понимания «глобальный» не является безопасным способом сделать это. Это правда? – Roman

+0

@Roman правильный. Вы полагаетесь на что-то вне сферы действия этой переменной; ** a) ** называется одинаковым и существует. ** b) ** - тот же тип данных, который вы ожидаете. Альтернативой было бы ввести переменную –

+0

@Roman Как я сказал, лучше использовать метод для соединения. Это просто быстрое решение для вашего вопроса. – Svetoslav

Смежные вопросы