【问题标题】:Special characters cause error while storing text to mysql database将文本存储到mysql数据库时特殊字符导致错误
【发布时间】:2015-06-25 04:11:52
【问题描述】:

我正在开发一个网站,可让您列出一处房产,并在您单击“列出房产”后立即查看其自定义房产信息页面。一切正常,除非您添加一个特殊字符,然后页面回显的错误是由 mysql_real_escape_string 失败触发的。即使使用特殊字符,我如何才能保存所有信息?

列表属性页:

截图:

PHP:

<?php
ob_start();
session_start(); 
require_once( "./inc/connect.inc.php" );

if(isset($_POST['list'])){
    $user_email = strip_tags(@$_SESSION['user_email']);
    $price = strip_tags(@$_POST['price']);
    $address = strip_tags(@$_POST['street']);
    $city = strip_tags(@$_POST['city']);
    $state = strip_tags(@$_POST['state']);
    $zip = strip_tags(@$_POST['zip']);
    $prop_type = strip_tags(@$_POST['prop_type']);
    $sqft = strip_tags(@$_POST['sqft']);
    $built = strip_tags(@$_POST['built']);
    $bedrooms = strip_tags(@$_POST['bedrooms']);
    $bathrooms = strip_tags(@$_POST['bathrooms']);
    $description = strip_tags(@$_POST['description']);
    $d = date("Y-m-d");

    $query = mysql_query("INSERT INTO properties VALUES('', '$address', '$address', '$price', '$address', 
                                                    '$city', '$state', '$zip', '$sqft', 
                                                    '$built', '$prop_type', '$bedrooms',
                                                    'bathrooms', '$description', '$d')");
    $query = mysql_query("INSERT INTO properties VALUES('', '$address', '$address', '$price', '$address', 
                                                    '$city', '$state', '$zip', '$sqft', 
                                                    '$built', '$prop_type', '$bedrooms',
                                                    'bathrooms', '$description', '$d')");
    $id = mysql_insert_id($db);
    header("Location: ../property_info/index.php?id=".$id);
    exit();
 }
?>

HTML:

                    <form action="#" method="POST">
                        <div class="form-group">
                            <div class="col-md-12">
                                <input type="text" class="form-control" name="price" placeholder="List Price">
                            </div>

                            <div class="col-sm-12">
                                <input type="text" class="form-control" name="street" placeholder="Street Address">
                            </div>
                            <div class="col-sm-6">
                                <input type="text" class="form-control" name="city" placeholder="City">
                            </div>
                            <div class="col-sm-2">
                                <input type="text" class="form-control" name="state" placeholder="State">
                            </div>
                            <div class="col-sm-4">
                                <input type="text" class="form-control" name="zip" placeholder="Zip Code">
                            </div>
                            <div class="col-sm-12">
                                <select class="col-sm-12" id="prop_type" name="prop_type" data-placeholder="Type of Property">
                                    <option value=""> </option>
                                    <option value="single">Single Family</option>
                                    <option value="condo">Condominium</option>
                                    <option value="townhouse">Townhouse</option>
                                    <option value="multi">Multi-Family</option>
                                    <option value="mobile">Mobile</option>
                                    <option value="land">Land</option>
                                </select>
                            </div>

                            <div class="col-md-6">
                                <input type="text" class="form-control" name="sqft" placeholder="Square Footage">
                            </div>

                            <div class="col-md-6">
                                <input type="text" class="form-control" name="built" placeholder="Year Built">
                            </div>

                            <div class="col-sm-12">
                                <select id="bedrooms" name="bedrooms" data-placeholder="Bedrooms">
                                    <option value=""> </option>
                                    <option value="0">0</option>
                                    <option value="1">1</option>
                                    <option value="2">2</option>
                                    <option value="3">3</option>
                                    <option value="4">4</option>
                                    <option value="5">5</option>
                                    <option value="6plus">6+</option>
                                </select>

                                <select id="bathrooms" name="bathrooms" data-placeholder="Bathrooms">
                                    <option value=""> </option>
                                    <option value="0">0</option>
                                    <option value="1">1</option>
                                    <option value="2">2</option>
                                    <option value="3">3</option>
                                    <option value="4">4</option>
                                    <option value="5plus">5+</option>
                                </select>
                            </div>

                            <div class="col-md-12">
                                <textarea class="form-control" name="description" rows="3" placeholder="Tell us about your house..."></textarea>
                            </div>
                            <!-- END ADDRESS FORM -->

                            <p>&nbsp;</p>
                            <p class="center">
                                <a href='www.urbanares.com/property_info/index.php'><button class="btn btn-warning" name='list'>List Property</button></a>
                            </p>
                        </div>
                    </form>

物业信息页面

截图:

PHP:

  <?php 
    $_SESSION['post_to'] = $_GET['id'];
    if(isset($_GET['id'])){
        $prop_id = mysql_real_escape_string($_GET['id'])or die("get error");
        $check = mysql_query("SELECT * FROM properties WHERE id='$prop_id'") or die("query error");

        if(mysql_num_rows($check)==1){
            $get = mysql_fetch_assoc($check);
        }else{
            print_r($check);
            echo "<h2>Property does not exist!</h2>";
            echo $check;
            echo $prop_id;
            exit();
        }
    }
    ?>

phpMyAdmin:

截图:

【问题讨论】:

  • 还在使用mysql_*函数? It's depreciated !
  • 这与字符集无关(尽管没有人应该再使用 Latin-1 变体了)。只是mysql_real_escape_string("0") 在布尔上下文中仍然为假,因此触发了or die() 表达式。 (是的,请阅读参数绑定。)
  • 是的,我已经尝试过该帖子。还是不行
  • Get['id'] 也不应该等于 0,它是自动计入的。即当没有任何特殊字符时,它链接到 property_info/index.php?id=55

标签: php mysql


【解决方案1】:

我通过使用 urlencode($description) 解决了这个问题,然后在属性页上回显时使用 urldecode($description)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2016-12-27
    • 2014-08-15
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多