1

let me start by mentioning that i am very new to php i have this code

<?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);

?>

it is suppost to update a table but it returns Notice: Undefined index: phone in E:\EasyPHP-5.3.5.0\www\register\finishing\index.php on line 3 any help ?

4

4 回答 4

2

您必须始终检查数组是否具有您要求的索引。因此,在您的代码中使用 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 注入。

于 2013-06-01T11:40:55.620 回答
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);
}

或者像这样,activity 和 about 将是可选的:

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);
}

但同样,请注意这段代码中存在巨大的安全漏洞,所以不要将它放在生产服务器上。如果有人在表单中写了 ' 引号,它将被插入到 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 语法对你来说可能看起来更奇怪。

于 2013-06-01T11:29:23.653 回答
1

您可能想要调试您的代码,因为 PHP 通知不会阻止您的代码执行。

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

看看有什么 $_POST 参数进来做print_r($_POST)

编辑:

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

希望对您有所帮助:)

于 2013-06-01T11:14:48.443 回答
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);

?>

$_REQUEST如果值发送方法是 POST 或 GET OR COOKIES//可能是您使用 get 方法,将返回

于 2013-06-01T11:32:55.747 回答