2013-12-24 3 views
0

Может ли кто-нибудь сказать мне, почему я получаю ошибку Undefined Index в моем коде здесь. Я использовал эту настройку, используя условие if (isset) в других частях моего проекта после того, как изучил мои оригинальные ошибки Undefined Index и ISSET исправил мои проблемы. Но по какой-то причине он не работает, и я не понимаю, почему.Неопределенный индекс - Даже с 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

+0

'mysql_query' является устаревшим. Посмотрите на mysqli или PDO. – cHao

+2

[** Пожалуйста, не используйте 'mysql_ *' функции в новом коде **) (http://bit.ly/phpmsql). Они больше не поддерживаются [и официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). См. [** розовая коробка **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. Если вы выберете PDO, [здесь хороший учебник] (http://j.mp/PoWehJ). – h2ooooooo

+0

Этот '' delete_marker = 0'' не имеет смысла, если что-то, что должно читаться как 'VALUES ('{$ artist_id}', '{$ album_name}', 0)' или 'VALUES ('{$ artist_id } ',' {$ album_name} ',' 0 ') 'Плюс, избавьтесь от своего второго' $ album_name = $ _POST [' album_name ']; $ artist_id = $ _POST ['artist_id']; ' –

ответ

1

Это крошечный пример вашей проблемы:

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

Вы проверяете, есть лиПеред использованием других полей было опубликовано поле формы. Все идет нормально. (Я хотел бы проверить для полей, которые будут использоваться, но, по крайней мере, вы проверяете что-то.)

Но тогда:

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

Вы можете использовать поля все равно.

Более того ... вы не пытаетесь вставить материал, если форма не отправляется. Поэтому в любое время, когда какой-то мошенник-паук посещает вашу страницу, вы получаете пустой альбом в своей базе данных.

И это даже не упоминание о том, что вы все еще используете mysql_query.

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']; 
    } 
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

0

здесь </form> отсутствует и попробовать что-то вроде этого

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

hi meddy, находится в исходном файле. я пропустил его при копировании и вставке. извинения и хорошее место – user3115396

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 переменные, а затем проигнорируйте остальные, если они НЕ установлены».

Плюс, вы повторяете эти 2 входных переменных.

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

(я обернул весь код внутри if(isset($_POST['submit'])) условного оператора, кстати

Side Примечание:. Если у вас возникли проблемы подключения к БД, используйте вместо этого:

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

PHP Задайте вопрос:

Sidenote: Если эта строка не удалась VALUES ('{$artist_id}','{$album_name}', 0) положить цитаты aroun д 0, как в '0'

<?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']; 

$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}', 0)"; // or add quotes around the zero 

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

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

} // closing brace for if(isset($_POST['submit'])) 

mysql_close($connection); 

?> 
Смежные вопросы