Я получаю ошибку с моим PHP [закрыт]

0

Когда я регистрирую свою форму, я получаю эту ошибку. Любая помощь будет большой.

Ошибка:

Parse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE or 
T_NUM_STRING in /home/u378761662/public_html/action.php on line 3

Мой PHP:

<?php
$con=mysqli_connect("myhost.com","user","password","db");
$sql="INSERT INTO users values ($_POST["username"], $_POST["pwd"], $_POST["email"])";
if (mysqli_query($con,$sql)) {
echo "User added!";
}

Мой HTML:

<form action="action.php" method="post">
  Username<input type="text" name="username">
  <p>
    Password<input type="password" name="pwd">
    <p>
      Email<input type="text" name="Email">
<p>
    <input type="submit" name="Sign Up" value="Sign Up">
</form>
  • 1
    цитаты цитаты цитаты
  • 1
    К вашему сведению, вы также широко открыты для инъекций SQL
Показать ещё 1 комментарий
Теги:
database
forms

3 ответа

3
Лучший ответ

Вы должны разработать привычку использовать параметры запроса для динамических значений, которые вы хотите включить в SQL-запросы. Это помогает избежать путаницы в отношении котировок и помогает избежать уязвимостей безопасности.

Это тоже легко!

$sql="INSERT INTO users values (?, ?, ?)";
if ($stmt = mysqli_prepare($con,$sql)) {
  mysqli_stmt_bind_param($stmt, "sss", 
    $_POST["username"], $_POST["pwd"], $_POST["Email"]);
  if (mysqli_stmt_execute($stmt)) {
    echo "User added!";
  }
}

PS: Вероятно, вы храните пароли неправильно

  • 0
    Спасибо за помощь! Теперь я не получаю сообщение об ошибке при регистрации, но материал, вставленный в форму, не отображается в базе данных. Какие-либо предложения?
  • 0
    Неважно, я понял это
Показать ещё 3 комментария
0

Предупреждение: вы все еще уязвимы для SQL-инъекций. Ознакомьтесь с ответом Билла Карвина для решения вашей проблемы, а также для того, чтобы не подвергать себя воздействию таких типов атак.

Как говорится в ошибке, проверьте строку 3, ваши котировки не соответствуют друг другу:

$sql="INSERT INTO users values (" . $_POST["username"] . ", " . $_POST["pwd"] . ", " . $_POST["email"] . ")";
0

Это проблема цитирования:

$sql="INSERT INTO users values ($_POST['username'], $_POST['pwd'], $_POST['email'])";

Оригинал " вызывал ошибки парсера. Кроме того, как отмечает @JohnConde, это" широко открыта для SQL-инъекций ".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню