Страница 1 из 1
Записать данные в таблицу
Добавлено: 21 ноя 2014, 10:58
Shouldercannon
Доброго времени суток!
Есть таблица:
Код: Выделить всё
CREATE TABLE IF NOT EXISTS `private_senders` (
`uid` int(10) unsigned NOT NULL auto_increment,
`from` int(2) unsigned NOT NULL,
`to` varchar(2000) NOT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
Есть задачи:
1. Если в таблице нет отправителя (from), то добавить его и вместе с ним в его же поле получатель to добавить данные to
2. Если в таблице уже есть такой отправитель, но обращаемся к его полю to и смотрим, нет ли такого получается, если нет, то дописываем его через "," иначе прекращаем выполнение кода.
Есть набросок
Код: Выделить всё
<?php
include "dbconnect.php";
// Проверка from на пустоту
if (empty($_GET['from'])) {
die;
}
// Получаем данные из базы
$query = 'SELECT from, to FROM private_senders';
$result = mysql_query($query) or die ("ERROR: ".mysql_error());
// Сразу в переменную добавляем нового to
$to = ''.$query['to'].','.$_GET['to'].'';
// Если колонка отправителя пустая, то добавим его и его получателей
if (empty($result['from']) {
$query = "UPDATE private_senders SET from = '".$_GET['from']."', to = '".$to."'";
}
// Получаем данные из базы
$query = "SELECT from, to FROM private_senders WHERE from like '%".$_GET['from']."%', to like '%".$_GET['to']."%'";
$result2 = mysql_query($query) or die ("ERROR: ".mysql_error());
// Проверяем нашлось что то, если нет, то добавляем из первой переменной
if (empty($result2['to']) {
$query = "UPDATE private_senders SET to = '".$to."'";
}
?>
Получаю ошибку:
<b>Parse error</b>: syntax error, unexpected '{' in <b>C:\Program Files (x86)\AppServ\www\lanm\postprivatesenders.php</b> on line <b>13</b>
В PHP разбираюсь не очень
Re: Записать данные в таблицу
Добавлено: 21 ноя 2014, 11:30
Duncon
Неожиданная скобка, тебе указали где и на какой строке вижу ошибку if(empty($result2['to']) { скобка открыта и не закрыта --> if (empty($result2['to'])) {
Re: Записать данные в таблицу
Добавлено: 21 ноя 2014, 14:33
Shouldercannon
Код: Выделить всё
<?php
include "dbconnect.php";
/**
// Проверка from на пустоту
if (empty($_GET['from'])) {
die;
}*/
// Получаем данные из базы
$query = "SELECT * FROM private_senders";
$result = mysql_query($query) or die ("ERROR: ".mysql_error());
// Сразу в переменную добавляем нового to
$to = ''.$query['to'].','.$_GET['to'].'';
// Если колонка отправителя пустая, то добавим его и его получателей
if (empty($result['from'])) {
$query = "UPDATE private_senders SET from = '".$_GET['from']."', to = '".$to."'";
}
// Получаем данные из базы
$query = "SELECT * FROM private_senders WHERE from like '%".$_GET['from']."%', to like '%".$_GET['to']."%'";
$result2 = mysql_query($query) or die ("ERROR: ".mysql_error());
// Проверяем нашлось что то, если нет, то добавляем из первой переменной
if (empty($result2['to'])) {
$query = "UPDATE private_senders SET to = '".$to."'";
}
?>
Теперь другую ошибку получаю:
ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from like '%%', to like '%%'' at line 1
Re: Записать данные в таблицу
Добавлено: 21 ноя 2014, 16:10
Duncon
Не помню синтаксис LIKE но чувствую что там нужно не через запятую писать а через AND. Погугли..
Re: Записать данные в таблицу
Добавлено: 25 ноя 2014, 11:17
Shouldercannon
Исправленный вариант
Код: Выделить всё
<?php
include "dbconnect.php";
// Проверка from на пустоту
if (empty($_POST['ifrom'])) {
die;
}
// Получаем данные из базы
$query = "SELECT * FROM private_senders";
$result = mysql_query($query) or die ("ERROR: ".mysql_error());
// Сразу в переменную добавляем нового to
$to = ''.$query['sto'].', '.$_POST['sto'].'';
// Сразу в переменную добавляем нового to
$to = ''.$query['sto'].', '.$_POST['sto'].'';
// Если колонка отправителя пустая, то добавим его и его получателей
if (empty($result['ifrom'])) {
$query = "UPDATE private_senders SET ifrom = '".$_POST['ifrom']."' sto = '".$to."'";
}
$ifrom=$_POST["ifrom"];
$sto=$_POST["sto"];
$query = "SELECT ifrom, sto FROM private_senders WHERE ifrom LIKE '%{$ifrom}%' AND sto LIKE '%{$sto}%'";
$result2 = mysql_query($query) or die ("ERROR: ".mysql_error());
// Проверяем нашлось что то, если нет, то добавляем из первой переменной
if (empty($result2['sto'])) {
$query = "UPDATE private_senders SET sto = '".$to."'";
}
?>
Но в таблицу ничего не добавляется. И ещё такой интересный момент
Насчет пустых данных - если переменная есть, а данных в ней нет, это значит что она просто пустая, и при обновлении на свободное место вставляются ваши входящие данные.
Действительно так?
Re: Записать данные в таблицу
Добавлено: 25 ноя 2014, 12:41
Duncon
Чтоб что-то обновлялось нужно выполнить запрос update судя по коду его тут нет, есть только на select.
Бред про пустые данные, проверить нужно на существование значения isset и по желанию дальше на пустоту, я вообще вот так проверяю ''!=$x
И зачем использовать LIKE если можно просто WHERE iform=$iform итд разница в производительности существенна.
Так же входящие данные необходимо экранировать, иначе какой нить школьник пошлёт данные в твои переменные и вынесет тебе базу.
Re: Записать данные в таблицу
Добавлено: 25 ноя 2014, 15:16
Shouldercannon
Небольшой сдвиг. Застрял здесь
Код: Выделить всё
echo "Нам прислали"." = ".$result; // Проверка - выводит Resource id #4, что-то неправильно делаю
Код: Выделить всё
<?php
include "dbconnect.php";
// Проверка отправителя на пустоту
if (empty($_POST['ifrom'])) {
die;
}
echo "Нам прислали"." = ".$_POST['ifrom']."~".$_POST['sto']; // Проверка
// Ищем ID отправителя
$query = "SELECT * FROM `private_senders` WHERE `ifrom` = '".$_POST['ifrom']."'";
$result = mysql_query($query) or die ("ERROR: ".mysql_error());
echo "Нам прислали"." = ".$result; // Проверка - выводит Resource id #4, что-то неправильно делаю
// Проверка на пустоту
if (empty($result)) {
// Добавляем отправителя
$query = "INSERT INTO `private_senders` VALUES (NULL, '".$_POST['ifrom']."', '')";
$result = mysql_query($query) or die ("ERROR: ".mysql_error());
} else {
// Если есть совпадение, то обновляем список получателей
$query = "UPDATE private_senders SET sto = '".$_POST['sto']."' WHERE `ifrom` = '".$_POST['ifrom']."'";
$result = mysql_query($query) or die ("ERROR: ".mysql_error());
}
?>
Re: Записать данные в таблицу
Добавлено: 25 ноя 2014, 15:47
Duncon
mysql_query ворзвращает ссылку на ресурс. Погугли, данные ещё нужно извлечь. Сегодня мануалов полно..
Re: Записать данные в таблицу
Добавлено: 02 дек 2014, 13:33
kastet
Shouldercannon писал(а):Небольшой сдвиг. Застрял здесь
Код: Выделить всё
echo "Нам прислали"." = ".$result; // Проверка - выводит Resource id #4, что-то неправильно делаю
Код: Выделить всё
<?php
include "dbconnect.php";
// Проверка отправителя на пустоту
if (empty($_POST['ifrom'])) {
die;
}
echo "Нам прислали"." = ".$_POST['ifrom']."~".$_POST['sto']; // Проверка
// Ищем ID отправителя
$query = "SELECT * FROM `private_senders` WHERE `ifrom` = '".$_POST['ifrom']."'";
$result = mysql_query($query) or die ("ERROR: ".mysql_error());
echo "Нам прислали"." = ".$result; // Проверка - выводит Resource id #4, что-то неправильно делаю
// Проверка на пустоту
if (empty($result)) {
// Добавляем отправителя
$query = "INSERT INTO `private_senders` VALUES (NULL, '".$_POST['ifrom']."', '')";
$result = mysql_query($query) or die ("ERROR: ".mysql_error());
} else {
// Если есть совпадение, то обновляем список получателей
$query = "UPDATE private_senders SET sto = '".$_POST['sto']."' WHERE `ifrom` = '".$_POST['ifrom']."'";
$result = mysql_query($query) or die ("ERROR: ".mysql_error());
}
?>
$res=mysql_fetch_array($result);
echo "Нам прислали = ".$res[0];