Записать данные в таблицу

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
Shouldercannon
Сообщения: 74
Зарегистрирован: 08 июн 2008, 15:49

21 ноя 2014, 10:58

Доброго времени суток!
Есть таблица:

Код: Выделить всё

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 разбираюсь не очень
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

21 ноя 2014, 11:30

Неожиданная скобка, тебе указали где и на какой строке вижу ошибку if(empty($result2['to']) { скобка открыта и не закрыта --> if (empty($result2['to'])) {
[syntax=Delphi] [/syntax]
Shouldercannon
Сообщения: 74
Зарегистрирован: 08 июн 2008, 15:49

21 ноя 2014, 14:33

Код: Выделить всё

<?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
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

21 ноя 2014, 16:10

Не помню синтаксис LIKE но чувствую что там нужно не через запятую писать а через AND. Погугли..
[syntax=Delphi] [/syntax]
Shouldercannon
Сообщения: 74
Зарегистрирован: 08 июн 2008, 15:49

25 ноя 2014, 11:17

Исправленный вариант

Код: Выделить всё

<?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."'";
}
?>
Но в таблицу ничего не добавляется. И ещё такой интересный момент
Насчет пустых данных - если переменная есть, а данных в ней нет, это значит что она просто пустая, и при обновлении на свободное место вставляются ваши входящие данные.
Действительно так?
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

25 ноя 2014, 12:41

Чтоб что-то обновлялось нужно выполнить запрос update судя по коду его тут нет, есть только на select.
Бред про пустые данные, проверить нужно на существование значения isset и по желанию дальше на пустоту, я вообще вот так проверяю ''!=$x
И зачем использовать LIKE если можно просто WHERE iform=$iform итд разница в производительности существенна.
Так же входящие данные необходимо экранировать, иначе какой нить школьник пошлёт данные в твои переменные и вынесет тебе базу.
[syntax=Delphi] [/syntax]
Shouldercannon
Сообщения: 74
Зарегистрирован: 08 июн 2008, 15:49

25 ноя 2014, 15:16

Небольшой сдвиг. Застрял здесь

Код: Выделить всё

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());
}
?>
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

25 ноя 2014, 15:47

mysql_query ворзвращает ссылку на ресурс. Погугли, данные ещё нужно извлечь. Сегодня мануалов полно..
[syntax=Delphi] [/syntax]
kastet
Сообщения: 2
Зарегистрирован: 02 дек 2014, 13:12
Откуда: чехов
Контактная информация:

02 дек 2014, 13:33

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];
Ответить