PHP Kayıt Formu - SQL

2 Cevap php

Ben SQL Veritabanı içine kendi kullanıcı adı ve şifre kayıt PHP bir kayıt formu yapmak istiyorum. İşte ne var:

config.php:

   <?php
$host['naam'] = 'localhost';                // my host
$host['gebruikersnaam'] = 'root';       // my database username
$host['wachtwoord'] = '';   // my database password
$host['databasenaam'] = 'project';       // my database name

$db = mysql_connect($host['naam'], $host['gebruikersnaam'], $host['wachtwoord']) OR die ('Cant connect to the database');
mysql_select_db($host['databasenaam'], $db);
?>

index.php:

    <head>
    <title>Deltalus Account Registration</title>
    <style>
    *{ FONT-SIZE: 8pt; FONT-FAMILY: verdana; } b { FONT-WEIGHT: bold; } .listtitle { BACKGROUND: #425984; COLOR: #EEEEEE; white-space: nowrap; } td.list { BACKGROUND: #EEEEEE; white-space: nowrap; } </style>
    </head>
    <center><br><br><br><br>
    <h1>Deltalus Database</h1>
    <table cellspacing=1 cellpadding=5>
    <tr>
    <td class=listtitle colspan=2>Register at my server</td></tr>
    <form action="register_do.php" method="POST">
    <tr><td class=list align=right>Username:</td><td class=list><input type=text name=name maxlength="30"></td></tr>
    <tr><td class=list align=right>Password:</td><td class=list><input type=password name=pass maxlength="30"></td></tr>
    </td></tr>
    <tr><td class=listtitle align=right colspan=2><input type=submit name=submit value='Register'></td></tr>
    </form>
    </table>
    <br>

    </center></body></html

>

register_do.php:

   <?php
print '<title>Deltalus Database Server</title>';
$name = $_POST['name'];
$pass = $_POST['pass'];
include('config.php');
$sel = 'SELECT * FROM user WHERE username="'.$_POST['name'].'"';
if($name == ""){
echo 'No username filled in';
exit();
}elseif(mysql_num_rows(mysql_query($sel)) >= 1 ){
echo 'This username does already exists!';
exit();
}elseif($pass == ""){
echo 'No password filled in';
exit();
}else{
$d = 'INSERT INTO users (username, password) VALUES ("'.$name.'", "'.$pass.'")';
mysql_query($d) OR die (mysql_error());
echo 'Your account has been created, you can now login.';
}
?>

Web siteme bu yazı ne zaman Tamam çok sorundur. Bu POST mevcut ya da bir şey olmadığını söyleyerek bana bu hatayı veriyor. Ben kayıt düğmesine bastığınızda, geri bana Bekleyelim görelim, o hata diyor. Bunu nasıl düzeltebilirim ki? Benim kodlama yanlış gayrimenkulünü kendi şey NEDİR?

Teşekkürler,

Kevin

2 Cevap

Um... So many issues I don't know where to start. First off, your code is SQL injection heaven.
You need to totally rethink this if this code is ever going to see the light of day.

Birisi bir kullanıcı adı belirtilmiş ise ne olacağını düşünün:

blah","blah");DELETE TABLE users;

Bunun için giriş kodu sonrası, ancak mevcut kodlama tarzı verilen, birisinin giriş bir şifre belirtilmiş ise dikkate almadı:

asdf" OR "1" = "1

Bu etkili bir şifre olmadan herhangi bir kullanıcı oturum olacaktır.

Ayrıca parolaları düz metin olarak depolanan asla. Bunlar, en azından, şifrelenmiş saklanmalıdır. Hemen hemen tüm durumlarda bu karma gerekmektedir. Yani SHA256 gibi tek yönlü şifreleme kullanılarak saklanmalıdır söylemektir. A recent discussion on this.

Kullanıcı geçerli bir parola sağlanan eğer kontrol etmek için, size iki karma sürümleri karşılaştırmak ve özgün gerçekten ne olduğunu asla bilemezsiniz.

mysqli kütüphanesi yerine mysql kullanmayı düşünün. php mysql eski ve mysqli'nin daha çok yavaştır. Mysqli de doğru kullanıldığı takdirde prepared queries, SQL enjeksiyon riskini ortadan kaldırabilir denen şey sunuyor. A class I've written to simplify it's use.

Bu konularda ötesinde, sizin register_do.php içinde config.php dahil olmadığını görünür. SQL ifadeleri onsuz çalışmaz.

PHP ve MySQL hangi sürümünü kullanıyorsunuz?

Bu HTTP sunucu yanlış gibi geliyor, ve / veya POST istekleri kabul etmiyor. Ben bir göz atın ve muhtemelen ayrıntılı böylece on-line olarak bu sayfa var mı?