kullanıcı kaydı php

5 Cevap php
<?php
include"include/connection.php";

$checkusername=mysql_query("SELECT * FROM employer WHERE eusername='$username'");
if (mysql_num_rows($checkusername)==1)
{
  echo "username already exist";
}
else
{
  $query = "insert into employer(efname,elname,egender,eemail,eusername,epwd,eadd,ephone,ecity,ecountry) values ('".$_POST['first_name']."','".$_POST['last_name']."','".$_POST['gender']."','".$_POST['email']."','".$_POST['username']."','".$_POST['password']."','".$_POST['address']."','".$_POST['phone']."','".$_POST['city']."','".$_POST['country']."')";
  $result = mysql_query($query) or die (mysql_error());
  echo " Thanks for registration";
}
?>

Bu bir veritabanına kayıt formu veri eklemek için benim kodudur. Bu kod verileri ekler aynı zamanda bir ayrıştırma hatası veriyor, ancak adı zaten varsa hata vermez.

Notice: Undefined variable: username in C:\Program Files\EasyPHP5.3.0\www\register_hirer2.php on line 6
Thanks for registration 

hattı 6:

 $checkusername=mysql_query("SELECT * FROM employer WHERE eusername='$username'");

5 Cevap

Peki, sizin $username gerçekten tanımsız.

Büyük bir olasılıkla, kullanmak istediğiniz $_POST['username'].

Ve tabii ki bu zorunlu XKCD komik:

If the "data source" is an html form (supposedly using method="post") you have to use $_POST['username'] when register_globals is set to off (which is the default since ...ages). see http://docs.php.net/security.globals
Also have a read of http://php.net/manual/en/security.database.sql-injection.php

<?php
include"include/connection.php";

$query = "SELECT
    *
FROM
    employer
WHERE
    eusername='". mysql_real_escape_string($username). "'
";
$checkusername=mysql_query($query) or die(mysql_error());
if (mysql_num_rows($checkusername)==1)
{
  echo "username already exist";
}
else
{
  $query = "INSERT INTO employer(efname,elname,egender,eemail,eusername,epwd,eadd,ephone,ecity,ecountry) values (". same mysql_real_escape_string() thing here for each parameter .")";
  $result = mysql_query($query) or die (mysql_error());
  echo " Thanks for registration";
}
?>

Da kullanabilirsiniz prepared statements. Bu şekilde 't kaçan bir fonksiyonunu kullanarak unutabiliriz / gerekmez.

edit and btw: you don't need the SELECT before the INSERT in order to make the username unique. Actually it will make things even harder since now you have to deal with race conditions. You'd have to lock the table between those two queries.
If you add an unique index for the username in your table MySQL will not allow the insertion of a doublet but instead return a specific error code which your script can fetch and handle without the need of dealing with race conditions.

define('ER_DUP_ENTRY', 1062);
$mysql = mysql_connect('..', '..', '..');
mysql_select_db('..', $mysql) or die(mysql_error($mysql));

$fields = array(
  'efname'=>'first_name',
  'elname'=>'last_name',
  'egender'=>'gender',
  'eemail'=>'email',
  'eusername'=>'username',
  'epwd'=>'password',
  'eadd'=>'address',
  'ephone'=>'phone',
  'ecity'=>'city',
  'ecountry'=>'country'
);

$sqlparams = array();
foreach($fields as $sql=>$form) {
  if ( !isset($_POST[$form]) ) {
    die('missing post parameter '. $form);
  }
  $sqlparams[$sql] = "'".mysql_real_escape_string($_POST[$form], $mysql)."'";
}  

$query = '
  INSERT INTO
    employer
    '. join(', ', array_keys($sqlparams)) .'
  VALUES
  ('.join(',', $sqlparams).')
';

// table:employer has been defined with "unique key idxName (eusername)"
$result = mysql_query($query, $mysql);
if ( false!==$result ) {
  echo " Thanks for registration";
}
else if ( ER_DUP_ENTRY===mysql_errno($mysql) ) {
  echo 'username already exists';
}
else {
  echo 'an error occurred';
}

Eğer $username yerde tanımlamak yok olmasıdır. Kullanmak istediğiniz gibi görünüyor $_POST['username']

mysql_query("SELECT * FROM employer WHERE eusername='{$_POST['username']}'");

Ayrıca, kodu bir SQL Injection açıktır

Sen $username yerde tanımlamak asla, o yüzden için bir değeri yoktur ki bir değişkeni kullanmaya çalışıyoruz çünkü bu hata verir.

Eğer '$ username' değişken tanımlı değil ettik, çünkü bu çok muhtemeldir. Ben bu kötü uygulamadır (amortismana register_globals aracılığıyla olasılıkla) Gelen GET / POST verilerinden doldurulan dayanarak konum olduğunu tahmin.

Bu nedenle, $ _POST veya $ _GET üzerinden $ adınızı doldurmak ya gerekir.

(: Mysql_real_escape_string ($ _POST ['username']), vb gibi) Daha da önemlisi, mysql_real_escape_string kullanarak gelen 'güvenilmeyen' verilerini kaçmak için ekleme sorgusu güncellemeniz gerekir