2015-04-28 3 views
0

LATER EDIT: Он вставляет новый ряд, но ТОЛЬКО один! После ввода одного пользователя в таблицу «Мои пользователи» я не могу вставить другие: D он (снова) сохраняет предупреждение «Не удалось ввести данные». Зачем?Как вставить новую строку в уже созданную базу данных PHP?

У меня уже есть база данных с именем «problema_curs_1», и я хочу вставить новую строку в таблицу моих пользователей. Это код:

$db['user'] = 'root'; 
$db['pass'] = ''; 
$db['server'] = 'localhost'; 
$conn = mysql_connect($db['server'], $db['user'], $db['pass']); 
     if(! $conn) 
     { 
      die(json_encode(array("mesaj" => "'Could not connect: "))); 
     } 
     $sql = "INSERT INTO Users ('nume', 'password', 'rol') VALUES($numereg,$parolareg,'user')"; 
     mysql_select_db('problema_curs_1'); 
     $retval = mysql_query($sql, $conn); 
     if(! $retval) 
     { 
      die(json_encode(array("mesaj" => "Could not enter data:"))); 
     } 
     echo "Entered data successfully\n"; 
     mysql_close($conn); 

Он выскакивает «Не удалось ввести данные:». В моей таблице есть 4 столбца: ID, «nume», «password» и «rol». Идентификатор установлен на автоинкремент, и именно поэтому я не хочу вставлять его вручную.

* Это я буду использовать в своей функции register(). * Если это поможет, я могу поставить здесь так, как я написал Войти() часть, которая, кажется, работает:

function login($nume,$parola) 
{ 
    $db['user'] = 'root'; 
    $db['pass'] = ''; 
    $db['server'] = 'localhost'; 
    $conn = mysql_connect($db['server'], $db['user'], $db['pass']); 
    $sql = "SELECT id FROM `Users` WHERE nume ='".$nume."' ANY password = '".md5($parola)."'"; 
    $q = mysql_query($sql); 

    if(!$q) 
     die(json_encode(array("mesaj" => "Invalid"))); 
    else{ 
     $x = mysql_fetch_array($q); 
     if (empty($x)) 
      die(json_encode(array('mesaj' => 'User does not exist'))); 
     else { 
     // $user = new User($x['id']); 
      session_start(); 
      $_SESSION['user_id'] = $x['id']; 
      $_SESSION['loggedin'] = "yes"; 
      die(json_encode(array("mesaj"=>"Congrats :)"))); 
     } 

     } 
    //nu prea are cum sa ajunga aici 
    die(json_encode(array("mesaj"=>"You were not logged"))); 
} 

ответ

1

вы передаете переменные типа VARCHAR как целые числа.

INSERT INTO Users ('nume','password','rol') VALUES($numereg,$parolareg,user) 

в

INSERT INTO Users (nume,password,rol) VALUES('$numereg','$parolareg','user') 

Вы передаете значения непосредственно, которые могут привести к SQL Injection, я надеюсь, что вы бы очистить Params или передать их как безопасные Params.

+0

Спасибо! Я изменил его на $ sql = "INSERT INTO Users ('nume', 'password', 'rol') VALUES ('$ numereg', '$ parolareg', 'user')"; и до сих пор не получает данные :( – Lulu

+0

@Lulu Unquote имена столбцов Aswell – gbestard

+0

INSERT INTO пользователей (NUME, пароль, рол) VALUES ('$ numereg', '$ parolareg', 'пользователь') –

-1
$sql = "INSERT INTO Users ('nume', 'password', 'rol') VALUES($numereg,$parolareg,'user')"; 

В этой строке вы просто вставляете свои переменные. Это не сработает, потому что у вас нет котировок, а также очень небезопасно (например, SQL-инъекция).

Как вам это сделать? Это путь:

$sql = "INSERT INTO `Users` (`nume`, `password`, `rol`) VALUES('" .mysql_real_escape_string($numereg) . "', '" . mysql_real_escape_string($parolareg) ."','user')"; 

Всегда использовать обратные кавычки для ваших имен таблиц, и ваши имена полей (вместо кавычек).

Также: не используйте функцию mysql_ *, но функцию PDO или Mysqli_ *.
Для получения дополнительной информации см. Why shouldn't I use mysql_* functions in PHP?.

Другие ссылки на этот ответ:
SQL injection
mysql_real_escape_string function

-2
$sql = "INSERT INTO Users set name='". $numereg ."', password= '". $parolareg ."', rol = '". $user."' "; 
+0

Это недопустимый запрос INSERT. , – Blaatpraat

+0

@Blaatpraat на самом деле это, для вставок вы также можете использовать 'SET' – Daan

+1

@Daan. Он действителен как расширение MySQL, но он недействителен как SQL-запрос. Это будет работать хотя (потому что OP использует MySQL) ... – Blaatpraat

1
You were missing `` symbol in insert query . I have checked this code .Try this code ,hope it will solve your problem. 


<?php 
    $db['user'] = 'root'; 
    $db['pass'] = ''; 
    $db['server'] = 'localhost'; 
    $conn = mysql_connect($db['server'], $db['user'], $db['pass']); 
      if(! $conn) 
      { 
       die(json_encode(array("mesaj" => "'Could not connect: "))); 
      } 
      $sql = "INSERT INTO Users (`name`, `password`, `rol`)  VALUES('dfghfg','dfghdf','45456345')"; 
      mysql_select_db('problema_curs_1'); 
      $retval = mysql_query($sql); 
      if(! $retval) 
      { 
       die(json_encode(array("mesaj" => "Could not enter data:"))); 
      } 
      echo "Entered data successfully\n"; 
      mysql_close($conn); 
    ?>