2015-05-01 48 views
0

我刚刚切换到PDO,我仍然遇到PHP表单的问题。 表格由国家用户注册,每个国家可以输入最少2名和最多3名选手。我创建了一个表单,默认情况下为3名玩家,第三种形式是可选的,以防他们需要添加玩家。PDO插入3个表格值到4个表格

但是,我是新来的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

+0

你可以使用** **交易我 –

+0

需要的指导,请明确的方向给我这么我可以前进。 –

+0

你能在这里打印你的连接字符串吗?如何与您的本地主机连接?你有没有设置** PDO :: ATTR_ERRMODE **选项? –

回答

0

一定要仔细阅读PDO实例:

Complete guide and error debugging

检查调试模式是

的error_reporting(E_ALL);

$stmt = $db->prepare("INSERT INTO table(field1,field2,field3,field4,field5) VALUES(:field1,:field2,:field3,:field4,:field5)"); 
$stmt->execute(array(':field1' => $field1, ':field2' => $field2, ':field3' => $field3, ':field4' => $field4, ':field5' => $field5)); 
$affected_rows = $stmt->rowCount(); 

在一次只有一个执行语句一个准备声明能可能

+0

谢谢@Ajeet库马尔 –