php POST返回null结果

时间:2013-06-01 11:06:07

标签: php post easyphp

首先让我提一下我对php的新手 我有这个代码

<?php
$phone=$_POST['phone'];
 $tagline=$_POST['tagline'];
 $activity=$_POST['activity'];
$about=$_POST['about'];
$date=date(d-m-y);
$status='ok';
$con=mysqli_connect("localhost","root","","database");
mysqli_query($con,"UPDATE owners set    phone='$phone',tagline='$tagline',status='$status',activity='$activity',about='$about',date='$    date' where username='deiin'");
mysqli_close($con);

?>

支持更新表但返回 注意:未定义索引:第3行E:\ EasyPHP-5.3.5.0 \ www \ register \ finishing \ index.php中的手机 有什么帮助吗?

4 个答案:

答案 0 :(得分:1)

您可能希望调试代码,因为PHP-Notice不会阻止您的代码执行。

如果您的数据库未更新,您应该尝试mysql_error()查看您的mysql语法是否有错误。

看看有什么$ _POST参数进行 print_r($ _ POST)

编辑:

是(正如Lepidosteus所说):您的代码很容易受到mysql注入的攻击。看看here注射是什么,看here如何预防它们。

希望有所帮助:)

答案 1 :(得分:1)

尝试这样,现在,所有字段都是必需的,因此如果用户没有填写所有字段,则不会将数据存储到数据库。

但是在你的小型家庭应用上使用它,不要把它放在生产服务器上,因为它仍然非常容易受到注入。

if(isset($_POST['phone'])
   && isset($_POST['tagline'])
   && isset($_POST['activity'])
   && isset($_POST['about'])){

    $phone = $_POST['phone'];
    $tagline = $_POST['tagline'];
    $activity = $_POST['activity'];
    $about = $_POST['about'];

    $date=date('d-m-y');
    $status='ok';
    $con=mysqli_connect("localhost","root","","database");
    mysqli_query($con,"UPDATE owners 
                       SET phone='$phone', tagline='$tagline',status='$status',activity='$activity',about='$about',date='$date' 
                       WHERE username='deiin'");
    mysqli_close($con);
}

或者像这样,活动和约会是可选的:

if(isset($_POST['phone'])  
  && isset($_POST['tagline']){  

    $phone = $_POST['phone'];
    $tagline = $_POST['tagline'];

    if(isset($_POST['activity'])) $activity = $_POST['activity'];
    else $activity = '';

    if(isset($_POST['about'])) $about = $_POST['about'];
    else $about = '';

    $date=date('d-m-y');
    $status='ok';
    $con=mysqli_connect("localhost","root","","database");
    mysqli_query($con,"UPDATE owners 
                       SET phone='$phone', tagline='$tagline',status='$status',activity='$activity',about='$about',date='$date' 
                       WHERE username='deiin'");
    mysqli_close($con);
}

但是请注意,此代码中存在巨大的安全漏洞,因此请不要将其放在生产服务器上。如果某人在表单中写了'quote,它将被插入到sql查询中,它将是那里的结尾引号,因此无论后面的引用都会被解释为sql的命令。这样每个小丑都可以在一秒钟内删除整个数据库。使用mysqli_real_escape_string()或预处理语句

编辑: 如何使用mysqli_real_escape_string():

而不是例如$phone = $_POST['phone'];,将它包含在mysql_real_escape_string()中,如下所示:

$phone = mysql_real_escape_string( $_POST['phone'] );

不可能更简单,不是吗? :)

并记得在查询中引用每个人,就像你一样:

UPDATE owners SET phone=     ---> '$phone' <--- /*those quotes are 
important for it to work, remember to keep them there */

我不想解释预处理语句,因为程序语法很奇怪,而且OOP语法可能看起来更怪异。

答案 2 :(得分:1)

<?php
////////////you use////////
echo "<pre>";
print_r($_REQUEST);
echo "</pre>";
die("here");

$phone=$_POST['phone'];
 $tagline=$_POST['tagline'];
 $activity=$_POST['activity'];
$about=$_POST['about'];
$date=date(d-m-y);
$status='ok';
$con=mysqli_connect("localhost","root","","database");
mysqli_query($con,"UPDATE owners set    phone='$phone',tagline='$tagline',status='$status',activity='$activity',about='$about',date='$    date' where username='deiin'");
mysqli_close($con);

?>
如果值发送方法是POST或GET OR COOKIES //可能是您使用get方法

$_REQUEST将返回

答案 3 :(得分:1)

您必须始终检查数组是否具有您要求的索引。 因此,在代码中使用isset()函数,如下所示:

<?php
$phone = isset($_POST['phone']) ? $_POST['phone'] : null;
$tagline = isset($_POST['tagline']) ? $_POST['tagline'] : null;
$activity = isset($_POST['activity']) ? $_POST['activity'] : null;
$about = isset($_POST['about']) ? $_POST['about'] : null;
$date = date('d-m-y');
$status='ok';
$con=mysqli_connect("localhost","root","","database");
mysqli_query($con,"UPDATE owners set    phone='$phone',tagline='$tagline',status='$status',activity='$activity',about='$about',date='$    date' where username='deiin'");
mysqli_close($con);
?>

它有助于注意,但我强烈建议您使用PDO对象来查询DB,并使用mysqli_real_escape_string函数来逃避可能的SQL注入。