jQuery - 通过PHP保存到SQL

This is probably easy for you guys, but I can't understand it. I want to save the filename of an image to it's own row in the SQL base.

Basically, I log on to the site where I have my own userID. And each user has its own column for background images. And the user can choose his own image if he wants to. So basically, when the user clicks on the image he wants, a jquery click event occurs and an ajax call is made to a php file which is supposed to take care of the actual update. The row for each user always exist so there's only an update of the data that's necessary.

First, I collect the filename of the css property 'background-image' and split it so I get only the filename. I then store that filename in a variable I call 'filename' which is then passed on to this jQuery snippet:

    $.ajax({
        url: 'save_to_db.php',
        data: filename,
        dataType:'Text',
        type: 'POST',
        success: function(data) {
            // Just for testing purposes.
            alert('Background changed to: ' + data);
   }   

  });

And this is the php that saves the data:

<?php 
require("dbconnect.php");

$uploadstring = $_POST['filename'];

mysql_query("UPDATE brukere SET brukerBakgrunn = '$uploadstring' WHERE brukerID=" .$_SESSION['id']);
mysql_close();  
?>

Basically, each user has their own ID and this is called 'brukerID' The table everything is in is called 'brukere' and the column I'm supposed to update is the one called 'brukerBakgrunn'

When I just run the javascript snippet, I get this message box in return where it says:

Background changed to:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/clients/client2/web8/web/save_to_db.php:1) in /var/www/clients/client2/web8/web/access.php on line 3

This is dbconnect.php

<?php
$con = mysql_connect("*****","******","******");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }  

mysql_select_db("****", $con);
require("access.php");
?>

And this is access.php:

<?php
// Don't mess with ;)
session_start();

if($_REQUEST['inside']) session_destroy();

session_register("inside");
session_register("navn");
if($_SESSION['inside'] == ""){
    if($_POST['brukernavn'] and $_POST['passord']){
    $query = "select * from brukere where brukerNavn='" . $_POST['brukernavn'] . "' and brukerPassord = md5('" . $_POST['passord'] ."')";
    $result = mysql_query($query);      
    if(!$result) mysql_error();
    $rows = @mysql_num_rows($result);
        if($rows > 0){
    $_SESSION['inside'] = 1;
    $_SESSION['navn'] = mysql_result($result,"navn");
    $_SESSION['id'] = mysql_result($result,"id");
    Header("Location: /");
    } else {
    $_SESSION['inside'] = 0;
    $denycontent = 1;
    }
    } else {
    $denycontent = 1;
    }
}

if($denycontent == 1){
include ("head.php");
print('   
<body class="bodylogin">
   content content content      
</body>
');
include ("foot.php");
exit;
}
?>

7个回答

<?php
//require_once("dbconnect.php");

$uploadstring = $_REQUEST['filename'];

$db_pswd = 'xxx-xxx-xxx';
$db_user = 'john_doe';
$db_table = 'my_table';

$con = mysql_connect( 'localhost' , $user , $pswd );
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db( $db_table , $con );

mysql_query(" UPDATE brukere SET brukerBakgrunn = '".$uploadstring."'
WHERE brukerID = '".$_SESSION['id']."' ");

mysql_close($con);
?>

I think you need to use a fresh code! yours is compromised! ;-))

dongliufa6380
dongliufa6380 好吧,我认为我需要的是了解这一切是如何运作的。 我的意思是,在登录网站之前,代码的第一部分基本上也是我所做的。 然后,在我登录后,连接是否仍然打开? 我是否需要再次提供连接属性?
10 年多之前 回复



大安全问题!</ em> </ p>

您没有引用和 转义MySQL查询的输入。 我可以很容易地破解结束,堆叠另一个查询,并删除整个数据库!</ p>

另外,你错过了 mysql_query()</ code末尾的结束括号 >。</ p>
</ div>

展开原文

原文

Big security issue!

You didn't quote and escape the input to the MySQL query. I could easily hack the end, stack another query, and delete your entire database!

Also, you're missing the ending parenthesis at the end of mysql_query().

dongshai1944
dongshai1944 使用PDO或mysqli函数! Imho你应该去PDO和准备好的声明,所以你没有SQL注入麻烦。 此外,所有mysql_ *函数都已弃用,将被删除。
7 年多之前 回复
dougu1952
dougu1952 你需要在输入周围加上引号(以允许空格)然后反斜杠转义任何引号,以便黑客无法“退出”字符串并形成自己的MySQL语句。
10 年多之前 回复
ds2128629
ds2128629 从未听说过引用并逃避输入。 可以轻松修复吗?
10 年多之前 回复
dougong1031
dougong1031 所以? 甚至$ uploadString也没有引用+转义; 我很容易破解那一个。
10 年多之前 回复
dongtiran7769
dongtiran7769 为什么会话? uploadstring来自帖子数据。
10 年多之前 回复
dtlab08822
dtlab08822 您将如何将查询放入其Session变量ID? 这可能是检查和没有污点。
10 年多之前 回复



原始错误是由于需求行上缺少分号造成的。</ p>

正如其他人所拥有的那样 说,你需要了解sql注入和使用占位符。 摆脱使用提交数据的习惯,不使用占位符或首先转义。</ p>
</ div>

展开原文

原文

The original error is due to a missing semicolon on the require line.

As others have said, you need to learn about sql injection and using placeholders. Get out of the habit of using submitted data without using placeholders or escaping first.

duanbi2760
duanbi2760 我甚至没有习惯! 我真的只是摸索着,试图学习所有这一切。
10 年多之前 回复

Remove the empty line before session_start():

?>

<?php
dongliao6491
dongliao6491 没有做任何事情,因为在session_start()之前没有空行; 编辑:对不起,我明白你的意思:)修正了一个。
10 年多之前 回复
mysql_query("UPDATE brukere SET brukerBakgrunn = $uploadstring WHERE brukerID=" .$_SESSION['id'] ."";

should be

mysql_query("UPDATE brukere SET brukerBakgrunn = $uploadstring WHERE brukerID=" .$_SESSION['id']);

closing parenthesis is missing and the quotes ("") are useless.

Read about SQL injection in order to make your application safe.

EDIT:

<?php
 require("dbconnect.php")
?>

<?php

This code sends (the part between ?> and <?php) a newline to the output (it's the same as echo " ") which is not allowed if you want to write to a session variable consequently.

douchengjue9892
douchengjue9892 你的意思是移动session_start(); 或者在save_to_db.php中添加另一个? 我无法从access.php移动session_start()可以吗? 因为我首先需要访问index.php。 还是我误解了?
10 年多之前 回复
doutiaosu2310
doutiaosu2310 尝试移动session_start(); 在require之前(“dbconnect.php”);
10 年多之前 回复
douliang9057
douliang9057 尝试删除会话销毁线,并没有改变任何东西。 我要尝试从代码中包含的文件中删除?>。 编辑:access.php中的第3行实际上只是“session_start();”
10 年多之前 回复
duanjiao6730
duanjiao6730 if($ _ REQUEST ['inside'])session_destroy(); - 警告信息提到了这一行,所以试着把它留下来看看会发生什么。
10 年多之前 回复
douyu7210
douyu7210 ?> < - 不要在文件末尾使用这些标记(在你的情况下从dbconnect.php和access.php中删除它们) - 在这些标记之后你可能会有一些意外的输出。
10 年多之前 回复
dongwu9170
dongwu9170 刚刚更新:)
10 年多之前 回复
douchen9855
douchen9855 向我们展示您的dbconnect.php脚本(没有凭据),也许我们将能够帮助您。
10 年多之前 回复
douruyun8153
douruyun8153 好的,现在我加了';' 在require dbconnect.php之后并在变量周围添加单引号。 现在再次出现“无法发送会话缓存限制器”。 这非常令人困惑。
10 年多之前 回复
doushuzd3033
doushuzd3033 更新brukere SET brukerBakgrunn = $ uploadstring应该是UPDATE brukere SET brukerBakgrunn ='$ uploadstring'。 没有撇号它不是mysql的有效字符串(它如何知道什么是字符串以及什么是sql语法的一部分?)
10 年多之前 回复
ds12093213
「已注销」 require(“dbconnect.php”)< - 在命令后你错过了分号。
10 年多之前 回复
donglang2010
donglang2010 伙计,我对语法很困惑.. Thanx,我会试一试! :)编辑:实际上没有改变任何东西。 我仍然得到完全相同的错误消息。 在同一条线上。
10 年多之前 回复
dongxing2015
dongxing2015 $ uploadstring =($ _POST ['filename']); - 我不确定你用括号包装变量的原因是什么。 $ uploadstring = $ _POST ['filename']; 应该可以。
10 年多之前 回复
dongmu1989
dongmu1989 啊! 好的,所以这删除了该错误消息并给了我另一个:p检查我更新的第一篇文章
10 年多之前 回复
doudou1438
doudou1438 正如我在编辑的答案中所写的那样,从代码中删除额外的?> <?php部分。 我希望它会有所帮助。
10 年多之前 回复
duanpasi6287
duanpasi6287 好的,我更新了第一篇文章。 我从ajax方法得到了不同的消息。 它是关于hos它无法发送会话缓存限制器,已经发送的标头。 而且数据也没有更新。 如果我从php文件中删除'require(“dbconnect.php”),我从ajax获得的所有内容都不算什么。 所以它看起来像是需要的。
10 年多之前 回复
dsp1836
dsp1836 合作太快:-)
10 年多之前 回复
doubanduo7620
doubanduo7620 +1,我编辑修复你的错字,并想评论注射。 但是你已经把注射物放进去并且意外地恢复了我的矫正;-)
10 年多之前 回复



你忘记了mysql_query行中的结束')'。</ p>

  mysql_query(  “UPDATE brukere SET brukerBakgrunn = $ uploadstring WHERE brukerID =”。$ _ SESSION ['id']); 
</ code> </ pre>

你不需要。“” 您的查询结束。</ p>
</ div>

展开原文

原文

you forgot the closing ')' in your mysql_query line !

mysql_query("UPDATE brukere SET brukerBakgrunn = $uploadstring WHERE brukerID=" .$_SESSION['id'] );

You don't need the ."" at the end of your query too.



  require(“dbconnect.php”)
</ code> </ pre>

应该是</ p>

  require(“dbconnect.php”); 
</ code> </ pre>
</ div>

展开原文

原文

require("dbconnect.php")

should be

require("dbconnect.php");

duanri1985
duanri1985 如果我这样做,则会再次显示有关“无法发送会话缓存限制器”的相同错误消息。
10 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐