import base64, re
def enc(telstr):
s = re.sub(r'\D', '', telstr)
if len(s) < 10 or len(s) == 11 and s[0] not in '78' or len(s) > 11:
raise ValueError('"%s" не похоже на телефонный номер' % telstr)
x, l = int(s[-10:]), bytearray(b'\0\0\0\0\0')
for i in range(4, -1, -1):
x, rest = divmod(x, 256)
l[i] = rest
return base64.encodebytes(l)[:7].decode('utf-8')
def dec(b64):
x = 0
for b in base64.decodebytes(b64.encode('utf-8') + b'=\n'):
x = x * 256 + b
return x
s = enc('8(926)123-4567')
print(s) # AigDOYc
print(dec(s)) # 9261234567
И еще вопрос, возможно-ли сделать в рамках такого запроса удаление из БД тех записей, id которых не найдены в файле XML?
Вот собственно сделай замену этого:
if ("$total" == 0) {
$sql = ("INSERT INTO users (id,login, realname, item_1, item_2) VALUES('$id','$login', '$realname', '$item_1', '$item_2')");
$result = mysql_query($sql) or die("Error ".mysql_error());
} else {
echo 'ID или Login - существуют!';
}
на это:
if ("$total" == 0) {
$sql = ("INSERT INTO users (id,login, realname, item_1, item_2) VALUES('$id','$login', '$realname', '$item_1', '$item_2')");
$result = mysql_query($sql) or die("Error ".mysql_error());
} else {
$q = "DELETE users FROM users WHERE users.id != '$id'";
mysql_query($q);
header("Location: index.php");
}
P.S. Извините за спам :) - (сделайте возможность редактировать свой пост :) )
Вот под Твою XML-ку обработчик на PHP.
Проверяет на уже существующий в базе ID и Login. Если TRUE - не вносит.
mysql_connect("localhost", "xmluploader", "xmluploader") or die(mysql_error());
mysql_select_db("xmluploader") or die(mysql_error());
$xmlURL = "xml.xml";
$sxml = simplexml_load_file($xmlURL);
foreach($sxml->user as $user) {
$id = stripslashes($user->attributes()['id']);
$login = stripslashes($user->attributes()['login']);
$realname = stripslashes($user->attributes()['realname']);
$item_1 = stripslashes($user->items->item_1->attributes()['img']);
$item_2 = stripslashes($user->items->item_2->attributes()['img']);
$query = mysql_query("SELECT COUNT(*) FROM users WHERE login='$login' OR id='$id'") or die(mysql_error());
$user = mysql_fetch_row($query);
$total = $user[0];
if ("$total" == 0) {
$sql = ("INSERT INTO users (id,login, realname, item_1, item_2) VALUES('$id','$login', '$realname', '$item_1', '$item_2')");
$result = mysql_query($sql) or die("Error ".mysql_error());
} else {
echo 'ID или Login - существуют!';
}
}
поменять ее нельзя, это API со стороннего сервисаload xml — берет файл с локальной ФС, что мешает (тем или иным образом) обработать хмл (пусть даже в консоли регуляркой вырезав все ненужные item)?
возможно-ли сделать в рамках такого запроса удаление из БД тех записей, id которых не найдены в файле XML?Напрямую никак. Можно импортнуть данные из ХМЛ во временную таблицу и на основе появившихся ИД — снести из основной все лишнее (delete from table main where id not in (select from table tempforxml))
Вопрос обстоит в том, каким образом можно получить данные из item_1 которые находятся в атрибуте img. Когда я создаю в таблице поле с именем «img», туда парсятся данные из атрибута последнего тега item, и дублирования имен полей в MySQL не допустимо, а имена атрибутов поменять нельзя. Если кто знает, как еще можно обратиться к атрибуту через LOAD XML, просьба подсказать.Напрямую нельзя. Народ извращается с load data infile с последующей работой с xml в базе, по типу такого newtover.tumblr.com/post/14858246616/mysql-load-data-from-xml. Но вряд ли это будет эффективный способ.