-1

さて、このMySQLデータベースフォームがあり、それに検証を追加しようとしています. 2日間格闘した後、アドバイスが得られると思いました。ドロップダウンから選択した項目と、名、電話番号、電子メールがすべて必須であることを希望します。次に、データベースに入れる前に、名、姓、電話番号 (特別な形式である必要はありません)、電子メール、およびコメントのデータがすべて受け入れ可能な形式であることを確認したいと思います。これが私がこれまでに持っているものです:

 <?php 
include('inc_header.php');
if(isset($_POST['add']))
 {
 require('dbcon.php');
 if(! get_magic_quotes_gpc() )
{
$Id = addslashes ($_POST['Id']);
$List = addslashes ($_POST['List']);
$Firstname = addslashes ($_POST['Firstname']);
$Lastname = addslashes ($_POST['Lastname']);
$Phone = addslashes ($_POST['Phone']);
$Email= addslashes ($_POST['Email']);
$Calltime = addslashes ($_POST['Calltime']);
$Comment = addslashes ($_POST['Comment']);

}
else
{
$Id = $_POST['Id'];
$Date = $_POST['Date'];
$List = $_POST['List'];
$Firstname = $_POST['Firstname'];
$Lastname = $_POST['Lastname'];
$Phone = $_POST['Phone'];
$Email = $_POST['Email'];
$Calltime = $_POST['Calltime'];
$Comment = $_POST['Comment'];
 }

 $error = '';

 //put chosen function here
  function validate_Firstname($input, $pattern = "/([A-Za-z0-9])")
 {
    return !preg_match($pattern, $input);
   }

  function validate_Phone($input, $pattern = "/([A-Za-z0-9])")
 {
    return !preg_match($pattern, $input);
  }
 function isValidEmail( $Email ){
    return filter_var( $Email, FILTER_VALIDATE_EMAIL );
 }

  //get values and validate each one as required
  $List = mysql_real_escape_string($_POST['List']);
     if(!$List){ $error .= "Please choose one<br />"; }

  $Firstname = mysql_real_escape_string($_POST['Firstname']);
    if(!$Firstname){ $error .= "First name is required<br />"; }

//get values and validate each one as required
  $Lastname = mysql_real_escape_string($_POST['Lastname']);
    if(!$Lastname){ $error .= "Last name is required<br />"; }

  //repeat for each field
  $Email = mysql_real_escape_string($_POST['Email']);
    if(!isValidEmail($Email)){ $error .= "The email entered is invalid<br />"; }

  //and so on...

  if(!$error){
     //add insert into database code here

 $sql = "INSERT INTO contacts ".
   "(`Id`,`Date`,`List`,`Firstname`,`Lastname`,`Phone`,`Email`,`Calltime`,`Comment`)".
 "VALUES'$Id,','$Date','$List','$Firstname','$Lastname','$Phone','$Email','$Calltime','$Comment')     ";
 mysql_select_db('hmintcwa_contacts');
 $retval = mysql_query( $sql, $conn );
 if(! $retval )
 {
  die('Could not enter data: ' . mysql_error());
 }
 echo "Entered data successfully<br /><br /><a href=contactsadd.php><font       color=#000000>Back</font></a>\n";
 mysql_close($conn);
}
else
 {

 ?>

 <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" name="ContactForm">
 <table bgcolor="#000000" width="500" cellpadding="5" cellspacing="1" border="0">
 <input type="hidden" name="Id" id="Id">
 <tr>
 <td bgcolor="#e9e9e9" align="right">Requested Info</td>
 <td bgcolor="#ffffff" align="left"><select name="List">
 <option value="0" > Please Choose One </option>
 <option value="Market Analysis" > Market Analysis </option>
 <option value="Consultation" > Consultation </option></select></td></tr>
  <tr>
 <td bgcolor="#e9e9e9" align="right">Date</td>
 <input name="Date" type="hidden" id="Date" value="<? print(Date("l F d, Y")); ?>" />
<td bgcolor="#ffffff" align="left"><? print(Date("l F d, Y")); ?></td>
</tr>
 <tr>
 <td bgcolor="#e9e9e9" align="right">Firstname</td>
 <td bgcolor="#ffffff" align="left"><input name="Firstname" type="text" size="20" id="Firstname"></td></tr>
 <tr>
 <td bgcolor="#e9e9e9" align="right">Lastname</td>
 <td bgcolor="#ffffff" align="left"><input type="text" name="Lastname"  size="20" id="Lastname"></td>
 </tr>
 <tr>
 <td bgcolor="#e9e9e9" align="right">Phone</td>
 <td bgcolor="#ffffff" align="left"><input type="text" name="Phone" size="20" id="Phone"></td></tr>
 <tr>
<td bgcolor="#e9e9e9" align="right">Email</td>
 <td bgcolor="#ffffff" align="left"><input type="text" name="Email"  size="20" id="Email"></td></tr>
 <tr>
 <td bgcolor="#e9e9e9" align="right">Preferred Calltime</td>
 <td bgcolor="#ffffff" align="left"><input type="text" name="Calltime"  size="20" id="Calltime">  &nbsp;&nbsp; If none put N/A</td></tr>
 <tr>
 <td bgcolor="#e9e9e9" align="right">Comment</td>
 <td bgcolor="#ffffff" align="left"><textarea name="Comment" cols="40" rows="8" id="Comment"></textarea></td></tr>
 <tr>
 <td bgcolor="#e9e9e9" align="right">&nbsp;</td>
 <td bgcolor="#ffffff" align="center"><br>
 <input name="add" type="submit" id="add" value="Add Contact"><input type="reset" name="Reset" value="Clear Form"><input type=button value="Cancel" onClick="history.go(-1)"><br>&nbsp;
 </td>
 </tr>
 </table>
 </form>
 <br>&nbsp;</center>
 <?php
 }
  ?>
   </body>
       </html>

これまでのところ、エラーメッセージを追跡し続けています。私は優しいことを学ぼうとしているフォーマットを許してください.

4

2 に答える 2

2

クエリ引数が逆になっているため、mysqli_ を使用する必要があります。これが正しい順序です。

$retval = mysqli_query($conn, $sql);

mysqli_query ドキュメント

于 2013-11-09T01:52:39.400 に答える
0

このステートメントには終了ブラケットが必要です: ( if(!$error){)

編集}あなたが見逃していたのは、実際にif(isset($_POST['add']))は魔法の引用符ではなく、の閉じ括弧です。ごめん!

     //and so on...

    if(!$error)
    {
      //add insert into database code here

       // this probably won't run right... 
       // you're missing a ( after the word values...
       // insert into tablename (id, name, stuff) values (1,'gloomy','stuff); 

       // this part of your statement is not correct:  "VALUES'$Id,','$Date',
       // and the commas are off, too.

       $sql = "INSERT INTO contacts ".
               "(`Id`,`Date`,`List`,`Firstname`,`Lastname`,`Phone`,`Email`,`Calltime`,`Comment`)".
               "VALUES'$Id,','$Date','$List','$Firstname','$Lastname','$Phone','$Email','$Calltime','$Comment')     ";

       // print your SQL here to make sure it is correct.  
       // copy and paste it to run it directly in the DB. if it won't run there
       // it won't run here
       print $sql."<br/>"; 

       mysql_select_db('hmintcwa_contacts');
       $retval = mysql_query( $sql, $conn );

       if(! $retval )  {
          die('Could not enter data: ' . mysql_error());
       }

       echo "Entered data successfully<br /><br /><a href=contactsadd.php><font       color=#000000>Back</font></a>\n";
       mysql_close($conn);

    } // <-------- you're missing this closing bracket

} // this ends the statement for  if(isset($_POST['add']))  { .... 
else
{
    // REMOVE this... or else it will print the world else somewhere
    // i put this here to debug...
    print "else<br/>";

?>

コードをフォーマットすると非常に役立ちます

編集: コードを見てみると、いたるところに小さな問題がたくさんあります。私は意地悪をしようとしているわけではありません。私が言っているのは...コードを小さな断片に分割して、すべての部分をまとめて組み立てる前に、すべての部分が単独でコンパイルされ、適切に動作することを確認してみませんか? これは、一度に取り組むことがたくさんあります。必要なときに変数 (特に配列) をダンプしてみてください。新しいチャンクを書き込むたびに、それが正しく機能することを確認し、他のすべてが引き続き正しく機能することを確認してください。次に、先に進みます...そのように問題を切り分ける方が簡単です。


これは私にとってはうまくいきます。pdo を使用します。 ああ、SQL インジェクションについてそれほど心配する必要はありません。これでほぼ完全に処理されます。すべてのことと同じように、物事を回避する方法は常にありますが、魔法の引用符をチェックする必要はありません。何もエスケープする必要はありません。パラメータ化を行うと、すべてが処理されます。

編集:だから...コードを書くとき...たくさんのものを書いてから、すべてが機能するかどうか確認しないでください。数行書きます。テスト。もう少し書いてください。テスト。新しいものが動作することを確認してください。古いものがまだ機能することを確認してください。もう少し書く。どうやってそんなに多くの小さな問題を抱えてここまでたどり着いたのか、まったくわかりません。私は意地悪をしようとしているわけではありません。ただし、コードを小さなチャンクで記述します。論理さえ。常にすべてをもう一度テストしてから次に進みます。

そして、デバッグステートメントをそこに残しました...print_r($array)と は、var_dump(variable)そのものがどのように設定されているか、値がどこから来ているか、どの時点ですべてが保持されているか、それらをどのように使用するか、どこに配置するかを確認できるようにします。それは今奇妙なものを印刷します。コメントアウトするか、削除してください。

関数のチュートリアルが他にもたくさんあることは理解していmysql_ますが、それらは古く、まったく安全ではありません。PDO の使用に問題がある場合は、StackOverflow に戻ってエラー、問題、およびコードを提示し、「mysql_ 関数が悪いことはわかっていますが、pdo を習得するのは難しい」という免責事項を書いてください。それははるかに良いです。

これらは重要な PDO ページです:

そしてコード...

<?php

ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);

// include('inc_header.php');


function validate_Firstname($input, $pattern = "/([A-Za-z0-9])") {
   return !preg_match($pattern, $input);
}

function validate_Phone($input, $pattern = "/([A-Za-z0-9])") {
   return !preg_match($pattern, $input);
}

function isValidEmail($Email) {
   return filter_var($Email, FILTER_VALIDATE_EMAIL);
}

// ====================================================================================
// ====================================================================================

if (!empty($_POST)) {
   print "<pre>This is your \$_POST array \n\n".print_r($_POST,true)."</pre>"; 
}

$error = '';

if (isset($_POST['add'])) 
{
   // require('dbcon.php');
   $conn = new PDO('mysql:host=localhost;dbname=test', 'root', '');

   // what if the array index ['whatever'] doesn't exist?  errors.  
   // so we need to check and make sure it is set... then assign.  
   // this also gives us a blank default value, which is nice.... 
   $id        = isset($_POST['Id'])        ? $_POST['Id']        : 'NULL'; 
   $date      = isset($_POST['Date'])      ? $_POST['Date']      : '';  
   $list      = isset($_POST['List'])      ? $_POST['List']      : '';  
   $firstname = isset($_POST['Firstname']) ? $_POST['Firstname'] : ''; 
   $lastname  = isset($_POST['Lastname'])  ? $_POST['Lastname']  : ''; 
   $phone     = isset($_POST['Phone'])     ? $_POST['Phone']     : ''; 
   $email     = isset($_POST['Email'])     ? $_POST['Email']     : '';  
   $calltime  = isset($_POST['Calltime'])  ? $_POST['Calltime']  : '';  
   $comment   = isset($_POST['Comment'])   ? $_POST['Comment']   : '';   

   if (!$list) {
      $error .= "Please choose one<br />";
   } 
   if (!$firstname) {
      $error .= "First name is required<br />";
   } 
   if (!$lastname) {
      $error .= "Last name is required<br />";
   } 
   if (!isValidEmail($email)) {
      $error .= "The email entered is invalid<br />";
   }

   var_dump($error); 

   if (!$error) 
   {     
      $stmt = $conn->prepare("INSERT INTO contacts (id, date, list, firstname, lastname, phone, email, calltime, comment) \n". 
                              " VALUES (:id, :date, :list, :firstname, :lastname, :phone, :email, :calltime, :comment) "); 

      $success = $stmt->execute(array(':id'=>$id, ':date'=>$date, ':list'=>$list, ':firstname'=>$firstname, 'lastname'=>$lastname,  
                                      ':phone'=>$phone, ':email'=>$email, ':calltime'=>$calltime, ':comment'=>$comment)); 

      if (!$success) 
      { 
          echo "\nPDO::errorInfo():\n"; 
          print "<pre>".print_r($dbh->errorInfo(),true)."/<pre>"; 
      }  
      else 
      {
         print "it worked!  the new row's ID is ".$conn->lastInsertId()."...!!!<br/>";
      }

      echo "Entered data successfully<br/><br/>";


   } // end of  if (!$error) { ... }  
   else 
   {  
      print "$error<br/>";
   }

   echo "<a href='contactsadd.php' style='font-color=#000000'>Back</a>\n";

} // end of if(isset($_POST['add']))  { ... }
else
{ 

// ====================================================================================
// ====================================================================================
?>
 <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" name="ContactForm">
 <table bgcolor="#000000" width="500" cellpadding="5" cellspacing="1" border="0">
 <input type="hidden" name="Id" id="Id">
 <tr>
 <td bgcolor="#e9e9e9" align="right">Requested Info</td>
 <td bgcolor="#ffffff" align="left"><select name="List">
 <option value="0" > Please Choose One </option>
 <option value="Market Analysis" > Market Analysis </option>
 <option value="Consultation" > Consultation </option></select></td></tr>
  <tr>
 <td bgcolor="#e9e9e9" align="right">Date</td>
 <input name="Date" type="hidden" id="Date" value="<?php print(Date("l F d, Y")); ?>" />
<td bgcolor="#ffffff" align="left"><?phpprint(Date("l F d, Y")); ?></td>
</tr>
 <tr>
 <td bgcolor="#e9e9e9" align="right">Firstname</td>
 <td bgcolor="#ffffff" align="left"><input name="Firstname" type="text" size="20" id="Firstname"></td></tr>
 <tr>
 <td bgcolor="#e9e9e9" align="right">Lastname</td>
 <td bgcolor="#ffffff" align="left"><input type="text" name="Lastname"  size="20" id="Lastname"></td>
 </tr>
 <tr>
 <td bgcolor="#e9e9e9" align="right">Phone</td>
 <td bgcolor="#ffffff" align="left"><input type="text" name="Phone" size="20" id="Phone"></td></tr>
 <tr>
<td bgcolor="#e9e9e9" align="right">Email</td>
 <td bgcolor="#ffffff" align="left"><input type="text" name="Email"  size="20" id="Email"></td></tr>
 <tr>
 <td bgcolor="#e9e9e9" align="right">Preferred Calltime</td>
 <td bgcolor="#ffffff" align="left"><input type="text" name="Calltime"  size="20" id="Calltime">  &nbsp;&nbsp; If none put N/A</td></tr>
 <tr>
 <td bgcolor="#e9e9e9" align="right">Comment</td>
 <td bgcolor="#ffffff" align="left"><textarea name="Comment" cols="40" rows="8" id="Comment"></textarea></td></tr>
 <tr>
 <td bgcolor="#e9e9e9" align="right">&nbsp;</td>
 <td bgcolor="#ffffff" align="center"><br>
 <input name="add" type="submit" id="add" value="Add Contact"><input type="reset" name="Reset" value="Clear Form"><input type=button value="Cancel" onClick="history.go(-1)"><br>&nbsp;
 </td>
 </tr>
 </table>
 </form>
 <br>&nbsp;</center>
 <?php
 }
 ?> 
于 2013-11-09T01:48:22.530 に答える