2015-01-23 4 views
1

У меня возникла проблема с введением информации в базу данных. Странно, что запрос обновления работает, но не запрос на вставку. Я не получаю никаких ошибок при отправке, он проходит правильно и сохраняется эхо-счет, но ничего не вставлено. Что мне не хватает или что-то не так. пожалуйста, помочьОбновление запроса работает, но не вставляет запрос

if(isset($_POST['Submitaccount'])){ 
$allowedusers = $_POST['users']; 
$accountid = trim($_POST['accountid']); 
if(!$_POST['copyperms']) $_POST['copyperms']='N'; 
if(!$_POST['allusers']) $_POST['allusers']='N'; 
if(!$_POST['enabled']) $_POST['enabled']='N'; 
if(!$_POST['servertime']) $_POST['servertime']='N'; 
if(!$_POST['delremovals']) $_POST['delremovals']='N'; 

unset($_POST['Submitaccount']); 
unset($_POST['accountid']); 
unset($_POST['users']); 

$notmust = array("email" , "skip" , "comments" , "firstmod"); 

foreach($_POST as $key=>$val){ 
    if(!trim($val) && !in_array($key , $notmust)) { 
     $err = 1; 
     $empty = "$key"; 
     break; 
    } 
    $qpart .= "`$key` = '".mysql_escape_string($val)."' , " ; 
} 
if($qpart) $qpart = substr($qpart , 0 , -2); 

if(!$err){ 
    $chk = mysql_num_rows(mysql_query("SELECT * from accounts WHERE name = '".mysql_escape_string($_POST['name'])."' and id <> '$accountid'")); 
    if($chk >0){ 
     $err = 2; 
    } 
} 

if(!$err){ 
    if(!$accountid){ 
     $q = "INSERT into accounts SET $qpart "; 
     mysql_query($q) or die("Error inserting the record :".mysql_error()."<br>".$q); 
     $accountid = mysql_insert_id(); 
    }else{ 
     $q = "UPDATE accounts SET $qpart WHERE id = '$accountid'"; 
     mysql_query($q) or die("Error updating the record :".mysql_error()."<br>".$q); 
    } 
} 
+0

Это работает, если вы выполняете запрос 'INSERT' вручную? – Barmar

+0

Можете ли вы предоставить значение '$ qpart'? – VMAtm

+0

Связанный http://stackoverflow.com/a/12516294/213550 – VMAtm

ответ

0

У вас есть двойной if(!$err){. Вы хотите, чтобы и (!$err) в один? Если первый (!$err) предназначен для включения индикатора для второго, функция SELECT не может быть размещена над функцией INSERTкосвенно.

попробовать это:

if(!$err){ 
    $chk = mysql_num_rows(mysql_query("SELECT * from accounts WHERE name = '".mysql_escape_string($_POST['name'])."' and id <> '$accountid'")); 
    if($chk >0){ 
     $err = 2; 
     // if(!$err){ again ... 
     if(!$accountid){ 
      $q = "INSERT into accounts SET (column1) VALUES ($var1)"; 
      mysql_query($q) or die("Error inserting the record :".mysql_error()."<br>".$q); 
      $accountid = mysql_insert_id(); 
      } 
     else{ 
      $q = "UPDATE accounts SET $qpart WHERE id = '$accountid'"; 
      mysql_query($q) or die("Error updating the record :".mysql_error()."<br>".$q); 
      } 
     } 
} 
else{ 
    //other code to handle if ($err) 
} 

Примечание: Я бы предпочел, используя PDO для обработки базы данных, это так просто сценарии, кроме того, он больше не поддерживается

+0

Я пробовал ваше предложение, но результат остается прежним. ничего не вставлено. –

+0

измените $ qpart на (column1, ...) VALUES (переменная $) –

+0

это то, что я пробовал, но все равно никакого результата. $ q = "INSERT INTO users (имя, имя пользователя, пароль) \ n". "VALUES (\ '$ name \', \ '$ username \', \ '$ pass \') \ n". "\ n". ""; –

3

Это происходит потому, что команда INSERT имеет другой синтаксис:

INSERT into accounts SET $qpart " 

не является обычным, вы можете написать это:

INSERT into accounts (column names) VALUES your values" 

13.2.5 INSERT Syntax

0

Вы должны понимать, что функции MySQL становятся устаревшими , Либо использование mysqli, либо pdo было бы лучшим вариантом, но если вам абсолютно необходимо использовать mysql в качестве решения, я бы предложил не публиковать форму для себя, а опубликовать в другой php-файл, так как у вас будет меньше проблем. В моей среде это кажется чтобы работать хорошо, как временное решение, в то время как мы переписываем все, чтобы использовать mysqli. Если это идет и дайте мне знать.

+0

Спасибо, что сделал. Я был действительно приятно удивлен, когда я ударил по кирпичной стене с большим количеством экспериментов. Я просто создал еще один php-файл, просто разместив 3 переменные и низко и созерцая его, вставленный в базу данных. Еще раз спасибо. –

Смежные вопросы