Запустите MySQL INSERT Query несколько раз (введите значения в несколько таблиц)

в принципе, у меня 3 таблицы; пользователей и проектов, то у меня есть «users_projects», чтобы разрешить формирование «один ко многим». Когда пользователь добавляет проект, мне нужна информация о проекте, а затем «userid» и «projectid», хранящиеся в таблице usersprojects. Похоже, что он действительно прямой, но у меня проблемы с синтаксисом, который я думаю !?

Как бы то ни было, у меня есть это как мои запросы INSERT (значения входят в две разные таблицы):

$projectid = $_POST['projectid']; $pname = $_POST['pname']; $pdeadline = $_POST['pdeadline']; $pdetails = $_POST['pdetails']; $userid = $_POST['userid']; $sql = "INSERT INTO projects (projectid, pname, pdeadline, pdetails) VALUES ('{$projectid}','{$pname}','{$pdeadline}','{$pdetails}')"; $sql = "INSERT INTO users_projects (userid, projectid) VALUES ('{$userid}','{$projectid}')"; $result = mysql_query($sql, $connection) or die("MySQL Error: ".mysql_error()); header("Location: frontview.php"); exit(); 

Вы просто забыли выполнить sql между каждым запросом. Добавить

  mysql_query($sql, $connection) or die("MySQL Error: ".mysql_error()); 

между каждым запросом, и вы должны быть в порядке.

btw (1) всегда полезно тестировать консоль с tail -f в журнале sql (в /var/log/mysql/ )
btw (2) У вас серьезные проблемы с безопасностью в коде.
btw (3) Возможно, вы захотите использовать PDO / Mysqli, а не старое расширение mysql. btw (4) Это сделало бы вашу жизнь проще использовать какую-то оболочку (хороший класс), чтобы приблизиться к БД, а не делать это прямо повсюду в вашем коде.

Да, две вещи, которые я бы проверял, были бы

1) выполняются запросы? Как и другие плакаты, вы выполняете SQL-запросы между установкой SQL?

2) если вы печатаете / отлаживаете / отображаете каким-то образом переменные, которые вы вставляете, они заполняются? Если вы видите, что вещи вставлены, но некоторые данные пустые, тогда что-то может взорваться до этого, и эти переменные будут пустыми.

Возможно, я ошибаюсь, но вы помещаете заголовок («Location: main.php»); в середине вашего скрипта?

 $projectid=mysql_insert_id($connection); 

Я назвал это после моего первого запроса, это получит значение AutoIncrement из вашей таблицы проектов и сохранит его в $ projectid, тогда второй запрос будет использовать его. поэтому после выполнения моего первого запроса я поставил выше код там, не меняя ничего!

Кажется, вы пытаетесь выполнить mysql_query() только один раз. У вас есть два запроса, поэтому его нужно использовать дважды, по одному для каждого запроса:

 $sql = "INSERT INTO projects (projectid, projectname, projectdeadline, projectdetails) VALUES ('{$projectid}','{$projectname}','{$projectdeadline}','{$projectdetails}')"; $result = mysql_query($sql, $connection) or die("MySQL Error: ".mysql_error()); $sql = "INSERT INTO usersprojects (userid, projectid) VALUES ('{$userid}','{$projectid}')"; $result = mysql_query($sql, $connection) or die("MySQL Error: ".mysql_error()); 

В качестве альтернативы вы можете использовать mysqli_multi_query() , но для использования интерфейса mysqli может потребоваться существенная переработка вашего кода.