Audes
@Audes

Как разобраться с записью и чтением из БД?

День добрый. Сразу хочу сказать, что это мой первый опыт, где что-то вообще работает, поэтому ошибок куча. Имеется следующий "код", который должен проверить есть ли IP пользователя в БД, и если нет - записать.
<?php
  header("Content-Type: text/html; charset=utf-8");
  $conn = new mysqli('хост', 'root', '', 'db');
  $ip = $_SERVER["REMOTE_ADDR"];
  if (mysqli_connect_errno()) {
    exit('Connect failed: '. mysqli_connect_error());
  }
  $res = mysqli_query($conn,"SELECT ip FROM user WHERE ip='$ip'");
  if (isset($res)) {
    mysqli_query($conn,"INSERT INTO user (ip) VALUES ('$ip')");
    $res = mysqli_query($conn,"SELECT ip FROM user WHERE ip='$ip'");
  }
  $arr = mysqli_fetch_assoc($res);
  $userid = $arr['id'];
#ниже всякие инклуды и т.д.
?>

Проблемы две:
1) в базу всегда добавляется запись, при том, что захожу с одного IP.
2) не могу вывести поле id. foreach показал только наличие поля ip.
Как и почему?
  • Вопрос задан
  • 183 просмотра
Решения вопроса 1
axaxa_man
@axaxa_man
web developer
С конца,
1. Чтобы показать id, нужно id в селекте попросить, меняем запрос:
$res = mysqli_query($conn,"SELECT ip FROM user WHERE ip='$ip'");
на
$res = mysqli_query($conn,"SELECT id, ip FROM user WHERE ip='$ip'");
2. И чтобы одним запросом вставлять, надо выполнять какой-то такой запрос:

IF NOT EXISTS
( SELECT ip
FROM user
WHERE ip = '$ip'
)
BEGIN
INSERT INTO USER (ip)
VALUES ('$ip')
END;

Надеюсь, чем-то помог
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
1) В базу будет добавляться, тк условием для добавления является существование переменной $res, а она всегда у вас создается, что в нее записывается - другой вопрос.
2) поле id не выводится по причине того что вы его не выбираете, выборка происходит только поля ip, для всех полей используйте "*".
Ответ написан
Комментировать
@entermix
Используйте INSERT IGNORE
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы