logging utente 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"; } ?> 

Questo è il mio codice per inserire i dati del module di logging in un database. Questo codice aggiunge i dati, ma fornisce anche un errore di analisi, ma non fornisce l'errore se il nome utente esiste già.

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

la linea 6 è:

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

Bene, il tuo $username è davvero indefinito.

Molto probabilmente vuoi usare $_POST['username'] .

E naturalmente questo fumetto obbligatorio XKCD :

Se la "fonte dati" è un module html (presumibilmente usando method = "post") devi usare $ _POST ['username'] quando register_globals è impostato su off (che è il default da … età). vedi http://docs.php.net/security.globals
Leggi anche 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"; } ?> 

Puoi anche usare istruzioni preparate . In questo modo non hai bisogno / non puoi dimenticare di usare una function di escape.

edit e btw: non è necessario il SELECT prima di INSERT per rendere unico il nome utente. In realtà renderà le cose ancora più difficili visto che ora devi affrontare le condizioni di gara . Dovresti bloccare la tabella tra queste due query.
Se si aggiunge un indice univoco per il nome utente nella propria tabella, MySQL non consentirà l'inserimento di un doppione, ma restituirà invece un codice di errore specifico che lo script può recuperare e gestire senza la necessità di gestire le condizioni di gara.

 define('ER_DUP_ENTRY', 1062); $mysql = mysql_connect('..', '..', '..'); mysql_select_db('..', $mysql) or die(mysql_error($mysql)); $fields = arrays( 'efname'=>'first_name', 'elname'=>'last_name', 'egender'=>'gender', 'eemail'=>'email', 'eusername'=>'username', 'epwd'=>'password', 'eadd'=>'address', 'ephone'=>'phone', 'ecity'=>'city', 'ecountry'=>'country' ); $sqlparams = arrays(); 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(', ', arrays_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'; } 

Questo perché non definisci $username ovunque. Sembra che tu voglia usare $_POST['username']

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

Inoltre, il tuo codice è vulnerabile a un'iniezione SQL

Non si definisce mai $username ovunque, quindi restituisce quell'errore perché si sta tentando di utilizzare una variabile per la quale non ha un valore.

Questo è più probabile perché non hai definito la variabile "$ username". Presumo che tu stia facendo affidamento sul fatto che questo venga popolato dai dati GET / POST in arrivo (molto probabilmente tramite i register_globals deprecati), che è una ctriggers pratica.

In quanto tale, dovrai compilare $ username tramite $ _POST o $ _GET.

Ancora più importnte, è necessario aggiornare la query di inserimento per evitare i dati "non attendibili" in arrivo utilizzando mysql_real_escape_string (ad esempio: mysql_real_escape_string ($ _ POST ['username']), ecc.)

Come @Yacoby ha detto che il tuo codice è vulnerabile a un'iniezione SQL per impedire che tu possa usare mysqli o PDO, se vuoi usare mysqli usa il seguente codice:

 <?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 = $conn->prepare("INSERT INTO employer(efname,elname,egender,eemail,eusername,epwd,eadd,ephone,ecity,ecountry)) values ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ?)"; // preparing the insert $query->bind_param("ssssssssss" , $variable1 , $variable2 , $variable3 , $variable4 , $variable5 , $variable6 , $variable7 , $variable8 , $variable9 , $variable10); // binding parameters $query->execute(); // sending the parameter values $query->close(); // closing the query $conn->close(); // closing the connection if ($query) { // checking if the query has been executed with no errors echo " Thanks for registration"; } } ?> 

ASSICURARSI DI MODIFICARE le variables $ conn e qualsiasi cosa desideri!