2016-11-30 4 views
-1

Привет, У меня есть небольшая проблема при создании встроенной формы с помощью проверки на стороне сервера. У меня есть два файла index.php, которые я использую в качестве контроллера для добавления данных в базу данных и form.php для отображения формы. Это то, что у меня есть:PHP inline validation

index.php

<?php 
include '../includes/dbconn.php'; 

# add joke link pressed 
if (isset($_GET['add_joke'])) 
{ 
// Build the list of authors for drop-down list 
try 
{ 
    $result = $dbConnection->query('SELECT id, name FROM author'); 
} 
catch (PDOException $e) 
{ 
    $error = 'Error fetching list of authors.' . '<br />' . $e -> getMessage(); 
    include '../includes/error.php'; 
    exit(); 
} 

foreach ($result as $row) 
{ 
    $authors_in_db[] = array(
    'id' => $row['id'], 
    'name' => $row['name'] 
    ); 
} 
include 'form.php'; 
exit(); 
} 

# add joke to the database 
if (isset($_GET['add_joke_to_db'])) 
{ 

# continue with adding joke to the database 
try 
{ 
    $sql = 'INSERT INTO joke SET 
    joke_text = :joke_text, 
    joke_date = CURDATE(), 
    author_id = :author_id'; 

    $s = $dbConnection -> prepare($sql); 
    $s -> bindValue(':joke_text', $_POST['joke_text']); 
    $s -> bindValue(':author_id', $_POST['author']); 
    $s -> execute(); 
} 
catch (PDOException $e) 
{ 
    $error = 'Error adding joke.' . '<br />' . $e -> getMessage(); 
    include '../includes/error.php'; 
    exit(); 
} 

header('Location: .'); 
exit(); 
} 

# delete joke from the database 
if (isset($_GET['delete_joke'])) 
{ 
try 
{ 
    $sql = 'DELETE FROM joke WHERE id = :id'; 
    $s = $dbConnection -> prepare($sql); 
    $s -> bindValue(':id', $_POST['id']); 
    $s -> execute(); 
} 
catch (PDOException $e) 
{ 
    $error = 'Error deleting joke.' . '<br />' . $e -> getMessage(); 
    include '../includes/error.php'; 
    exit(); 
} 

header ('Location: .'); 
exit(); 
} 

# select all jokes from the database 
try 
{ 
$sql = 'SELECT joke.id, joke.joke_text, joke.joke_date, author.name, author.email 
FROM joke INNER JOIN author 
ON author_id = author.id'; 
$result = $dbConnection -> query($sql); 
} 
catch (PDOException $e) 
{ 
$error = 'Error fetching jokes.' . '<br />' . $e -> getMessage(); 
include '../includes/error.php'; 
exit(); 
} 

# add each data item within an array 
foreach ($result as $row) 
{ 
$jokes_in_db[] = array(
'joke.id' => $row['id'], 
'joke.joke_text' => $row['joke_text'], 
'joke.joke_date' => $row['joke_date'], 
'author.name' => $row['name'], 
'author.email' => $row['email'] 
); 
} 

включают 'jokes.php'; ? >

и form.php

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title>Add Joke</title> 
    <link rel="stylesheet" type="text/css" href="../includes/styles.css" /> 
</head> 
<body> 
    <h1>Add Joke</h1> 
    <form action="?add_joke_to_db" method="post"> 
     <div> 
      <label for="joke_text">Type your joke here:</label> 
      <textarea id="joke_text" name="joke_text" rows="3" required></textarea> 
      <span class="error">* <?php echo $joke_textError;?></span> 
     </div> 
     <div> 
      <label for="author">Author:</label> 
      <select name="author" id="author"> 
       <option value="">Select one</option> 
       <?php foreach ($authors_in_db as $data): ?> 
       <option value="<?php echo htmlspecialchars($data['id'], ENT_QUOTES, 'UTF-8'); ?>"> 
        <?php echo htmlspecialchars($data['name'], ENT_QUOTES, 'UTF-8'); ?> 
       </option> 
       <?php endforeach; ?> 
      </select> 
      <span class="error">* <?php echo $author_textError;?></span> 
     </div> 
     <div> 
      <input type="submit" value="Add"> 
     </div> 
    </form> 
</body> 

+0

Каков ваш вопрос? будьте более конкретными! – Akshay

+0

Барни, чтобы сделать его более понятным. Как получить встроенное сообщение об ошибке, показывающее, отсутствует ли joke_text. –

ответ

0

Вот пример, чтобы установить сообщение об ошибке для joke_text;

if (isset($_GET['add_joke_to_db'])) 
{ 

$e_joke = 0; 
$author = 0; 
# continue with adding joke to the database 
try 
{ 
    if($_POST['joke_text'] == '') 
    { 
     $e_joke = 1; 
    } 
    if($_POST['author'] == '') 
    { 
     $author = 1; 
    } 
    if($e_joke == 0 && $author == 0){ 
    $sql = 'INSERT INTO joke SET 
    joke_text = :joke_text, 
    joke_date = CURDATE(), 
    author_id = :author_id'; 

    $s = $dbConnection -> prepare($sql); 
    $s -> bindValue(':joke_text', $_POST['joke_text']); 
    $s -> bindValue(':author_id', $_POST['author']); 
    $s -> execute(); 
    } 
else 
{ 
    include '../includes/error.php?joke='.$e_joke.'&auther='.$author; 
} 
} 
catch (PDOException $e) 
{ 
    $error = 'Error adding joke.' . '<br />' . $e -> getMessage(); 
    include '../includes/error.php'; 
    exit(); 
} 

header('Location: .'); 
exit(); 
} 

form.php

 <!DOCTYPE html> 
    <html lang="en"> 
    <head> 
     <meta charset="utf-8"> 
     <title>Add Joke</title> 
     <link rel="stylesheet" type="text/css" href="../includes/styles.css" /> 
    </head> 
    <body> 
     <h1>Add Joke</h1> 
     <form action="?add_joke_to_db" method="post"> 
      <div> 
       <label for="joke_text">Type your joke here:</label> 
       <textarea id="joke_text" name="joke_text" rows="3" required></textarea> 
       <?php 
       if(isset($_GET["joke"]) && $_GET["joke"]==1) 
       { ?> 
       <span class="error">* <?php echo "Joke text is missing";?> 
       <?php } ?> 
</span> 
      </div> 
      <div> 
       <label for="author">Author:</label> 
       <select name="author" id="author"> 
        <option value="">Select one</option> 
        <?php foreach ($authors_in_db as $data): ?> 
        <option value="<?php echo htmlspecialchars($data['id'], ENT_QUOTES, 'UTF-8'); ?>"> 
         <?php echo htmlspecialchars($data['name'], ENT_QUOTES, 'UTF-8'); ?> 
        </option> 
        <?php endforeach; ?> 
       </select> 
       <?php 
       if(isset($_GET["auther"]) && $_GET["auther"]==1) 
       { ?> 
       <span class="error">* <?php echo "Select Auther";?> 
       <?php } ?></span> 
      </div> 
      <div> 
       <input type="submit" value="Add"> 
      </div> 
     </form> 
    </body> 

вы должны сделать эту логику для всех сообщений об ошибках, как описание, шутки и т.д.

+0

он вроде работает: # добавить шутку в базу данных если (Исеть ($ _ GET [ 'add_joke_to_db'])) {\t \t # если автор пустой \t если ($ _POST [ 'joke_text'] == ' ') \t { \t \t $ joke_textError =' Вы должны добавить текст в это поле. '; \t \t включает 'form.php'; \t \t exit(); \t} Проблема, которую я получаю, заключается в том, что использование exit остановит выполнение скрипта. –

+0

FYI: какой 'exit' будет делать, это прекратит выполнение оттуда – Akshay

+0

Вы должны использовать' exit' только после того, как вы заполните весь необходимый процесс или получите ошибку, и вы хотите прекратить выполнение! – Akshay