Mysql
 sql >> база данни >  >> RDS >> Mysql

Изпращане на формуляр, mysql и php

Тук има няколко нередни неща.

Използвате грешни идентификатори за вашите колони в (и като кавички):

('id', 'username', 'password', 'email')

премахнете ги

(id, username, password, email)

или използвайте обратни отметки

(`id`, `username`, `password`, `email`)

mysql_error() трябваше да ви изведе грешка, но не поради:

  • Смесвате MySQL API с mysqli_ за да се свържете, след това mysql_ във вашата заявка.

Тези два различни API не се смесват един с друг.

Използвайте mysqli_ изключително и променете настоящата си заявка на:

if($query = mysqli_query($connect, "INSERT...

и променете mysql_error() към mysqli_error($connect)

като пренаписване за този блок:

if(isset($_POST["submit"])){
    if($query = mysqli_query($connect,"INSERT INTO users ('id', 'username', 'password', 'email') VALUES('', '".$username."', '".$password."', '".$email."')")){
        echo "Success";
    }else{
        echo "Failure" . mysqli_error($connect);
    }
}

Само за тестване на грешката, направете промените, както очертах малко по-горе, като същевременно запазите кавичките около колоните си така, както ги имате сега. След това ще видите грешката, която MySQL ще изведе. След това можете да направите, както вече очертах по-горе, и да премахнете кавичките около имената на колоните или да ги замените с отметки.

Урокът, който видяхте, може да използва много добре обратни отметки, но вероятно не са били достатъчно различими, за да кажете, че те наистина са обратни тикчета, а не единични кавички.

Настоящият ви код обаче е отворен за SQL инжекция . Използвайте mysqli с изготвени констатациии , или PDO с подготвени изявления , те са много по-безопасни .

Забелязах, че може да съхранявате пароли в обикновен текст. Ако случаят е такъв, това е силно обезкуражено.

Препоръчвам ви да използвате CRYPT_BLOWFISH или password_hash() на PHP 5.5 функция. За PHP <5.5 използвайте password_hash() compatibility pack .

Освен това, вместо да правите:

$connect = mysqli_connect("localhost", "root", "") or die("Could not connect to server!");
mysqli_select_db($connect, "php_forum") or die("Could not connect to database!");

Вместо това трябва да проверявате за грешки, точно както е посочено в ръководството

$link = mysqli_connect("myhost","myuser","mypassw","mybd") 
or die("Error " . mysqli_error($link)); 

Така че във вашия случай:

$connect = mysqli_connect("localhost", "root", "","php_forum") 
or die("Error " . mysqli_error($connect)); 

Редактиране: и промених action="register.php" към action="" тъй като използвате целия код в една и съща страница.

<!DOCTYPE HTML>
<html>
    <head>
        <title>Register</title>
    </head>
    <body>
        <form action="" method="POST">
            Username: <input type="text" name="username">
            <br/>
            Password: <input type="password" name="password">
            <br/>
            Confirm Password: <input type="password" name="confirmPassword">
            <br/>
            Email: <input type="text" name="email">
            <br/>
            <input type="submit" name="submit" value="Register"> or <a href="login.php">Log in</a>
        </form>
    </body>
</html>
<?php
    require('connect.php');
    $username = $_POST['username'];
    $password = $_POST['password'];
    $confirmPassword = $_POST['confirmPassword'];
    $email = $_POST['email'];

    if(isset($_POST["submit"])){
        if($query = mysqli_query($connect,"INSERT INTO users (`id`, `username`, `password`, `email`) VALUES ('', '".$username."', '".$password."', '".$email."')")){
            echo "Success";
        }else{
            echo "Failure" . mysqli_error($connect);
        }
    }
?>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите цяло число от MySQL като цяло число в PHP?

  2. нормализиране на акцентирани знаци в MySQL заявки

  3. Възможни PDOException грешки (MySQL 5)?

  4. ElasticSearch PutMapping API:MapperParsingException Преобразуването на коренния тип не е празно след синтактичен анализ

  5. Проблеми с Rails 3 Mysql