2016-12-02 7 views
-1

Я пытаюсь взять ввод из формы, а затем проверить таблицу (пользователя), если это имя выйдет, и мне нужно захватить uid colum.PHP - Проверьте, есть ли у пользователя ключевой ключ еще.

ввода (имя пользователя/MSG)> Проверьте имя пользователя> если так получить идентификатор пользователя> еще добавить пользователя (Это я)> принимать UID и использовать, когда я ВСТАВИТЬ сбщ в свою таблицу (сообщение)

Таблица структуры : пользователь: uid (уникальный) | имя

ЭРВО где на PHP whise:

<?php 
$name = $_GET["name"]; 
$message = $_GET["message"]; 

$checkn = "SELECT 1 FROM user WHERE name = $name"; 
$sql = "INSERT INTO user (uid, name) VALUES ('','$name')"; 
$msg = "INSERT INTO message (uid, message) VALUES ('$uid','$message')"; 
$uid = "SELECT uid FROM user WHERE name = $name"; 
$result = $conn->query($checkn); 

if ($conn->query($checkn) === TRUE) { 
    echo "Checkn TRUE"; 
}else { 
    echo "<br> SHEEET" . $checkn . $conn->error; 
} 

$conn->close();?> 

Я стер большую часть, чтобы начать и получить это фиксируется так, как только я могу получить эту часть сделать меня оный, если пользователь не существует. Спасибо.

+0

Объясните нам, что не работает? –

+0

Я бы подумал: 'WHERE name = $ name' вызовет ошибки (и откроет вам инъекции SQL). Вопрос не объясняет, что такое точная проблема. Чтобы предотвратить инъекции SQL, используйте параметризованные запросы. – chris85

ответ

1

Я думаю, что вы неправильно пишете запрос, при использовании PHP вы должны написать запрос внутри ', если он содержит переменную. " не будет анализировать значение переменной.

Заменить:

$checkn = "SELECT 1 FROM user WHERE name = $name";

С:

$checkn = 'SELECT 1 FROM user WHERE name = $name';

И он должен работать. Сделайте то же самое с другими запросами. Использовать ' вместо "

Надеюсь, что это поможет.

+0

'' 'строгий и не позволяет vars' '' позволяет vars в целом, вы никогда не должны вставлять vars так или иначе. – KatsuoRyuu

0

Просто из верхней части моей головы

<?php 

$name = $_GET["name"]; 
$message = $_GET["message"]; 

$checkn = sprintf('SELECT 1 FROM `user` WHERE `name` = \'%s\'', $name); 
$sql = sprintf('INSERT INTO `user` (`uid`, `name`) VALUES (\'\',\'%s\')', $name); 
$msg = sprintf('INSERT INTO `message` (`uid`, `message`) VALUES (\'%s\',\'%s\')', $uid, $message); 
$uid = sprintf('SELECT `uid` FROM `user` WHERE `name` = \'%s\'', $name); 

$result = $conn->query($checkn); 

if ($conn->query($checkn) == TRUE) { 
    echo "Checkn TRUE"; 
} else { 
    echo "<br> SHEEET" . $checkn . $conn->error; 
} 

$conn->close(); 

?> 

по какой-то причине я иногда возникали проблемы, когда я не ставил `вокруг имен таблиц. Я также разделил интерполяцию переменных, чтобы упростить ее защиту для SQL-инъекции (я ее не защитил).

Вы использовали triple ===, это означает, что он строгий, но mysql передаст 1 назад, который при использовании строгих правил неверен.

Надеюсь, это поможет

Смежные вопросы