2016-12-08 1 views
0

Я пытаюсь и пытаюсь заставить этот код работать. У меня возникают две проблемы - сначала один:Создайте электронную почту из представления формы из базы данных mySQL, используя PHP

//loop the fetch and concactenate into string 
     while ($row = $result->fetch_assoc()) { 
      $string .= "Team ID: ".$row[teamID]."<br>"."Team Name: ".$row[teamName] ."Class: ".$row[class] ."<br><br>"; 

«класс» правильный заголовок столбца в таблице, однако информация из этого столбца не извлекается. Каждый столбец из этой таблицы отлично работает.

Следующая проблема. Если я подстановлю значение для $ bibNumber, этот код работает отлично. Почему я не могу использовать эту переменную в этой ситуации? (Или действительно любая переменная)

//grab all rows from the table for bib# and put into array 
     $string = ""; 
     $sql = "SELECT teamID, teamName, class FROM Teams WHERE bibNumber = ". $bibNumber; 
     $result = $conn->query($sql); 

Вот полный блок кода (минус HTML)

// dont use button to check submit, just check the post var 
if(isset($_POST)) { 
    //enter personal information into Authentication table 
    $firstName = check_input(@$_POST['firstName']); 
    $lastName = check_input(@$_POST['lastName']); 
    $password = trim($_POST['pass']); // do not lead with @, it ignores errors. 
    $hash = password_hash($password, PASSWORD_DEFAULT); 
    $isMaster = check_input(@$_POST['ageCheck']); 
    $region = check_input(@$_POST['region']); 
    $email = check_email(@$_POST['email']); 
    $region = $_POST['region']; 
    $teamCount = $_POST['teamCount'];// not necessary to scrub, its a select box. 

    $teamSqlStatement = "SELECT * FROM Authentication WHERE email='".$_POST['email']."'"; 

    $teamSql = $conn->query($teamSqlStatement); 

    $row = $teamSql->fetch_array(MYSQLI_ASSOC); 

    if($row) { 
     if($password = $row['password']) { 
     $messageOne = "Your account has been successfully located."; 
     }else { 
      die("You already have an account but you did not enter the correct password."); 
     } 
      $bibNumber = $row['bibNumber']; 
      $isMaster = $row['isMaster']; 
    }else { 
    $sql = "INSERT INTO Authentication (firstName, lastName, email, password, isMaster) VALUES ('$firstName', '$lastName', '$email', '$hash', '$isMaster')"; 
    } 

     if($teamCount == 1) { 
      $messageTwo = "You owe $30.00 USD."; 
     }else { 
      $messageTwo = "You owe $" . (($teamCount * 25) + 5) . ".00"; 
     } 

    for($i = 1; $i <= $teamCount; $i++) { 
     $teamNameVar = 'team' . $i . 'Name'; 
     $teamName = $_POST[$teamNameVar]; 
     $class = $_POST['team' . $i . 'size']; 


     $sql = "INSERT INTO Teams (bibNumber, teamName, class, isMaster, isLeader, region) VALUES 
      ('$bibNumber', '$teamName', '$class', '$isMaster', '0', '$region');"; 

      $teamSql = $conn->query($sql); 

      if(!$teamSql) { 
       echo "An error occured while adding your teams, one of the team names are likely taken."; 
      } 
    } 

    if ($conn->query($sql) === TRUE) { 
     $messageOne = $firstName . " " . $lastName . ", your personal information has been added successfully"."<br>"; 
     $bibNumber = $conn->insert_id; 
     $headers = "From: someWebsite.com <[email protected]>\n"; 
     $headers .= "Cc: testsite <[email protected]>\n"; 
     $headers .= "X-Sender: someWebsite.com <[email protected]>\n"; 
     $headers .= 'X-Mailer: PHP/' . phpversion(); 
     $headers .= "X-Priority: 1\n"; // Urgent message! 
     $headers .= "Return-Path: [email protected]\n"; // Return path for errors 
     $headers .= "MIME-Version: 1.0\r\n"; 
     $headers .= "Content-Type: text/html; charset=iso-8859-1\n"; 
     $subject = 'Signup Confirmation'; 

     //grab all rows from the table for bib# and put into array 
     $string = ""; 
     $sql = "SELECT teamID, teamName, class FROM Teams WHERE bibNumber = ". $bibNumber; 
     $result = $conn->query($sql); 

     //loop the fetch and concactenate into string 
     while ($row = $result->fetch_assoc()) { 
      $string .= "Team ID: ".$row[teamID]."<br>"."Team Name: ".$row[teamName] ."Class: ".$row[class] ."<br><br>"; 
     } 

     $message = "We have received your registration information." . "<br>". "Your 2017 Team(s): <br><br>" . 
      $string . "<br>". "Please save this email for your reference"; 

     mail($email, $subject, $message, $headers); 
    } else { 
     die("Error! You can only register once. Please contact us to fix any issues."); 
    } 

} 
+2

** ПРЕДУПРЕЖДЕНИЕ **: при использовании 'mysqli' вы должны использовать [параметризованные запросы] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) и [' bind_param' ] (http://php.net/manual/en/mysqli-stmt.bind-param.php), чтобы добавить данные пользователя в ваш запрос. ** НЕ используйте ** интерполирование строк или конкатенацию для выполнения этого, потому что вы создали серьезную [SQL-инъекцию] (http://bobby-tables.com/). ** НИКОГДА не ставьте данные '$ _POST' или' $ _GET' непосредственно в запрос, это может быть очень вредно, если кто-то пытается использовать вашу ошибку. – tadman

+1

** ПРЕДУПРЕЖДЕНИЕ **: Написание собственного уровня контроля доступа непросто, и есть много возможностей, чтобы заставить его серьезно ошибиться. У этого есть много опасных [уязвимостей инъекции SQL] (http://bobby-tables.com/), так как вы не [правильно избегаете значений] (http://bobby-tables.com/php). Этот код позволяет * любому * получать * что-либо * с вашего сайта. ** НЕ ЗАПИСЬ ** написать свою собственную систему аутентификации. Любая [структура разработки] (http://codegeekz.com/best-php-frameworks-for-developers/), такая как [Laravel] (http://laravel.com/), поставляется с [системой аутентификации] (https://laravel.com/docs/5.2/authentication). – tadman

ответ

0

'Класс' является функцией в PHP.

Изменить $row[class] на $row['class'] .... обратите внимание на одну цитату? Я предлагаю вам сделать то же самое для других.

Во-вторых, попробуйте изменить $sql = "SELECT teamID, teamName, class FROM Teams WHERE bibNumber = ". $bibNumber;

в

$sql = "SELECT teamID, teamName, class FROM Teams WHERE bibNumber = '$bibNumber'"; 

Вам не нужно, чтобы закрыть ваши строки, чтобы включить переменную, если Youre используя двойные кавычки.

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