未定义的索引 - 即使使用Isset If语句

时间:2013-12-24 11:49:36

标签: php sql database

任何人都可以告诉我为什么我的代码在这里得到一个未定义的索引错误。 之后我在项目的其他部分使用if(isset)条件使用了此设置 研究我原来的Undefined Index错误和ISSET解决了我的问题。但由于某种原因它不能在这里工作,我不明白为什么。

此表单正在输入输入:

<form action="addAlbum_Processed.php" method="POST">
<p>Enter artistID of Artist<input type="number" name="artist_id" maxlength="2" size="2"></p>
<p>Enter name of Album to be created<input type="text" name="album_name" size="20"></p>
<input type="submit" name="submit" value="submit"></form>

此页面正在处理表单输入并更新数据库中的相册表:

<?php    

$connection = mysql_connect('localhost','root','')              
or die(mysql_error());
echo "Connected to php Server <br>";   


or die("Could not select assi2 database");
echo "Connected to assi2 database <br>";


if(isset($_POST['submit']))
{
$album_name = $_POST['album_name'];
$artist_id = $_POST['artist_id'];
}

$album_name = $_POST['album_name'];
$artist_id = $_POST['artist_id'];

$sqlQuery = "SELECT * FROM albums WHERE album = '{$album_name}'";

$result = mysql_query($sqlQuery, $connection) or die("Selection Query Failed !!!");

if (mysql_num_rows($result) != 0)        
{
    header ("Location: Album_Exists.html");
}

else
{
    $sqlInsert = "INSERT INTO albums (ArtistID, Album, delete_marker) 
                  VALUES ('{$artist_id}','{$album_name}','delete_marker = 0')";

    $result = mysql_query($sqlInsert, $connection) or die("Selection Query     Failed !!!");

    header ("Location: addAlbum_Processed.php");
}


mysql_close($connection);

?>

我看不出我错在哪里。此致,TW

5 个答案:

答案 0 :(得分:1)

这是你问题的一个很小的例子:

if(isset($_POST['submit']))
{
$album_name = $_POST['album_name'];
$artist_id = $_POST['artist_id'];
}

您可以在使用其他字段之前检查是否已发布submit表单字段。到现在为止还挺好。 (我会检查将要使用的字段,但至少你正在检查一些东西。)

但是:

$album_name = $_POST['album_name'];
$artist_id = $_POST['artist_id'];

您仍然使用字段

更重要的是......如果没有发布表单,您不会试图插入内容。因此,一旦某个流氓蜘蛛访问您的页面,您最终会在数据库中找到一张空白相册。

而且甚至没有提到你还在使用mysql_query的事实。

答案 1 :(得分:0)

if(isset($_POST['submit']))
{
$album_name = $_POST['album_name'];
$artist_id = $_POST['artist_id'];
}

|的 _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ____ |第一

$album_name = $_POST['album_name'];
$artist_id = $_POST['artist_id'];

|的 _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ___ |重复

你是两次获取变量。只有条件就足够了。也可以对这两个变量使用isset。

if(isset($_POST['submit']))
    {
    if isset($_POST['album_name'])
    $album_name = $_POST['album_name'];
    if isset($_POST['artist_id'])
    $artist_id = $_POST['artist_id'];
    }

答案 2 :(得分:0)

尝试 addalbam_process.php

中的内容
<?php    

$connection = mysql_connect('localhost','root','')              
or die(mysql_error());
echo "Connected to php Server <br>";   


or die("Could not select assi2 database");
echo "Connected to assi2 database <br>";


if(isset($_POST['submit']))
{
        if(isset($_POST['albam_name']){$album_name = $_POST['album_name']};
        if(isset($_POST['artist_id']){$artist_id = $_POST['artist_id']};
}

$sqlQuery = "SELECT * FROM albums WHERE album = '{$album_name}'";

$result = mysql_query($sqlQuery, $connection) or die("Selection Query Failed !!!");

if (mysql_num_rows($result) != 0)        
{
    header ("Location: Album_Exists.html");
}

else
{
    $sqlInsert = "INSERT INTO albums (ArtistID, Album, delete_marker) 
                  VALUES ('{$artist_id}','{$album_name}','delete_marker = 0')";

    $result = mysql_query($sqlInsert, $connection) or die("Selection Query     Failed !!!");

    header ("Location: addAlbum_Processed.php");
}


mysql_close($connection);

请使用MYSQLI或PDO来防止SQL INJECTION

答案 3 :(得分:0)

此处</form>丢失了 并尝试这样的事情

if(isset($_POST['submit']))
{
$album_name = $_POST['album_name'];
$artist_id = $_POST['artist_id'];
}

答案 4 :(得分:0)

一些事情。

此行'delete_marker = 0'最有可能读为

VALUES ('{$artist_id}','{$album_name}','0')

VALUES ('{$artist_id}','{$album_name}',0)

当我读到它'delete_marker = 0'时,您试图在delete_marker(ArtistID, Album, delete_marker)

中实际写入此值

或者,您尝试使用WHERE delete_marker = 0条款,该条款不能在INSERT INTO中使用,而是UPDATE或者SELECT而不是。

你的if(isset($_POST['submit']))条件语句应该包装你的整个代码,而不仅仅是你的2个表单变量,因为它基本上说&#34;好的,分配这2个变量,然后忽略其余的如果没有设置。&#34;

另外,你重复这两个输入变量。

$album_name = $_POST['album_name'];
$artist_id = $_POST['artist_id'];

(我将整个代码包装在if(isset($_POST['submit']))条件语句中,顺便说一下。

附注:如果您遇到数据库连接问题,请改用:

$connection = mysql_connect('localhost', 'root', '');
if (!$connection) {
    die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';

PHP 试一试:

旁注:如果此行失败VALUES ('{$artist_id}','{$album_name}', 0),请在0周围加{!1}}

'0'