2013-12-22 30 views
-1

,据我可以看到我的代码是健全不过,我不断收到一个错误 这是错误试图通过PHP编辑SQL,但不断收到错误


注意:未定义的变量:人 \ SQL \ modify.php上线

这里是我的代码..

<?php 
include 'includes/connection.php'; 

if (!isset($_POST['submit'])){ 
    $q = "SELECT * FROM people WHERE ID = $_GET[id]"; 
    $result = mysql_query($q); 
    $person = mysql_fetch_array($result);  
    } 
?> 
<h1>You are modifying A User</h1> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
Name<input type="text" name="inputName" value="<?php echo $person['Name']; ?>" /><br /> 
Description<input type="text" name="inputDesc" value="<?php echo $person['Description']; ?>" /> 
<br /> 
<input type="hidden" name="id" value="<?php echo $_GET['id']; ?>" /> 
<input type="submit" name="submit" value="Modify"/> 
</form> 
<?php 
if(isset($_POST['sumbmit'])) { 

$u = "UPDATE people SET `Name` = '$_POST[inputName]', `Description` = '$_POST[inputDesc]' WHERE ID = $_POST[id]"; 
    mysql_query($u) or die(mysql_error()); 

echo "User has been modify"; 
header("Location: index.php"); 

} 
?> 

任何想法或我只是盲?

+1

如果您的if语句运行,您只设置'$ person'。 – andrewsi

+0

对不起不休息.. – DigitalOutcast

+0

您使用$人来填充您的说明字段;但如果表单已经提交,那么您不查询数据库,因此没有定义“$ person”。 – andrewsi

回答

0
<?php 
include 'includes/connection.php'; 

// set $person veriable 
if (!isset($_POST['submit'])){ 
    $q = "SELECT * FROM people WHERE ID = $_GET[id]"; 
    $result = mysql_query($q); 
    $person = mysql_fetch_array($result);  
} 
// if form submit you use update and redirect 
else { 
    $u = "UPDATE people SET `Name` = '$_POST[inputName]', `Description` =  '$_POST[inputDesc]' WHERE ID = $_POST[id]"; 
    mysql_query($u) or die(mysql_error()); 

    //echo "User has been modify"; // this not need, bcz execute header('location') redirect you current page 
    header("Location: index.php"); 
    exit(); //use it after header location 
} 
?> 
<h1>You are modifying A User</h1> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
Name<input type="text" name="inputName" value="<?php echo $person['Name']; ?>" /><br /> 
Description<input type="text" name="inputDesc" value="<?php echo $person['Description']; ?>" /> 
<br /> 
<input type="hidden" name="id" value="<?php echo $_GET['id']; ?>" /> 
<input type="submit" name="submit" value="Modify"/> 
</form> 
+0

谢谢@Lastbyte这工作...... :)它的其他声明,我搞砸了......非常感谢你.. – DigitalOutcast

0

你只需要检查你是否真的有输出。

只是一个简单的例子:

if ($person): 
?> 
<h1>You are modifying A User</h1> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
Name<input type="text" name="inputName" value="<?php echo $person['Name']; ?>" /><br /> 
Description<input type="text" name="inputDesc" value="<?php echo $person['Description']; ?>" /> 
<br /> 
<input type="hidden" name="id" value="<?php echo $_GET['id']; ?>" /> 
<input type="submit" name="submit" value="Modify"/> 
</form> 
<?php 
endif; 

记住,总是验证您的输入输出,而且如果查询您尝试运行产生一个结果集。

+0

当我点击修改,我能够看到我可以修改,但是当我打sumbmit,我得到的错误..我得到的错误<?php回声$ person ['名称']; ?>和<?php echo $ person ['Description']; ?>对不起应该已经更清楚了 – DigitalOutcast

0

这里的问题:

<?php 
include 'includes/connection.php'; 

if (!isset($_POST['submit'])){ 
    $q = "SELECT * FROM people WHERE ID = $_GET[id]"; 
    $result = mysql_query($q); 
    $person = mysql_fetch_array($result);  
    } 
?> 

此时$人只设置如果表单尚未提交;但后来:

Name<input type="text" name="inputName" value="<?php echo $person['Name']; ?>" /><br /> 
Description<input type="text" name="inputDesc" value="<?php echo $person['Description']; ?>" /> 

无论如何,您正在使用它。如果表格已经提交,那么你会得到你所看到的警告。你需要做的是一样的东西:

if (isset($_POST['submit'])){ 
    $name = $_POST['name']; 
    $description = $_POST['description'] 
} else { 
    $q = "SELECT * FROM people WHERE ID = $_GET[id]"; 
    $result = mysql_query($q); 
    $person = mysql_fetch_array($result);  

    $name = $person['name']; 
    $description= $person['description']; 
    } 

然后:

Name<input type="text" name="inputName" value="<?php echo $name ?>" /><br /> 
Description<input type="text" name="inputDesc" value="<?php echo $description; ?>" /> 

变量现在设置两种方式。

一些其他的东西 - 你没有做任何错误检查,看看你的查询是否工作;如果查询失败,您的代码将继续执行。

其次,mysql_函数已被弃用,并将在某个点停止工作;您应该考虑转而使用mysqli_*或PDO。

+0

我刚刚在php dot net上看到了“MYSQLI_ *”的信息..我现在刚刚学习mysql_有没有关于mysqli的interweb上的任何好的信息。 – DigitalOutcast

+0

我建议使用PHP手册页:http://www.php.net/mysqli - 切换到mysqli函数比较容易,因为大部分函数都有相应的功能,所以涉及的重写次数较少。 – andrewsi

+0

谢谢...有一个愉快的假期! – DigitalOutcast

相关问题