2014-08-31 29 views
-1

我有我的索引代码,这基本上是出现的网页,如果用户是公开的,可以这样的CD数据库,但不能修改它,如果他们想要修改它们,他们必须注册或登录如果已经有一个帐户。我的问题是在我的发送代码中,虽然我已经登录了我的帐户,但是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

**危险**:您正在使用[an **过时的**数据库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 2014-08-31 09:57:17

+1

即时消息在这新,所以感谢您的意见 – natan 2014-08-31 10:02:23

回答

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

应该是:

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

同样,其它的文本区域应该被命名为cdartist不仅artist

<input><textarea>中的name属性定义了该字段的名称。然后将字段的数据以相应的名称发送到服务器。因此,如果您在PHP中使用name="title"发送数据但引用$_POST['cdtitle'],则数据将不会被发现,因为它位于$_POST['title']中。

+0

多数民众赞成在它,谢谢你! – natan 2014-08-31 10:01:31