【发布时间】:2015-07-11 00:57:19
【问题描述】:
我刚刚切换到 PDO,但 PHP 表单仍然存在问题。 该表格是为国家用户注册球队而制作的,每个国家可以输入最少2名和最多3名球员。我创建了一个默认情况下适用于 3 名玩家的表格,第 3 种表格是可选的,以防他们需要添加或不添加玩家。
但是,我是 PDO 的新手,我将向您展示整个脚本,以便您帮助我解决脚本问题。
脚本和表单位于同一个文件中,我运行测试,页面变为白色,没有错误。
现在我要做的是将至少 2 / 最多 3 个团队球员数据插入 MySQL。
这是我的 PHP 代码:
<?php
try
{
require_once 'connection_pdo.php';
$championships = 'SELECT * FROM champs
WHERE champ_status = 1
ORDER BY champ_name ASC';
$championships_results = $db->query($championships);
$users = 'SELECT userid, username FROM users';
$users_results = $db->query($users);
$colname_numRows = "-1";
if (isset($_SESSION['MM_UserGroup'])) {
$colname_numRows = $_SESSION['MM_UserGroup'];
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$stmt = $db->prepare("INSERT INTO players (playerid, FirstName, LastName, Dob, NationalRanking, PhoneNumber, EmailAddress, CountryID)
VALUES (:playerid, :FirstName, :LastName, :Dob, :NationalRanking, :PhoneNumber, :EmailAddress, :CountryID)");
//player 1
$stmt->bindParam(':FirstName', $_POST["playerFirstName1"]);
$stmt->bindParam(':LastName', $_POST["playerLastName1"]);
$stmt->bindParam(':Dob', $_POST['year1']."-".$_POST['month1']."-".$_POST['day1']);
$stmt->bindParam(':Ranking', $_POST["playerNationalRanking1"]);
$stmt->bindParam(':playerPhoneNumber', $_POST["playerPhoneNumber1"]);
$stmt->bindParam(':playerEmailAddress', $_POST["playerEmailAddress1"]);
$stmt->bindParam(':playerCountryID', $_POST["playerCountryID1"]);
$stmt->execute();
$last_ID_of_P1 = $db->lastInsertId();
//player 2
$stmt->bindParam(':FirstName', $_POST["playerFirstName2"]);
$stmt->bindParam(':LastName', $_POST["playerLastName2"]);
$stmt->bindParam(':Dob', $_POST['year2']."-".$_POST['month2']."-".$_POST['day2']);
$stmt->bindParam(':Ranking', $_POST["playerNationalRanking2"]);
$stmt->bindParam(':playerPhoneNumber', $_POST["playerPhoneNumber2"]);
$stmt->bindParam(':playerEmailAddress', $_POST["playerEmailAddress2"]);
$stmt->bindParam(':playerCountryID', $_POST["playerCountryID2"]);
$stmt->execute();
$last_ID_of_P2 = $db->lastInsertId();
//player 3
$stmt->bindParam(':FirstName', $_POST["playerFirstName3"]);
$stmt->bindParam(':LastName', $_POST["playerLastName3"]);
$stmt->bindParam(':Dob', $_POST['year3']."-".$_POST['month3']."-".$_POST['day3']);
$stmt->bindParam(':Ranking', $_POST["playerNationalRanking3"]);
$stmt->bindParam(':playerPhoneNumber', $_POST["playerPhoneNumber3"]);
$stmt->bindParam(':playerEmailAddress', $_POST["playerEmailAddress3"]);
$stmt->bindParam(':playerCountryID', $_POST["playerCountryID3"]);
$stmt->execute();
$last_ID_of_P3 = $db->lastInsertId();
$stmt2 = $db->prepare("INSERT INTO participants (playerID, idparticipants, idChampionships, idUsers, created_at, status, booking_status) VALUES($last_ID_of_P1, :idparticipants, :idChampionships, :idUsers, :created_at, 1, 0)");
//participant player 1
$stmt2->bindParam(':idparticipants', $_POST["idparticipants1"]);
$stmt2->bindParam(':idChampionships', $_POST["idChampionships1"]);
$stmt2->bindParam(':idUsers', $_POST['idUsers1']);
$stmt2->bindParam(':created_at', $_POST["created_at1"]);
$stmt2->execute();
$last_ID_of_participant_1 = $db->lastInsertId();
//participant player 2
$stmt2->bindParam(':idparticipants', $_POST["idparticipants2"]);
$stmt2->bindParam(':idChampionships', $_POST["idChampionships2"]);
$stmt2->bindParam(':idUsers', $_POST['idUsers2']);
$stmt2->bindParam(':created_at', $_POST["created_at2"]);
$stmt2->execute();
$last_ID_of_participant_2 = $db->lastInsertId();
//participant player 3
$stmt2->bindParam(':idparticipants', $_POST["idparticipants3"]);
$stmt2->bindParam(':idChampionships', $_POST["idChampionships3"]);
$stmt2->bindParam(':idUsers', $_POST['idUsers3']);
$stmt2->bindParam(':created_at', $_POST["created_at3"]);
$stmt2->execute();
$last_ID_of_participant_3 = $db->lastInsertId();
$stmtTeam = $db->prepare("INSERT INTO teamPlayers (TeamID, idparticipant, idUsers, Idplayer1, Idplayer2, Idplayer3) VALUES(TeamID, 111021, $last_ID_of_P1, $last_ID_of_P2, $last_ID_of_P3)");
$stmtTeam->execute();
//upload script 1
if(!is_dir("upload/".$_SESSION['MM_Username'])) {
//do we need to make the uploads directory for the files?
mkdir("upload/".$_SESSION['MM_Username']);
//make the rest of the script safe, though this will only be done once
if(is_uploaded_file($_FILES['uploadedfile']['tmp_name'])){
$folder = "upload/".$_SESSION['MM_Username'];
$file = "/" .sha1(rand())."-" .basename($_FILES['uploadedfile']['name']);
//basename( $_FILES['uploadedfile']['name']);
$full_path = $folder.$file;
$idPlayer = $last_ID_of_P1;
$IP = $_SERVER['REMOTE_ADDR'];
$FileLocation = $full_path;
$idUsers = $_SESSION['MM_UserGroup'];
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $full_path)){
$sql_image ="INSERT INTO files(Time, FileLocation, IP, idUsers, idparticipant)values(NOW(),:FileLocation,:IP,:idUsers,:idparticipant)";
$qry=$db->prepare($sql_image);
$success = $qry->execute(array(':FileLocation'=>$full_path,':IP'=>$IP,':idUsers'=>$idUsers,':idparticipant'=>$idPlayer));
}else{
$sql_image ="UPDATE files SET Time=?, FileLocation=?, IP=?, idUsers=?, idparticipant=? where idUsers=?";
$qry=$db->prepare($sql_image);
$success = $qry->execute(array(NOW(), $full_path, $IP, $idUsers, $idPlayer));
}
if($success){
echo "<script language='javascript' type='text/javascript'>alert('Successfully Saved!')</script>";
echo "<script language='javascript' type='text/javascript'>window.open('listfiles.php','_self')</script>";
}else{
echo 'db transaction failed';
}
} else {
echo "upload received! but process failed";
}
}
else{
echo "upload failure ! Nothing was uploaded";
}
}
}//upload script2
catch (PDOException $e)
{
//$error = $e->getMessage();
echo "Error: " . $e->getMessage();
}
?>
如您所见,我重复 3 次插入以获取每个表上最后插入的 id,以便在其他表中引用。
HTML 表单位于我之前关于相同问题但具有 mysql_* 函数的问题中。
提前致谢。
PHP MySQL inserting 3 different form values to 4 different tables
【问题讨论】:
-
你可以使用事务
-
我需要这方面的指导,请给我明确的指示,以便我继续前进。
-
你能在这里打印你的连接字符串吗?如何与您的本地主机连接?您是否设置了 PDO::ATTR_ERRMODE 选项?