2016-04-25 2 views
0

フォームコード -PHPを介して提出すると、MySQLデータベースが空白の行を入力することがあります。これを避ける方法は?

<form method="POST" action="shareexperience.php" id="contactForm" name="sentMessage" target="formsaved"> 
<br/><textarea rows="5" cols="40" name="views" id="views" placeholder="Views About Your Profession"> 
</textarea> <br/> 
<textarea rows="5" cols="40" name="advice" id="advice" placeholder="Advice 4 Students"> 
</textarea> <br/> 
Wanna Be A Guide 4 Child 
<input type="radio" id="yes" name="guide" value="Yes" checked> Yes </input> 
<input type="radio" id="No" name="guide" value="No" > No </input> 
<br/><input type="text" name="name" id="professionalname" placeholder="Name"> 
<input type="text" name="email" id="professionalemail" placeholder="Email Id"> <br/> 
<br/><input type="submit" value="Share & Nominate" onclick="saveexperience()"> 
</form> 


PHP CODE- 

<? php 
$con=mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("Failed to connect to MySQL: " . mysql_error()); 
$db=mysql_select_db(DB_NAME,$con) or die("Failed to connect to MySQL: " .mysql_error()); 
//inserting Record to the database 
$name = $_POST['name']; 
$email = $_POST['email']; 
$views = $_POST['views']; 
$advice = $_POST['advice']; 
$guide=$_POST['guide']; 
$query = "INSERT INTO professionals(name,email,views,advice,guide)VALUES('$name','$email', '$views','$advice','$guide')"; 
$result = mysql_query($query); 
mysql_close($con); 
?> 

<iframe name="formsaved" height="30px" width="300px" scrolling="no" frameborder="0"> </iframe> 

below-以下のようにターゲットformsavedは時々データが罰金を入力するが、時にはそれはあなたができる 動作しないhtmlタグはiframeを使用してリダイレクトを回避するために使用されてきました私のウェブサイトもチェックしてください - guidance4future.in/nominate

注:onclickは、ページ内のhtmlタグのいずれかを無効にするために使用されています...

事前のおかげで...

+3

**警告**:PHPを学んでいるだけの方は、古い['mysql_query'](http://php.net/manual/en/function.mysql-query.php)を学ばないでください。インタフェース。それはひどいので、PHP 7では削除されました。[PDOは学ぶのが難しくありません](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo- for database-access /)、[PHP The Right Way](http://www.phptherightway.com/)のようなガイドはベストプラクティスの説明に役立ちます。あなたのユーザーパラメータは**正しく**エスケープされていません**(http://bobby-tables.com/php)、ここには重大な[SQLインジェクションバグ](http://bobby-tables.com/)があります。 – tadman

+1

あなたのテーブルセットフィールドではnullではありません。あなたのPHPチェックデータ.. if(empty($ name)||空($ email)||空($ views)|| empty($ advice)||空($ guide))die; – Cuchu

答えて

2

まず、くださいはあなたのコードにいくつかの健全性チェックを行います!誰かがあなたのデータベース全体を削除して今すぐあなたのデータベース全体を削除する可能性があります...

私は、誰かがフォームに何も入力せずに提出をクリックしていると考えています。

最初のいくつかのチェックを行います。すべてのフィールドが正しく記入されたことを確認するためにデータベースに送信される前に、

$mysqli = new mysqli("localhost", "my_user", "my_password", "database"); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connection failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

$name = $mysqli->real_escape_string($_POST['name']); 
$email = $mysqli->real_escape_string($_POST['email']); 
$views = $mysqli->real_escape_string($_POST['views']); 
$advice = $mysqli->real_escape_string($_POST['advice']); 
$guide = $mysqli->real_escape_string$_POST['guide']); 

// Check for null fields 
if(empty($name) || empty($email) || empty($views) || empty($advice) || empty($guide)) 
{ 
    print "Please fill in all fields!"; 
    // Show the form again here 
} 
else 
{ 
    $query = "INSERT INTO professionals(name,email,views,advice,guide)VALUES('$name','$email', '$views','$advice','$guide')"; 
    $mysqli->query($query); 
} 
+0

準備された文を参照してください – Strawberry

+0

これはおそらくOPを探してみる価値があります - 私は現在のベストプラクティスの背後にあるように私は数年のためにPHPを使用していない –

0

あなたは、データをチェックする必要があります。

if (!(empty($_POST['name']) || empty($_POST['email']) || empty($_POST['views']) || empty($_POST['advice']) || empty($_POST['guide']))){ 
    // do your stuff here 
} else { 
    // error stuff 
} 

また、this commentに述べたように、あなたはあなたのデータベース操作のためにPDOを使用してになります。

関連する問題