【问题标题】:PHP form/posting errorPHP表单/发布错误
【发布时间】:2012-09-04 23:46:22
【问题描述】:

好的,我的发布脚本有点问题。一切都很好,除了当我输入一个像撇号一样的短语时,例如“这是我的标题”不会​​发布,而“这是我的标题”会发布。不知道为什么会这样。也许我真的不知道条形标签,我该怎么办?当它不起作用时,我会收到底部错误消息

} else {
if(isset($_POST['what'])&&isset($_POST['when'])&&isset($_POST['where'])&&isset($_POST['details'])&&isset($_POST['sponsored_by'])&&isset($_POST['collegeId'])){

$what = nl2br(htmlspecialchars(strip_tags(stripslashes(trim($_POST['what'])))));

$where = nl2br(htmlspecialchars(strip_tags(stripslashes(trim($_POST['where'])))));

$when = nl2br(htmlspecialchars(strip_tags(stripslashes(trim($_POST['when'])))));

$sponsored_by = nl2br(htmlspecialchars(strip_tags(stripslashes(trim($_POST['sponsored_by'])))));

$details = nl2br(htmlspecialchars(strip_tags(stripslashes(trim($_POST['details'])))));
    $collegeId = intval($_POST["collegeId"]);
    if(isset($_SESSION['username'])){

$username = htmlspecialchars(strip_tags(stripslashes(trim(($_SESSION['username'])))));
        $query = "select id, Name from users where username='$username' and activated = 1";
        $doQuery = mysql_query($query);
        if(mysql_num_rows($doQuery)>0){
            $results = mysql_fetch_array($doQuery);
            $userName = $results['Name'];
            $email = $username;
            $id = $results['id'];
            $query = "insert into events values(NULL,$id,$collegeId,'$what','$when','$where','$details','$sponsored_by',NOW())";
            if(mysql_query($query)) header("Location: collegeInfo.php?college=$collegeId&message=added");
            else echo "Failed to create new Event!".$query;

【问题讨论】:

  • 我认为你应该开始阅读一些有关编程的文章,做一些教程——也许可以尝试一些框架来了解应用程序是如何工作的。 SO 不能很好地处理辅导 - 它更适合更精确的问题。看看laravel.com

标签: php mysql html forms


【解决方案1】:

你不要逃避你的查询。尝试至少使用addslashesmysql_real_escape_string 清理您的输入。所以stripslashes - 从行中删除反斜杠。使用addslashes添加它们,而不是在mysql查询之前删除。

老兄,mysql_query 在新的 php 版本中已弃用,请使用带有准备好的语句的 PDO。

【讨论】:

  • 我是新手,不知道你在那儿说了什么
  • 在插入查询之前,您必须检查输入。你做到了..但方式错误。 stripslashes - 从行中删除所有反斜杠。 addslashes - 在行中添加反斜杠,使其更安全地进一步插入 mysql 查询。在php.net/manual/function.mysql-real-escape-string.php 阅读有关消毒功能的更多信息
  • 关于 PDO - 阅读这本书。这很简单,相信我。仅使用示例。现在你正在使用非常不安全和旧的语法和方法。现在尝试学习新的。链接:php.net/manual/en/book.pdo.php
  • 好吧,当我插入它发布的代码时,它是这样发布的: Title\'s 这显然是代码应该做的我猜,我如何隐藏斜杠?以及如何使查询更安全。我还应该在我的用户名部分取出斜杠吗?感谢您的帮助,我会检查那个 pdo
  • +1 for PDO - @user1664386,为了所有安全的爱,请使用 PDO。
猜你喜欢
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 2012-02-06
  • 2012-12-24
  • 1970-01-01
相关资源
最近更新 更多