2015-02-03 3 views
0

Пожалуйста, помогите, я проработал это несколько часов, и я не стал дальше. Исследуйте это, пока я не синю в лицо, но для меня ничего не работает! Я пытаюсь сделать регистрационную форму на PHP. У меня есть таблица пользователей со всей информацией о пользователях и таблица учетных записей для имен пользователей и паролей. Первичным ключом в таблице users является userid, и это внешний ключ в таблице учетных записей. Я пытаюсь вставить данные из одной формы в две таблицы, но я продолжаю получать ограничение внешнего ключа. Мой код размещен под ним, любая помощь будет принята с благодарностью!Ошибка MYSQL # 1452

<?php 
 

 

 
if(!$_POST['submit']){ 
 
\t echo "<table border=\"0\" cellspacing=\"3\" cellpadding=\"3\">\n"; 
 
    echo "<form method=\"post\" action=\"register.php\">\n"; 
 
    echo "<tr><td colspan=\"2\" align=\"center\">Registration Form</td></tr>\n"; 
 
    echo "<tr><td>First Name</td><td><input type=\"text\" name=\"fname\"></td></tr>\n"; 
 
    echo "<tr><td>Last Name</td><td><input type=\"text\" name=\"lname\"></td></tr>\n"; 
 
    echo "<tr><td>DOB</td><td><input type=\"date\" name=\"dob\"></td></tr>\n"; 
 
    echo "<tr><td>Contact Number</td><td><input type=\"text\" name=\"contactno\"></td></tr>\n"; 
 
    echo "<tr><td>Email Address</td><td><input type=\"text\" name=\"email_address\"></td></tr>\n"; 
 
    echo "<tr><td>Username</td><td><input type=\"text\" name=\"username\"></td></tr>\n"; 
 
    echo "<tr><td>Password</td><td><input type=\"password\" name=\"password\"></td></tr>\n"; 
 
    echo "<tr><td>Confirm</td><td><input type=\"password\" name=\"confirm\"></td></tr>\n"; 
 
    echo "<tr><td colspan=\"2\" align=\"center\"><input type=\"submit\" name=\"submit\" value=\"Register\"></td></tr>\n"; 
 
    echo "</form></table>\n"; 
 
}else { 
 
\t $fname = protect($_POST['fname']); 
 
    $lname = protect($_POST['lname']); 
 
    $dob = protect($_POST['dob']); 
 
    $contactno = protect($_POST['contactno']); 
 
    $email_address = protect($_POST['email_address']); 
 
    $username = protect($_POST['username']); 
 
    $password = protect($_POST['password']); 
 
\t 
 
\t $errors = array(); 
 
\t 
 
\t \t if(!$horsename){ 
 
\t \t \t $errors[] = "Username is not defined!"; 
 
\t \t }else { 
 
      $sql4 = "INSERT INTO 'users' (`fname`,`lname`,`dob`,`contactno`,`email_address`) VALUES ('".$fname."','".$lname."','".$dob."','".$contactno."','".$email_address."')"; 
 
      $res4 = mysql_query($sql4) or die(mysql_error()); 
 
      $sql4 = "INSERT INTO 'account' (username,password) VALUES ('".$username."','".md5($password)."')"; 
 
      $res4 = mysql_query($sql4) or die(mysql_error()); 
 
      echo "You have successfully registered with the username <b>".$username."</b> and the password of <b>".$password."</b>!"; 
 

 
\t \t } 
 
} 
 

 
?>

+0

Ваша проблема с вами. Выражения SQL co. co с вашей схемой. Если (по-видимому, сгенерированный) UserID от пользователей является полем, отличным от нуля, в учетной записи, тогда вам нужно будет включить это в свой оператор insert в учетную запись, что означает получение его после вашей вставки пользователям. – TZHX

ответ

0

Если идентификатор определяется как внешний ключ в таблице счетов, то вы должны добавить его в запрос вставки при вставке записи.

0

Emma

Слово совета. Не используйте этот код, так как он очень подвержен SQL-инъекции. Представьте себе, когда я вхожу в качестве первого назвать следующие:

mark'); drop table users; -- 

Оператор SQL, который выполняется будет

INSERT INTO users (`fname`,`lname`,`dob`,`contactno`,`email_address`) VALUES ('mark'); drop table users; 

ObRef: http://xkcd.com/327/

, который будет эффективно удалить таблицу пользователей. Если ваша функция защиты() не обрабатывает это, однако, вы лучше использовать переменные связывания: http://php.net/manual/en/mysqli-stmt.bind-param.php

Кроме того, ваш адрес электронной почты регулярное выражение не ловить все возможные случаи - смотрите здесь для обсуждения: Using a regular expression to validate an email address

ошибки в PHP-коде: используйте $ lname not lname

Я бы рассмотрел использование фреймворка для обработки формы, вставки, обновления таких записей, как Yii, Laravel, Symfony, Zend, CakePHP и т. д., чтобы сделать это - если только ваша цель чтобы узнать, как выполнять обработку низкого уровня.