2017-02-25 16 views
0

データベースでこれらのデータを検証する前にデータを挿入したいと考えています。 MySQLのテーブルとPHPコードは以下の通りです、 妥当性確認を行った後、MySQLに挿入

PHP 5 Forms Required Fields
PHP Insert Data Into MySQL

私は多くの方法を試してみましたが、それは私と一緒に働いていない、PHPでの私の経験は非常に良いではありませんので、

以下のコードソースへのリンクだけでなく

CREATE TABLE `myclients` ( 
`id` bigint(20) NOT NULL AUTO_INCREMENT, 
`name` varchar(255) NOT NULL DEFAULT '', 
`email` varchar(255) NOT NULL DEFAULT '', 
`website` varchar(255) NOT NULL DEFAULT '', 
`comment` varchar(255) NOT NULL DEFAULT '', 
`gender` varchar(255) NOT NULL DEFAULT '', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 


<?php 
$servername = "localhost"; 
$username = "username"; 
$password = "password"; 
$dbname = "myDB"; 

// Create connection 
$conn = mysqli_connect($servername, $username, $password, $dbname); 
// Check connection 
if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 



// define variables and set to empty values 
$nameErr = $emailErr = $genderErr = $websiteErr = ""; 
$name = $email = $gender = $comment = $website = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["name"])) { 
    $nameErr = "Name is required"; 
    } else { 
    $name = test_input($_POST["name"]); 
    } 

    if (empty($_POST["email"])) { 
    $emailErr = "Email is required"; 
    } else { 
    $email = test_input($_POST["email"]); 
    } 

    if (empty($_POST["website"])) { 
    $website = "Website is required"; 
    } else { 
    $website = test_input($_POST["website"]); 
    } 

    if (empty($_POST["comment"])) { 
    $comment = "Comment is required"; 
    } else { 
    $comment = test_input($_POST["comment"]); 
    } 

    if (empty($_POST["gender"])) { 
    $genderErr = "Gender is required"; 
    } else { 
    $gender = test_input($_POST["gender"]); 
    } 
} 

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





$sql = "INSERT INTO myclients (name, email, website, comment, gender) 
VALUES ('$name', '$email', '$website', '$comment', '$gender')"; 

if (mysqli_query($conn, $sql)) { 
    echo "New record created successfully"; 
} else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
} 

mysqli_close($conn); 
?> 



<p><span class="error">* required field.</span></p> 
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
    Name: <input type="text" name="name"> 
    <span class="error">* <?php echo $nameErr;?></span> 
    <br><br> 
    E-mail: <input type="text" name="email"> 
    <span class="error">* <?php echo $emailErr;?></span> 
    <br><br> 
    Website: <input type="text" name="website"> 
    <span class="error"><?php echo $websiteErr;?></span> 
    <br><br> 
    Comment: <textarea name="comment" rows="5" cols="40"></textarea> 
    <br><br> 
    Gender: 
    <input type="radio" name="gender" value="female">Female 
    <input type="radio" name="gender" value="male">Male 
    <span class="error">* <?php echo $genderErr;?></span> 
    <br><br> 
    <input type="submit" name="submit" value="Submit"> 
</form> 
+1

一度に1つ質問してください。検証の手助けが必要なのか、それとも質問を挿入して編集するのかを選択します。 –

+2

[Little Bobby](http://bobby-tables.com/)によると*** [あなたのスクリプトはSQLインジェクション攻撃の危険にさらされています。](http://stackoverflow.com/questions/60174/how-can- i-prevent-sql-injection-in-php)*** [MySQLi](http://php.net/manual)の[prepared](http://en.wikipedia.org/wiki/Prepared_statement)ステートメントについて学びます。 /en/mysqli.quickstart.prepared-statements.php)。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –

答えて

0

検証の際に同時にデータをテーブルに挿入しています。データを挿入する前にエラーが発生していないことを確認してください。 INSERTクエリを以下の条件の中に追加できます

if(empty($nameErr) && empty($emailErr) && empty($genderErr) && empty($websiteErr)){ 

    $sql = "INSERT INTO myclients (name, email, website, comment, gender) 
    VALUES ('$name', '$email', '$website', '$comment', '$gender')"; 

    if (mysqli_query($conn, $sql)) { 
     echo "New record created successfully"; 
    } else { 
     echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
    } 
} 
+0

再生していただきありがとうございますが、コードを追加した後に問題が残っています。ページを開いて空のフォームを直接送信すると「新しいレコードが正常に作成されました」というメッセージが表示されます – Edward

+0

これは今100000の感謝です – Edward

+0

教えること/厄介で危険なコーディングの慣行に対して。準備ができていない文章を投稿した場合[投稿する前にこれを考慮する](http://meta.stackoverflow.com/q/344703/)。さらに[もっと貴重な答えは、正しい方法をOPに示すことから来ている](https://meta.stackoverflow.com/a/290789/1011527)。 –

0

あなたがチェック値は次のようにnullまたはではありません前に、エラー配列を追加する必要があります。

$errors = array(); 
if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["name"])) { 
    $errors['name'] = "Name is required"; 
    } else { 
    $name = test_input($_POST["name"]); 
    } 
} 
if (!$errors) { 
     $query = " 
      insert into Table_Name 
      (name) 
      values 
      (
      '".mysql_real_escape_string($v_name)."' 
      ) 
     "; 

     mysql_query($query); 
    } 
+0

*** [mysql_ *関数の使用をやめる](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)*** [これらの拡張機能](http://php.net/manual/en/migration70.removed-exts-sapis.php)がPHP 7で削除されました。[prepared](http://en.wikipedia.org/wiki/Prepared_statement)について学んでください。 )[PDO](http://php.net/manual/en/pdo.prepared-statements.php)と[MySQLi](http://php.net/manual/en/mysqli.quickstart.prepared- statements.php)、PDOの使用を検討してください。[これは本当に簡単です](http://jayblanchard.net/demystifying_php_pdo.html)。 –