4

ユーザーが送信する登録フォームがあり、 isset($_POST) を使用してデータが送信され、フォーム入力ボックスに入力されたものがあるかどうかを確認します。そうでない場合は、else に送信され、関数に送信されて、ユーザーが登録フォームに戻り、不足しているフォームを完成させます。何らかの理由で、正しく動作していません。

これが私のチェックコードです------

function returnBack(){

    header("Location:register.php");
    exit;

}

if(isset($_POST['myusername']))
{
    $myusername = $_POST['myusername'];
}
else
{
    returnBack();   
}
if(isset($_POST['mypassword']))  {
    $mypassword=$_POST['mypassword'];

}
else{   

    returnBack();
}
if(isset($_POST['myemail']))  {

    $myemail=$_POST['myemail'];
}
else{

    returnBack();
}
if(isset($_POST['myname']))  {

    $myname=$_POST['myname'];
}
else{

    returnBack();
}
if(isset($_POST['mylastname'])){

    $mylastname=$_POST['mylastname'];

}
else{

    returnBack();
}
/////////////////////////////////////////////////////////////*******CONNECT TO SERVER ******************************************************************/
try {  
  # MySQL with PDO_MYSQL  
  $DBH = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);  
  $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

}  
catch(PDOException $e) { 
    echo "I'm sorry, I'm afraid I can't do that.";  
    file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);   
}
////////////////////////////////////////////////////////////***********INSERT REGISTER DATA INTO DB ***************************************************************/
//$encrypt_password = md5($mypassword);

$insertdata = $DBH->prepare("INSERT INTO members (username, password, email, firstname, lastname ) VALUES ('$myusername','$mypassword','$myemail','$myname','$mylastname')");
$insertdata->execute();
echo "success";

$DBH = null; 

ここにフォームセクションがあります ------------------------------

<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<form name="register" method="post" action="insertnewmem.php">
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td colspan="3"><strong>Registration Form </strong></td>
</tr>
<tr>
<td width="78">Username</td>
<td width="6">:</td>
<td width="294"><input name="myusername" type="text" id="myusername" ></td>
</tr>
<tr>
<td>Password</td>
<td>:</td>
<td><input name="mypassword" type="text" id="mypassword"></td>
</tr>
<tr>
<td>Email</td>
<td>:</td>
<td><input name="myemail" type="text" id="myemail"></td>
</tr>
<tr>
<td>First Name</td>
<td>:</td>
<td><input name="myname" type="text" id="myname"></td>
</tr>
<tr>
<td>Last Name</td>
<td>:</td>
<td><input name="mylastname" type="text" id="mylastname"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><input type="submit" name="Submit" value="Register"></td>
</tr>
</table>
</td>
</form>
</tr>
</table>

更新しました - - - - - - - - - - - - - - - - - - - - - - -

申し訳ありませんが、関数 returnBack() をスキップし、フォームが正しく入力されていない場合でも、それを db に挿入するだけです。

4

2 に答える 2

11

!empty()の代わりに試してください isset()。これは、null、false、0、または空の文字列 '' 以外の場合にのみ true と評価されます。空の文字列が送信されている可能性があります。

于 2012-08-15T21:16:57.703 に答える
5

他の人が回答を投稿しましたが、その理由を説明させてください。

isset() は、値が設定されているかどうかではなく、値が設定されているかどうかを確認します。フォームを送信すると、各入力の値として空の文字列が渡されます。

通常、次を使用してこれを確認します。

if(isset($_POST['variable']) && $_POST['variable'] !== "")

最初の部分は変数が存在することを確認し (2 番目の条件がエラーをスローしないようにするため)、2 番目の条件は文字列が空でないことを確認します。

于 2012-08-15T21:19:52.770 に答える