0

私は2つのフィールドを持つフォームに取り組んでいます。1つはコードで、もう1つは名前です。データベース内の既存のコードをチェックする検証があります。コードのクエリは正常に機能しているように見えますが、特に小文字の場合、名前に対しては同じことが機能しません。誰か助けてもらえますか?これが私のコードです:

<?php
session_start();
if (!isset($_SESSION["username"])) {
    header("Location: unauthorize_access.php");
}

require("includes/dbconnect.php");

if (isset($_POST['save'])) {

    $code   = $_POST["code"];
    $name   = $_POST["name"];


 {     
        mysql_query("INSERT INTO `country`(code, `name`)
            Values
                   ('$code', '$name')") or die(mysql_error());  

        print '<script type="text/javascript">';
        print 'alert("RECORDS ADDED SUCCESSFULLY")';
        header('refresh: 1; country.php');
        PRINT '</script>';
    }
}



?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Country</title>
<link rel="stylesheet" type="text/css" href="form2/view.css" media="all">
<script type="text/javascript" src="form2/view.js"></script>
<script type="text/javascript" src="form2/calendar.js"></script>
<script type="text/javascript">

  function checkForm()
  {
   if(country.code.value == "") {
      alert("Error: Code cannot be Empty!");
      country.code.focus();
      return false;
     }


   if(country.name.value == "") {
      alert("Error: Name cannot be Empty!");
      country.name.focus();
      return false;
     }


 }

</script>
<script type="text/javascript" src="chk/jquery-1.2.6.min.js"></script>

<SCRIPT type="text/javascript">
<!--


pic1 = new Image(16, 16); 
pic1.src = "loader.gif";

$(document).ready(function(){

$("#code").change(function() { 

var code = $("#code").val();

if(code.length >= 2)
{
$("#status").html('<img src="loader.gif" align="absmiddle">&nbsp;Checking availability...');

    $.ajax({  
    type: "POST",  
    url: "check_con.php",  
    data: "code="+ code,  
    success: function(msg){  

   $("#status").ajaxComplete(function(event, request, settings){ 

    if(msg == 'OK')
    { 
        $("#code").removeClass('object_error'); // if necessary
        $("#code").addClass("object_ok");
        $(this).html('&nbsp;<img src="tick.gif" align="absmiddle">');
    }  
    else  
    {  
        $("#code").removeClass('object_ok'); // if necessary
        $("#code").addClass("object_error");
        $(this).html(msg);
    }  

   });

 } 

  }); 

}
else
    {
    $("#status").html('<font color="red">The code should have at least <strong>2</strong> characters.</font>');
    $("#code").removeClass('object_ok'); // if necessary
    $("#code").addClass("object_error");
    }

});

});

//-->
</SCRIPT>
<SCRIPT type="text/javascript">
<!--


pic1 = new Image(16, 16); 
pic1.src = "loader.gif";

$(document).ready(function(){

$("#code").change(function() { 

var code = $("#code").val();

if(code.length >= 2)
{
$("#status").html('<img src="loader.gif" align="absmiddle">&nbsp;Checking availability...');

    $.ajax({  
    type: "POST",  
    url: "check_con.php",  
    data: "code="+ code,  
    success: function(msg){  

   $("#status").ajaxComplete(function(event, request, settings){ 

    if(msg == 'OK')
    { 
        $("#code").removeClass('object_error'); // if necessary
        $("#code").addClass("object_ok");
        $(this).html('&nbsp;<img src="tick.gif" align="absmiddle">');
    }  
    else  
    {  
        $("#code").removeClass('object_ok'); // if necessary
        $("#code").addClass("object_error");
        $(this).html(msg);
    }  

   });

 } 

  }); 

}
else
    {
    $("#status").html('<font color="red">The code should have at least <strong>2</strong> characters.</font>');
    $("#code").removeClass('object_ok'); // if necessary
    $("#code").addClass("object_error");
    }

});

});

//-->
</SCRIPT><SCRIPT type="text/javascript">
<!--


pic1 = new Image(16, 16); 
pic1.src = "loader.gif";

$(document).ready(function(){

$("#name").change(function() { 

var code = $("#name").val();

if(code.length >= 0)
{
$("#stat_2").html('<img src="loader.gif" align="absmiddle">&nbsp;Checking availability...');

    $.ajax({  
    type: "POST",  
    url: "check_con.php",  
    data: "name="+ name,  
    success: function(msg){  

   $("#stat_2").ajaxComplete(function(event, request, settings){ 

    if(msg == 'OK')
    { 
        $("#name").removeClass('object_error'); // if necessary
        $("#name").addClass("object_ok");
        $(this).html('&nbsp;<img src="tick.gif" align="absmiddle">');
    }  
    else  
    {  
        $("#name").removeClass('object_ok'); // if necessary
        $("#name").addClass("object_error");
        $(this).html(msg);
    }  

   });

 } 

  }); 

}
else
    {
    $("#stat_2").html('<font color="red"><strong>The name cannot be empty</strong></font>');
    $("#name").removeClass('object_ok'); // if necessary
    $("#name").addClass("object_error");
    }

});

});

//-->
</SCRIPT>
</head>
<body id="main_body" >

    <img id="top" src="form2/top.png" alt="">
    <div id="form_container">

        <h1><a>Country</a></h1>
        <form id="country" class="appnitro" enctype="multipart/form-data" method="post" onsubmit="return checkForm()">
                    <div class="form_description">
        <h2>Country</h2>

        </div>
                    <table border ="0px" width="100%">
                        <tr>
                            <td><label class="description" for="element_1">Code</label></td><td><input id="code" name="code"  type="text" maxlength="6"  Placeholder="Please enter a code" value=""/></td><td width="400" align="left"><div id="status"></div></td>
                        </tr>
                        <tr>
                            <td><label class="description" for="element_1">Name</label></td><td><input id="name" name="name" size="40" type="text" maxlength="40" Placeholder="Please enter a name" value=""/></td><td width="400" align="left"><div id="stat_2"></div></td>

                        </tr>
                        <tr>
                            <td></td><td ><input type="submit" name="save" value="Save"></td>
                        </tr>
                    </table>
                </form>

これが私のphpコードです。コードフィールドでは正常に機能しますが、名前では機能しません。

<?php
$dbHost     = 'localhost'; // usually localhost
$dbUsername = 'root';
$dbPassword = '';
$dbDatabase = 'pts_root';

$db = mysql_connect($dbHost, $dbUsername, $dbPassword) or die ("Unable to connect to Database Server.");
mysql_select_db ($dbDatabase, $db) or die ("Could not select database.");
if(isSet($_POST['code']))
{
$code = $_POST['code'];

$sql_check = mysql_query("SELECT * FROM country WHERE code='".$code."'") or die(mysql_error());

if(mysql_num_rows($sql_check))
{
echo '<font color="red">The code <STRONG>'.$code.'</STRONG> is already exist.</font>';
}
else
{
echo 'OK';
}

}

?>
<?php
$dbHost     = 'localhost'; // usually localhost
$dbUsername = 'root';
$dbPassword = '';
$dbDatabase = 'pts_root';

$db = mysql_connect($dbHost, $dbUsername, $dbPassword) or die ("Unable to connect to Database Server.");
mysql_select_db ($dbDatabase, $db) or die ("Could not select database.");
if(isSet($_POST['name']))
{
$name = $_POST['name'];

$sql_check = mysql_query("SELECT * FROM country WHERE UPPER(`name`)='".$name."'") or die(mysql_error());
if(mysql_num_rows($sql_check))
{
echo '<font color="red">The name <STRONG>'.$name.'</STRONG> is already exist.</font>';
}
else
{
echo 'OK';
}

}

?>
4

3 に答える 3

0

変化する

$name = $_POST['name'];

$name = strtoupper($_POST['name']);

したがって、大文字の入力と大文字のフィールドを比較しています。

于 2013-01-25T06:49:31.573 に答える
0

私はこの特定のセクションを見ています:

$sql_check = mysql_query("SELECT * FROM country WHERE UPPER(`name`)='".$name."'") or die(mysql_error());
if(mysql_num_rows($sql_check))

コードの残りの部分をすべて読み、テスト ケースを理解しようとせずに、MySQL が「大文字と小文字を区別しない」照合を使用できることを知っておくと役立つ場合があります。

UPPER 関数は格納された値を大文字に変換しますが、照合で大文字と小文字が区別されない場合、比較には実際には影響しません。

BINARY 演算子の使用を検討することをお勧めします。

SELECT * FROM country WHERE BINARY UPPER(`name`)= 'FOO'

http://dev.mysql.com/doc/refman/5.5/en/charset-binary-op.html

MySQL で照合を確認する簡単な方法の 1 つは、次のとおりです。

SHOW VARIABLES LIKE 'collation%'

次のような値が表示される場合があります。

utf8_general_ci
latin1_swedish_ci  

照合名の最後で、これ_ciを「大文字と小文字を区別しない」照合として識別します。これは、基本的に「ABC」=「abc」が TRUE と評価されることを意味します。

照合は、個々のテーブルおよび列レベルでも指定できます。

詳細については、MySQL リファレンス http://dev.mysql.com/doc/refman/5.5/en/charset.htmlを参照してください。

注: php 5 と mysqli では、SET namesクエリを使用せずに、mysqli_set_charset.

http://php.net/manual/en/mysqli.set-charset.php

于 2013-01-25T06:59:51.030 に答える
0

を使用して行うこともできますlike

SELECT * FROM country WHERE `name` like '$name'

お役に立てれば

于 2013-01-25T07:01:20.497 に答える