2014-08-31 2 views
-1

기본적으로 표시되는 페이지 인 색인 코드가 있습니다. 사용자가 공용 인 경우 수정할 수 없으므로 수정해야합니다. 등록하거나 로그인해야 할 경우 이미 계정이 있습니다. 내 문제는 내 계정에 이미 로그인되어 있지만 (사용자 테이블이 만들어지고 사용자의 세부 정보가 삽입되는 방식으로 삽입되어 있지만 CD에 대한 새로운 세부 정보가 테이블에 삽입되지 않는 곳)). 그것은 사용자 이름과 아티스트를 게시하지 않습니다. 내가 값을 볼 변수를 에코 때 나는 정의되지 않은 변수 오류를 얻을. 어떤 도움이라도 대단히 감사하겠습니다.PHP 코드에서 정의되지 않은 변수 오류

인덱스

<?php 
include 'header.php'; 

if (isset($_SESSION[ 'username' ])) { 
    ?> 
    <h2>New cd</h2> 
    <form action="send.php" method="post"> 
     <div class="text"> 
      Artist <br/> 
      <textarea name="artist"></textarea> 
     <br/> 
      Title <br/> 
      <textarea name="title"></textarea> 
     </div> 
     <input type="submit" value="OK" class='submit' /> 
    </form> 
    <?php 
} 
else { 
?> 
    <p> 
     To modify the database, <a href="login.php">login</a>. 
    </p> 
    <p> 
     To create a new account, <a href="register.php">register</a>. 
    </p> 
    <?php 
} 

어떤 이유로 내가이 파일의 나머지 부분을 업로드 어차피하지만 사용자가 볼 수있는 로그인되어있는 경우 기본적으로는, CDS 용의 세부 테이블을 보여줍니다 하시나요?>

사용자 이름 열은 공개되어있는 경우 CD 아티스트 및 제목 열만 볼 수 있습니다.

전송 코드

<?php 
include 'prelude.php'; 

if (isset($_SESSION[ 'username' ]) && isset($_POST[ 'cdartist' ])) { 
    $cdartist = $_POST[ 'cdartist' ]; 
    $cdtitle= $_POST['cdtitle']; 
    $userid=$_SESSION['userid']; 

    $res=mysql_query(
     " SELECT * 
     FROM cds 
     WHERE cdartist='".$cdartist."' AND cdtitle='".$cdtitle."';" 
    ); 
    if (mysql_num_rows($res)!=0){ 
     mysql_query(
      "DELETE FROM cds 
      WHERE cdartist='".$cdartist."' AND cdtitle='".$cdtitle."' AND userid='".$userid."';"); 
     header ('Location: index.php'); 
    } 
    else{ 
     mysql_query(
      "INSERT INTO cds 
      SET 
       cdartist = '" . $cdartist . "', 
       cdtitle = '". $cdtitle . "', 
       userid = '" . $userid . "';" 

     ); 
    } 
    header('Location: index.php'); 
} 
else { 
    ?> To have this right you need to login. <?php 
} 

>

+1

위험 ** ** [** 구식 ** 데이터베이스 API] (http://stackoverflow.com/q/12859942/19068)를 사용하고 있으며 [최신 대체] (http : // php.net/manual/en/mysqlinfo.api.choosing.php). 또한 ** [SQL 주입 공격] (http://bobby-tables.com/) **에 현대적인 API를 사용하면 쉽게 방어 할 수 있습니다 ** (http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)을 사용하십시오. – Quentin

+1

메신저로 이것에 새, 그래서 조언을 주셔서 감사합니다 – natan

답변

2
<textarea name="title"></textarea> 

가 있어야한다 :

<textarea name="cdtitle"></textarea> 

마찬가지로, 다른 텍스트 영역 이름을 지정해야합니다 cdartist 및뿐만 아니라 artist.

<input><textarea>name 속성은 필드의 이름을 정의합니다. 그런 다음 해당 필드의 데이터가 해당 이름의 서버로 전송됩니다. 따라서 name="title"으로 데이터를 보내고 PHP에서는 $_POST['cdtitle']을 참조하면 데이터가 발견되지 않습니다. $_POST['title']에 있기 때문입니다.

+0

그게, 고마워요! – natan