首先让我提一下我对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中的手机 有什么帮助吗?
答案 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注入。