Страница 1 из 1

Ввод в базу данных

Добавлено: 09 дек 2013, 14:34
RazerVGolub
Мои действия: открываю phpmyadmin смотрю там хост базы данных.
В моем случае это 127.0.0.1:3306


Пишу функцию подключения к БД:
<?
function db_connect()
{
	$host = 'localhost';
	$user = 'chat';
	$pswd = '1234';
	$db = 'chat';

    

	$connection = mysql_connect($host, $user, $pswd);
	mysql_set_charset( 'utf8' , $connection);
	if(!$connection || !mysql_select_db($db,$connection))
	{
        return false;	
	}
	return $connection;
}

?>
Далее пишу функцию для вывода содержимого
<?
function db_result_to_array($result)
{
	$res_array = array();

	$count = 0;

	while($row = mysql_fetch_array($result))
           {
           	$res_array[$count] = $row;
           	$count++;
           }
    return $res_array;
}


function get_masseng()
{
	db_connect();

    $query = "SELECT * FROM massage ORDER BY id DESC";

    $result = mysql_query($query);

    $result = db_result_to_array($result);

    return $result;
}
?>
Далее в файл самой страницы пишу вывод предварительно с помощью phpmyadmin заношу туда примерные значения
<?
         $masseges = get_masseng();
         foreach ($masseges as $item):?>

      <h1 class="vivodlogin"><?=$item['login']?></h1>
      <div class="vivodsoobsheni"><?=$item['text']?></div>

      <?endforeach;?> 
Все что я внес выводится. Это работает !!!

А вот теперь проблема. Создаю форму для ввода в БД.
<form class="forma" name="email-form" action="http://192.168.1.2/index.php?view=home" method="post">
        <label class="login" for="name">Логин:</label>
        <input class="w-input loginvvod" type="text" placeholder="Введите свой логин" name="login" ></input>
        <label class="masseng" for="email">Сообщение:</label>
        <input class="w-input massengvvod" type="text" placeholder="Введите сообщение" name="text" ></input>
        <input class="w-button otpravka" name="otpravka" type="submit" value="Отправить" ></input>
      </form>

      <?PHP
         if(isset($_POST['otpravka'])) 
        {
            $login = $_POST['login'];
            $text = $_POST['text'];
            $query = mysql_query("INSERT INTO 'massage'('login', 'text') VALUES ('$login', '$text')");
        }
      ?>
так вот после нажатия кнопки выводятся следующие сообщения об ошибках
Warning: mysql_query(): Access denied for user ''@'localhost' (using password: NO) in C:\OpenServer\domains\mysite.local\layouts\home.php on line 45

Warning: mysql_query(): A link to the server could not be established in C:\OpenServer\domains\mysite.local\layouts\home.php on line 45

Указываемая строка
$query = mysql_query("INSERT INTO 'massage'('login', 'text') VALUES ('$login', '$text')");

Как исправить данную проблему?

Добавлено спустя 1 минуту 52 секунды:
А также забыл добавить пользователя я создаю

Логин chat
Хост localhost
Пароль 1234

И отмечаю все привелегии

Добавлено: 09 дек 2013, 14:41
Максим
Вы не подключаетесь к базе, а пытаетесь сразу выполнить запрос. Видимо плохо прочитали учебник.

Добавлено: 09 дек 2013, 14:54
RazerVGolub
Сейчас опишу подробнее. При входе на сайт главный файл:
<?

include('db_fns.php');



$view = empty ($_GET['view']) ? 'index' : $_GET['view'];

include($_SERVER['DOCUMENT_ROOT'].'/layouts/'.$view.'.php');

?>
Файл db_fns.php
<? 

function db_connect()
{
	$host = '127.0.0.1';
	$user = 'chat';
	$pswd = '1234';
	$db = 'chat';

    

	$connection = mysql_connect($host, $user, $pswd);
	mysql_set_charset( 'utf8' , $connection);
	if(!$connection || !mysql_select_db($db,$connection))
	{
        return false;	
	}
	return $connection;
}


function db_result_to_array($result)
{
	$res_array = array();

	$count = 0;

	while($row = mysql_fetch_array($result))
           {
           	$res_array[$count] = $row;
           	$count++;
           }
    return $res_array;
}


function get_masseng()
{
	db_connect();

    $query = "SELECT * FROM massage ORDER BY id DESC";

    $result = mysql_query($query);

    $result = db_result_to_array($result);

    return $result;
}

?>
Ну и потом у нас соответсвенно идут файлы самого сайта, то есть при входе на сайт мы автоматически подключаемся к базе данных. Или я что то не понимаю???

Добавлено спустя 4 минуты 8 секунд:
То есть главный файл это файл которые лежит в папке mysite.local(index.php)
он и грузит все остальное.

Добавлено: 09 дек 2013, 14:56
Максим
Возьмите учебник в руки, посмотрите несколько раз как там происходит подключение к БД. А потом посмотрите на это свое сообщение, которое вы сейчас написали, и найдите там место, где вы подключаетесь к БД. Вы будете искать его долго, потому что его там нет. У вас есть функция подключения, но вы нигде не вызываете эту функцию.

Добавлено: 09 дек 2013, 15:43
RazerVGolub
Исправил
<?PHP

         
         if(isset($_POST['otpravka'])) 
        {
            $dbc = mysql_connect('localhost','chat','1234','chat');
            $login = $_POST['login'];
            $text = $_POST['text'];
            $query = "INSERT INTO 'massage'('login', 'text') VALUES ('$login', '$text')";
            mysql_close($dbc);
        }

      ?>
теперь ошибок нет но в БД ничего не занесено

Добавлено: 09 дек 2013, 15:48
Максим
'massage'('login', 'text') здесь пробел должен быть, плюс вы подключаетесь к базе через домен localhost, убедитесь что этот домен существует в open server.

Добавлено: 09 дек 2013, 15:56
RazerVGolub
<?PHP

         
         if(isset($_POST['otpravka'])) 
        {
            $dbc = mysql_connect('localhost','chat','1234','chat');
            $login = $_POST['login'];
            $text = $_POST['text'];
            $query = "INSERT INTO massage(login, text) VALUES ('$login' , '$text')";
            $result = mysql_query($dbc, $query);

            mysql_close($dbc);
        }

      ?>
Вот последняя функция все сделал как учебнике ошибка
Warning: mysql_query() expects parameter 1 to be string, resource given in C:\OpenServer\domains\mysite.local\layouts\home.php on line 49
Ошибка в строке
$result = mysql_query($dbc, $query);
Добавлено спустя 1 минуту 11 секунд:
пробел тоже не помогает

Добавлено: 09 дек 2013, 16:04
Максим
$result = mysql_query($dbc, $query);

Естественно там ошибка, в функции mysql_query сначала нужно указывать запрос, а потом уже указатель на подключение, а не наоборот.

Добавлено: 09 дек 2013, 16:09
duxabilii
RazerVGolub писал(а):
Ошибка в строке [code]$result = mysql_query($dbc, $query);
При использовании функции mysql_query первым параметром идет запрос, вторым (необязатльным) ссылка на соединение с БД. Учите матчасть
http://php.net/manual/ru/function.mysql-query.php И обратите внимание на выделенное красным...

Добавлено: 09 дек 2013, 16:45
RazerVGolub
Спасибо все получилось

Вот конечный результат
<?PHP

         
         if(isset($_POST['otpravka'])) 
        {
            $dbc = mysqli_connect('localhost','chat','1234','chat');
            $login = $_POST['login'];
            $text = $_POST['text'];
            $query = "INSERT INTO massage (login, text) VALUES ('$login' , '$text')";
            $result = mysqli_query($dbc , $query);

            mysqli_close($dbc);
        }

      ?>