2015-11-08 5 views
0

Я подключаюсь к базе данных для загрузки данных формы html, и я получаю синтаксическую ошибку в запросе mysqli. Я пробовал варианты синтаксиса, но он не очищает. Еще один набор глаз был бы оценен.Ошибка синтаксиса в запросе mysqli

<?php 
// define variables and set to empty values 
$ProjectErr = $ClientErr = $LastNameErr = $DateReceivedErr = ""; 
$Project = $Client = $LastName = $DateReceived = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["Project"])) { 
    $ProjectErr = "Project name is required"; 
    } else { 
    $Project = test_input($_POST["Project"]); 
    // check if name only contains letters and whitespace 
    if (!preg_match("/^[a-zA-Z ]*$/",$Project)) { 
     $ProjectErr = "Only letters and white space allowed"; 
    } 
    } 

    } 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["Client"])) { 
    $ClientErr = "Client name is required"; 
    } else { 
    $Client = test_input($_POST["Client"]); 
    // check if name only contains letters and whitespace 
    if (!preg_match("/^[a-zA-Z ]*$/",$Client)) { 
     $ClientErr = "Only letters and white space allowed"; 
    } 
    } 

    } 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["LastName"])) { 
    $LastNameErr = "Tech writer name is required"; 
    } else { 
    $LastName = test_input($_POST["LastName"]); 
    // check if name only contains letters and whitespace 
    if (!preg_match("/^[a-zA-Z ]*$/",$LastName)) { 
     $LastNameErr = "Only letters and white space allowed"; 
    } 
    } 

    } 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["DateReceived"])) { 
    $DateReceivedErr = "The date the project was received is required"; 
    } else { 
    $DateReceived = test_input($_POST["DateReceived"]); 
    // check if name only contains letters and whitespace 
    if (!preg_match("/^[a-zA-Z ]*$/",$DateReceived)) { 
     $DateReceivedErr = "Only letters and white space allowed"; 
    } 
    } 

    } 


function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 
?> 

<?php 
$servername = "localhost"; 
$username = "oldga740_Tonymm"; 
$password = "JtAjDm#6"; 
$dbname = "oldga740_SeniorProject"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

//Sending form data to sql db. 
mysqli_query($connect,"INSERT INTO Projects (Project, Client, LastName, DateReceived) 
VALUES ('$_POST[post_Project]', '$_POST[post_Client]', '$_POST[post_LastName]', '$_POST[post_DateReceived]')"; 
?> 

<h2>New Project</h2> 
<p><span class="error">* required field.</span></p> 
<form action="send_post.php" method="post"> 
    Project: <input type="text" name="Project" value="<?php echo $Project;?>"> 
    <span class="error">* <?php echo $ProjectErr;?></span> 
    <br><br> 
    Client: <input type="text" name="Client" value="<?php echo $Client;?>"> 
    <span class="error">* <?php echo $ClientErr;?></span> 
    <br><br> 
    LastName: <input type="text" name="LastName" value="<?php echo $LastName;?>"> 
    <span class="error">* <?php echo $LastNameErr;?></span> 
    <br><br> 
    DateReceived: <input type="text" name="DateReceived" value="<?php echo $DateReceived;?>"> 
    <span class="error">* <?php echo $DateReceivedErr;?></span> 
    <br><br> 
    <input type="submit" name="submit" value="Submit"> 
</form> 

<?php 
echo "<h2>Your Input:</h2>"; 
echo $Project; 
echo "<br>"; 
echo $Client; 
echo "<br>"; 
echo $LastName; 
echo "<br>"; 
echo $DateReceived; 
?> 
+0

Если изменить код, чтобы использовать параметрический запрос и выполнение вы будете A) не столь уязвим для атак внедрения SQL, и B) имеет лучшее представление о том, что SQL вы на самом деле выполнения. – Michael

+0

спасибо за помощь Micheal – Tony

+0

Кстати, вы только что разместили имя пользователя и пароль, которые вы используете для базы данных, возможно, захотите изменить это сейчас ... –

ответ

0

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

Внимательно следите за кодом, это довольно понятно.

<?php 
function test_input($data){ 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 

$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "StackOverflow"; 

// create connection 
$connection = new mysqli($servername, $username, $password, $dbname); 

if(isset($_POST['submit']) && !$connection->connect_error){ 
    // to track errors 
    $error = false; 

    // now validate input fields 
    if (empty($_POST['Project']) || !isset($_POST['Project'])){ 
     $ProjectErr = "Project name is required"; 
     $error = true; 
    }elseif(!preg_match("/^[a-zA-Z\s]{1,}$/",$_POST['Project'])){ 
     // check if project only contains letters and whitespace 
     $ProjectErr = "Only letters and white space allowed"; 
     $error = true; 
    }else{ 
     $Project = test_input($_POST['Project']); 
    } 

    if (empty($_POST['Client']) || !isset($_POST['Client'])){ 
     $ClientErr = "Client name is required"; 
     $error = true; 
    }elseif(!preg_match("/^[a-zA-Z\s]{1,}$/",$_POST['Client'])){ 
     // check if client only contains letters and whitespace 
     $ClientErr = "Only letters and white space allowed"; 
     $error = true; 
    }else{ 
     $Client = test_input($_POST['Client']); 
    } 

    if (empty($_POST['LastName']) || !isset($_POST['LastName'])){ 
     $LastNameErr = "Last name is required"; 
     $error = true; 
    }elseif(!preg_match("/^[a-zA-Z\s]{1,}$/",$_POST['LastName'])){ 
     // check if last name only contains letters and whitespace 
     $LastNameErr = "Only letters and white space allowed"; 
     $error = true; 
    }else{ 
     $LastName = test_input($_POST['LastName']); 
    } 

    if (empty($_POST['DateReceived']) || !isset($_POST['DateReceived'])){ 
     $DateReceivedErr = "Data received field is required"; 
     $error = true; 
    }elseif(!preg_match("/^[a-zA-Z\s]{1,}$/",$_POST['DateReceived'])){ 
     // check if data received only contains letters and whitespace 
     $DateReceivedErr = "Only letters and white space allowed"; 
     $error = true; 
    }else{ 
     $DateReceived = test_input($_POST['DateReceived']); 
    } 

    if(!$error){ 
     $query = "INSERT INTO Projects (Project, Client, LastName, DateReceived) VALUES ('$Project', '$Client', '$LastName', '$DateReceived')"; 
     if($connection->query($query)){ 
      echo "record is successfully inserted!"; 
     }else{ 
      echo "error: record could not be inserted"; 
     } 
    } 
} 

?> 

<html> 
<head> 
    <title>Page Title</title> 
</head> 
<body> 
    <h2>New Project</h2> 
    <p><span class="error">* required field.</span></p> 
    <form action="send_post.php" method="post"> 
     Project: <input type="text" name="Project" value="<?php if(isset($Project)){ echo $Project; } ?>"> 
     <span class="error">* <?php if(isset($ProjectErr)){ echo $ProjectErr; } ?></span> 
     <br><br> 
     Client: <input type="text" name="Client" value="<?php if(isset($Client)){ echo $Client; } ?>"> 
     <span class="error">* <?php if(isset($ClientErr)){ echo $ClientErr; } ?></span> 
     <br><br> 
     LastName: <input type="text" name="LastName" value="<?php if(isset($LastName)){ echo $LastName; } ?>"> 
     <span class="error">* <?php if(isset($LastNameErr)){ echo $LastNameErr; } ?></span> 
     <br><br> 
     DateReceived: <input type="text" name="DateReceived" value="<?php if(isset($DateReceived)){ echo $DateReceived; } ?>"> 
     <span class="error">* <?php if(isset($DateReceivedErr)){ echo $DateReceivedErr; } ?></span> 
     <br><br> 
     <input type="submit" name="submit" value="Submit"> 
    </form> 

    <?php 
     echo "<h2>Your Input:</h2>"; 
     if(isset($_POST['Project'])){ echo $_POST['Project']; } 
     echo "<br />"; 
     if(isset($_POST['Client'])){ echo $_POST['Client']; } 
     echo "<br />"; 
     if(isset($_POST['LastName'])){ echo $_POST['LastName']; } 
     echo "<br />"; 
     if(isset($_POST['DateReceived'])){ echo $_POST['DateReceived']; } 
    ?> 
</body> 
</html> 
<?php 
    $connection->close(); 
?> 
+0

Я ценю помощь. Надеюсь, вы поняли, что я не просил кого-либо написать этот код для меня. Я изучаю часть этого, когда я иду, но я был бы признателен, если бы вы могли дать мне пример или два, где мой код нуждался в серьезной настройке. Я могу, очевидно, сравнить свой оригинал с вашим пересмотренным кодом, чтобы увидеть, где были изменения, но я не буду учиться, если я не пойму, что я сделал неправильно. Благодарю. – Tony

+0

Во-первых, вы дезактивируете свои входные данные для работы с базой данных, но вы не использовали ни одного из них в инструкции запроса вставки. Вы создаете объект mysqli _conn_, но вы не использовали его для выполнения запроса, вместо этого вы использовали процедурный способ. –

+0

Я ценю вашу честную обратную связь и благодарю вас за вашу помощь сегодня. В следующий раз я буду лучше проверять свой код. Просто любопытно, есть ли там валидатор для проверки PHP? – Tony

0

Я предполагаю, что у этой линии у вас проблемы.

mysqli_query($connect," 
    INSERT INTO Projects (Project, Client, LastName, DateReceived) 
    VALUES ('" . $_POST["Project"] . "', '" . $_POST["Client"] . "', '" .$_POST["LastName"] . "', '" . $_POST["DateReceived"] . "');"); 

Ваша проблема была и на пост «имена» (его не $_POST[post_Project] но только $_POST["Project"]), и что вы только что написали их внутри SQL кода вместо их вставки.

+0

Я думал, что это может быть частью проблемы, поэтому я запускал ее в обоих направлениях, но я все еще получаю синтаксическую ошибку, неожиданную ';' в одной строке. – Tony

+0

Попробуйте добавить ';' в конец. Btw, я отсутствовал ')' в конце строки 'INSERT INTO Projects' –

+0

Я только что понял ... Нам не хватало') 'в конце синтаксиса' PHP', ничего плохого в 'SQL ' –

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