Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Запись в базу MySQL


Автор: warningmax 26.1.2011, 12:20
Мой первый скрипт обращения к базе ... не пинайте ...
Можете сказать что я неправильно делаю и как сделать запись с формы в базу данных лучше и безопаснее
Код

header('Content-Type: text/html; charset=utf-8');
require_once 'form1.phtml';
$con = mysql_connect("localhost","root","");
mysql_query("set names utf8");
if (!isset($con))
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("z", $con);
$name = $_POST['name'];
$groups = $_POST['groups'];
$login = $_POST['login'];
$pass = $_POST['pass'];
//Запрос к базе
$sql="INSERT INTO users (name, groups, login, pass)
VALUES
('$_POST[name]','$_POST[groups]','$_POST[login]','$_POST[pass]')";
if (!mysql_query($sql,$con))
  {
  //die('Error: ' . mysql_error());
  }
echo "Данные добавлены в базу";
mysql_close($con)

Автор: triclosan 26.1.2011, 12:23
пустой пароль - плохо


Автор: warningmax 26.1.2011, 12:24
Цитата(triclosan @ 26.1.2011,  12:23)
пустой пароль - плохо

Это все локально и в учебных целях  smile 

Автор: triclosan 26.1.2011, 12:38
ну кавычки можно эскейпить

Автор: solenko 26.1.2011, 12:43
Цитата(warningmax @  26.1.2011,  11:20 Найти цитируемый пост)
Можете сказать что я неправильно делаю 

Не читали раздел мануала http://www.php.net/manual/en/security.database.php
Ну а там описано как 
Цитата(warningmax @  26.1.2011,  11:20 Найти цитируемый пост)
и как сделать запись с формы в базу данных лучше и безопаснее

написано как раз в этом разделе

Автор: warningmax 26.1.2011, 12:51
Цитата(solenko @ 26.1.2011,  12:43)
Цитата(warningmax @  26.1.2011,  11:20 Найти цитируемый пост)
Можете сказать что я неправильно делаю 

Не читали раздел мануала http://www.php.net/manual/en/security.database.php
Ну а там описано как 
Цитата(warningmax @  26.1.2011,  11:20 Найти цитируемый пост)
и как сделать запись с формы в базу данных лучше и безопаснее

написано как раз в этом разделе

Сейчас почитаю! спасибо smile 

Автор: topy 26.1.2011, 17:40
Первое правило: никогда не доверяйте данным, пришедшим от пользователя!!! НИКОГДА!!!
Код

$name = $_POST['name']; - это небезопасно
$name = mysql_real_escape_string($_POST['name']); - так намного лучше

И хотя бы так делайте со всеми переменными, пришедшими от пользователя.
Да и зачем вы присваиваете имена переменным, если потом в запросе у вас все равно старые: $_POST['name']
Вставляйте в запрос переменные так:
Код

$sql="INSERT INTO users (name, groups, login, pass) VALUES ('".$name."','".$groups."','".$login"','".$pass."')";

экранированные переменные работают немного быстрее т.к. парсер изначально знает что это переменная, а не строка.
Ну и ; в самом конце потеряли.

Автор: warningmax 16.2.2011, 17:37
Код

if (isset($_POST['in1'])){
$query="INSERT INTO text (text) VALUES ('{$_POST['in1']}')";
mysql_query($query);};

Как сделать чтобы при запуске страницы и обновлении не добавлялись пустые данные

Автор: bars80080 16.2.2011, 23:03
Цитата(warningmax @  16.2.2011,  16:37 Найти цитируемый пост)
Как сделать чтобы при запуске страницы и обновлении не добавлялись пустые данные 

проверять данные на пустоту - empty()

Автор: warningmax 14.3.2011, 11:27
Все правильно делаю?
Код

<?php
header('Content-Type: text/html; charset=utf-8');
if (isset($_POST['in1'])){
require_once 'config.php';
$in1 = mysql_real_escape_string($_POST['in1']);
$in2 = mysql_real_escape_string($_POST['in2']);
$query="INSERT INTO data (in1, in2) VALUES ('".$in1."','".$in2."')";
mysql_query($query);
header("Location: index.php");
}
?>
<form method="POST">
    <input type="text" name="in1" value="" />
    <input type="text" name="in2" value="" />
    <input type="submit" />
</form>

Автор: bars80080 14.3.2011, 14:34
не проверки на существование $_POST['in2']
плюс, нет проверки на длину данных в переменной. если их будет больше, чем ширина поля в БД - выскочит ошибка

Автор: warningmax 16.3.2011, 13:33
Код

$in1 = mysql_real_escape_string($_POST['in1']);
$in2 = mysql_real_escape_string($_POST['in2']);

Как этот кусок записать в одну строку?

Автор: bars80080 16.3.2011, 14:54
Цитата(warningmax @  16.3.2011,  12:33 Найти цитируемый пост)
Как этот кусок записать в одну строку?


Код

$in1 = mysql_real_escape_string($_POST['in1']); $in2 = mysql_real_escape_string($_POST['in2']);

Автор: warningmax 16.3.2011, 15:39
Цитата(bars80080 @ 16.3.2011,  14:54)
Цитата(warningmax @  16.3.2011,  12:33 Найти цитируемый пост)
Как этот кусок записать в одну строку?


Код

$in1 = mysql_real_escape_string($_POST['in1']); $in2 = mysql_real_escape_string($_POST['in2']);

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

Автор: Clickbeetle 16.3.2011, 20:00
Если я вас правильно понял, то так:
Код

$in1 = mysql_real_escape_string($_POST['in1']); $in2 = mysql_real_escape_string($_POST['in2']);
$in_array = array($in1,$in2);

Автор: bars80080 16.3.2011, 20:04
нет, ему просто лень писать несколько раз такую длинную функцию

что стоит записать все переменные в массив, а затем прокрутить в цикле, как настоящей программист? загадка

Код

$ar = array('in1', 'in2', 'in3');

$array_to_database = array();

foreach($ar as $v) {
    $array_to_database[$v] = (isset($_POST[$v])) ? mysql_real_escape_string($_POST[$v]) : '';
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)