1

Тема: не записується текст українською мовою в базу

Привіт всім. Стикнувся з наступною проблемою. Не можу записати в базу текст українською мовою, поля залишаються пустими. Якщо писати на англійській то все записує. Кодування utf8 що на сторінці що і в базу.
код підключення:

<?php
$host='localhost'; // имя хоста (уточняется у провайдера)
$database='site'; // имя базы данных, которую вы должны создать
$user='root'; // заданное вами имя пользователя, либо определенное провайдером
$pswd=''; // заданный вами пароль
//mysql_query("SET NAMES `CP1251`");
$dbh = mysql_connect($host, $user, $pswd) or die("Не могу соединиться с MySQL.");
mysql_select_db($database) or die("Не могу подключиться к базе.");
mysql_set_charset("utf8"); 

?>

код самого скрипту:

<?php
include("../db.php");
if(isset($_POST['addInformation']))
{
    
    $name = $_POST['name'];
    $description = $_POST['description'];
    $imgSmall = $_POST['imgSmall'];
    $imgBig = $_POST['imgBig'];
    $date = $_POST['date'];
    $category = $_POST['category'];
    $subcategory = $_POST['subcategory'];
    $marks = $_POST['marks'];
    $sql = "INSERT INTO information(name, description, imgSmall, imgBig, date, category, subcategory, watched, marks) VALUES('$name', '$description', '$imgSmall', '$imgBig', '$date', '$category', '$subcategory', '0', '$marks')"; 
    mysql_query($sql) or die(mysql_error());
    
    header('Location: http://localhost/site/admin/admin.php');
}
?>
<html>
<head>
<title>Welcom Admin</title>
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.3.0/lodash.js"></script>
 <style>
 
 
 input.text {
    width:  80%;
    height: 250px;
    padding: 5px 10px 5px 10px;
    border:1px solid #999;
    font-size:16px;
    font-family: Tahoma;
}

</style>

<script>
 // текущая дата
    function changeDate(){
            var date = new Date();
            var year =  date.getFullYear();   
            var month = date.getMonth()+1; 
            var day = date.getDate();
            document.getElementById("inputDate").value = year+'-'+month+'-'+day;
    }
</script>

</head>
<body bgcolor="#000000">
<center>
<table width=100% height=100% border=2px bgcolor=#777777>
        <tr>
        <td width=33%>
        <form action="admin.php"  method="POST">
            Add information:<br>
            name: <input type="text" name="name"> <br>
            description: <input type="text" class="text" name="description"> <br>
            imageSmall: <input type="text" name="imgSmall"> <br>
            imageBig: <input type="text" name="imgBig"> <br>
            category: <input type="text" name="category"> <br>
            subcategory: <input type="text" name ="subcategory" placeholder="default"> <br>
            marks: <input type="text" name ="marks" placeholder="default"> <br>
            date: <input id="inputDate" type="text" name="date" placeholder="default" value="...">  - 
                        <input type="button" value="Get a date" onclick="changeDate()"/><br>
            <input type="submit" name="addInformation" value="Add" onClick="add()">
        </form>
        </td>
        <td width=34%>
        </td>
        <td width=33%>
        </td>
    </tr>
</table>
</center>
</body>
</html>

змінні в яких міститься текст (наприклад description) його отримують з пост запиту, і можна успішно вивести на екран, а ось записати в базу не хоче, змінні стають наче пусті.

2 Востаннє редагувалося 221VOLT (23.08.2016 03:48:51)

Re: не записується текст українською мовою в базу

1) потрібно викинути mysql_* , і узяти mysqli_*

2) який движок таблиць бази?

3) і ще у вас тут можна грохнути всю бд, і зробити з нею все що завгодно, напевно і шелл створити
порада - почитайте про sql-інєкції, захист...

https://blog.clever-games.win/
Це ще не кінець. Це навіть не початок кінця. Але, можливо, це кінець початку.
Зростання мудрості можна точно вимірювати ступенем зменшення злоби.
///// у творчій відпустці. не турбувати /////
Подякували: Faraon, leofun012

3

Re: не записується текст українською мовою в базу

221VOLT написав:

1) потрібно викинути mysql_* , і узяти mysqli_*

2) який движок таблиць бази?

3) і ще у вас тут можна грохнути всю бд, і зробити з нею все що завгодно, напевно і шелл створити
порада - почитайте про sql-інєкції, захист...

дякую. А де саме потрібно замінити mysql_* на mysqli_*, а то я заміняю і вилазять помилки в тих рядках)
Нащот незахищеності бази я знаю, з часом напишу захист, а зараз скрипт і так у мене на компі лежить і ніхто його атакувати не буде)

4

Re: не записується текст українською мовою в базу

Відразу після mysql_select_db(..

mysql_unbuffered_query('SET charset utf8');  
mysql_unbuffered_query('SET names utf8');  
mysql_unbuffered_query('SET character_set_client="utf8"');  
mysql_unbuffered_query('SET character_set_connection="utf8"');  
mysql_unbuffered_query('SET character_set_result="utf8"');
=)

5

Re: не записується текст українською мовою в базу

А сам ПихПих як налаштований, нема там в параметрах якого-небудь cp1252?

Подякували: 221VOLT, leofun012

6 Востаннє редагувалося 221VOLT (23.08.2016 17:54:29)

Re: не записується текст українською мовою в базу

Faraon написав:
221VOLT написав:

1) потрібно викинути mysql_* , і узяти mysqli_*

2) який движок таблиць бази?

3) і ще у вас тут можна грохнути всю бд, і зробити з нею все що завгодно, напевно і шелл створити
порада - почитайте про sql-інєкції, захист...

дякую. А де саме потрібно замінити mysql_* на mysqli_*, а то я заміняю і вилазять помилки в тих рядках)
Нащот незахищеності бази я знаю, з часом напишу захист, а зараз скрипт і так у мене на компі лежить і ніхто його атакувати не буде)

mysql_connect на mysqli_connect
mysql_select_db на mysqli_select_db
і так далі

помилка напевно тому, що
http://www.php.su/mysql_connect --- 3 параметри вхідних,
http://www.w3schools.com/php/func_mysqli_connect.asp --- 4 параметри вхідних
:)

ще можливо у вас mysqli не підключено у php, якщо ви використуєте денвер чи щось подібне

https://blog.clever-games.win/
Це ще не кінець. Це навіть не початок кінця. Але, можливо, це кінець початку.
Зростання мудрості можна точно вимірювати ступенем зменшення злоби.
///// у творчій відпустці. не турбувати /////
Подякували: leofun011

7 Востаннє редагувалося Faraon (25.08.2016 02:03:50)

Re: не записується текст українською мовою в базу

VTrim написав:

Відразу після mysql_select_db(..

mysql_unbuffered_query('SET charset utf8');  
mysql_unbuffered_query('SET names utf8');  
mysql_unbuffered_query('SET character_set_client="utf8"');  
mysql_unbuffered_query('SET character_set_connection="utf8"');  
mysql_unbuffered_query('SET character_set_result="utf8"');

не спрацювало(

Torbins написав:

А сам ПихПих як налаштований, нема там в параметрах якого-небудь cp1252?

ні

8

Re: не записується текст українською мовою в базу

221VOLT написав:
Faraon написав:
221VOLT написав:

1) потрібно викинути mysql_* , і узяти mysqli_*

2) який движок таблиць бази?

3) і ще у вас тут можна грохнути всю бд, і зробити з нею все що завгодно, напевно і шелл створити
порада - почитайте про sql-інєкції, захист...

дякую. А де саме потрібно замінити mysql_* на mysqli_*, а то я заміняю і вилазять помилки в тих рядках)
Нащот незахищеності бази я знаю, з часом напишу захист, а зараз скрипт і так у мене на компі лежить і ніхто його атакувати не буде)

mysql_connect на mysqli_connect
mysql_select_db на mysqli_select_db
і так далі

помилка напевно тому, що
http://www.php.su/mysql_connect --- 3 параметри вхідних,
http://www.w3schools.com/php/func_mysqli_connect.asp --- 4 параметри вхідних
:)

ще можливо у вас mysqli не підключено у php, якщо ви використуєте денвер чи щось подібне

Зробив так:
база:

<?php
/* $host='localhost'; // имя хоста (уточняется у провайдера)
$database='site'; // имя базы данных, которую вы должны создать
$user='root'; // заданное вами имя пользователя, либо определенное провайдером
$pswd=''; // заданный вами пароль
//mysql_query("SET NAMES `CP1251`");
$dbh = mysql_connect($host, $user, $pswd) or die("Не могу соединиться с MySQL.");
mysql_select_db($database) or die("Не могу подключиться к базе.");
mysql_set_charset("utf8"); 
 */
?>

<?php

$mysqli = new mysqli('localhost', 'root', '', 'site');
if ($mysqli->connect_error) {
    die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
?>

файл:

<?php
include("../db.php");
if(isset($_POST['addInformation']))
{
    
    $name = $_POST['name'];
    $description = $_POST['description'];
    $imgSmall = $_POST['imgSmall'];
    $imgBig = $_POST['imgBig'];
    $date = $_POST['date'];
    $category = $_POST['category'];
    $subcategory = $_POST['subcategory'];
    $marks = $_POST['marks'];
    $sql = "INSERT INTO information(name, description, imgSmall, imgBig, date, category, subcategory, watched, marks) VALUES('$name', '$description', '$imgSmall', '$imgBig', '$date', '$category', '$subcategory', '0', '$marks')"; 
    mysqli_query($sql) or die(mysqli_error());
    
    header('Location: http://localhost/site/admin/admin.php');
}
?>
<html>
<head>
<title>Welcom Admin</title>
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.3.0/lodash.js"></script>
 <style>
 
 
 input.text {
    width:  80%;
    height: 250px;
    padding: 5px 10px 5px 10px;
    border:1px solid #999;
    font-size:16px;
    font-family: Tahoma;
}

</style>

<script>
 // текущая дата
    function changeDate(){
            var date = new Date();
            var year =  date.getFullYear();   
            var month = date.getMonth()+1; 
            var day = date.getDate();
            document.getElementById("inputDate").value = year+'-'+month+'-'+day;
    }
</script>

</head>
<body bgcolor="#000000">
<center>
<table width=100% height=100% border=2px bgcolor=#777777>
        <tr>
        <td width=33%>
        <form action="admin.php"  method="POST">
            Add information:<br>
            name: <input type="text" name="name"> <br>
            description: <input type="text" class="text" name="description"> <br>
            imageSmall: <input type="text" name="imgSmall"> <br>
            imageBig: <input type="text" name="imgBig"> <br>
            category: <input type="text" name="category"> <br>
            subcategory: <input type="text" name ="subcategory" placeholder="default"> <br>
            marks: <input type="text" name ="marks" placeholder="default"> <br>
            date: <input id="inputDate" type="text" name="date" placeholder="default" value="...">  - 
                        <input type="button" value="Get a date" onclick="changeDate()"/><br>
            <input type="submit" name="addInformation" value="Add" onClick="add()">
        </form>
        </td>
        <td width=34%>
        </td>
        <td width=33%>
        </td>
    </tr>
</table>
</center>
</body>
</html>

помилка в 15 рядку( якщо там писати просто msql замість msqli то пише що база не підключена

9 Востаннє редагувалося 221VOLT (26.08.2016 01:00:09)

Re: не записується текст українською мовою в базу

Faraon написав:
    mysqli_query($sql) or die(mysqli_error());

помилка в 15 рядку( якщо там писати просто msql замість msqli то пише що база не підключена

справді :)

http://www.w3schools.com/php/func_mysqli_query.asp

ви забули зєднання передати

mysqli_query($mysqli,$sql);
https://blog.clever-games.win/
Це ще не кінець. Це навіть не початок кінця. Але, можливо, це кінець початку.
Зростання мудрості можна точно вимірювати ступенем зменшення злоби.
///// у творчій відпустці. не турбувати /////
Подякували: leofun01, ostap34PHP2

10

Re: не записується текст українською мовою в базу

Запрацювало, кодировка сторінки була утф 8 без бом, я змінив на утф 8.