2017-08-17 102 views
-1

在进行测试以查看我的数据库是否会通过表单字段接收用户名时,除非我回显出错信息,否则代码将不起作用。为什么是这样?我的目标是通过表单字段发送用户名,并在表单字段下的同一页上检索用户名列表。

我提交的用户名HTML,
PHP不提交没有echo语句的表单数据?

<section id="banner"> 
    <div class="content"> 
    <header> 
     <h2>Add Usernames Here</h2> 
     <form method="post"> 
     <br><input type="text" name="user_name"><br> 
     <input type="submit" value="Submit"> 
     </form> 
    </header> 
    </div> 

用于显示用户名:

<section id="five" class="wrapper style2 special fade"> 
<div class="container"> 
<header> 
<h2>Added Usernames</h2> 
<?php require 'post.php'; ?>        
</header> 
</div> 
</section> 

而且我post.php中的代码

<?php 
//connection 
$url = parse_url(getenv("CLEARDB_DATABASE_URL")); 
$server = $url["host"]; 
$username = $url["user"]; 
$password = $url["pass"]; 
$db = substr($url["path"], 1); 
$conn = new mysqli($server, $username, $password, $db); 
//test connection 
    if(!$conn) 
    { 
     echo 'not connected'; 
    } 

    if(!mysqli_select_db($conn,'heroku_cd6b3866e127c21')) 
    { 
     echo 'database not selected'; 
    } 
//insert username  
    $user_name = $_POST['user_name']; 
    $sql = "INSERT INTO store (user_name) VALUES ('$user_name')"; 

//test query  
    if(!mysqli_query($conn,$sql)) 
    { 
     echo 'not inserted'; 
    } 
    else { 
     echo 'inserted'; 
    } 

//echo all usernames  
mysqli_select_db($db,$conn); 
$sql2 = "SELECT * FROM store"; 

$mydata = mysqli_query('$sql2,$conn'); 

while($record = mysqli_fetch_array($mydata)){ 
    echo "<br>"; 
    echo $record['user_name']; 
} 
?> 

此代码的工作,直到我的if语句删除,检查连接。

回答

2

这是简单的例子,只有一个页面命名的index.php:

<form action="index.php" method="post"> 
    <br><input type="text" name="user_name"> 
    <br><input type="submit" value="Submit"> 
</form> 

<?php 
$username = $_POST["user_name"]; 
$link = mysqli_connect("127.0.0.1", "root", "", "db12"); 
mysqli_query($link, "INSERT INTO users (username) values ('$username')"); 


echo $username; 

$query = "SELECT username FROM users"; 

$result = mysqli_query($link, $query); 
    /* fetch associative array */ 
    while ($row = mysqli_fetch_array($result)) { 
     echo $row['username'] . "<br>"; 
    } 


/* close connection */ 
mysqli_close($link); 
?> 

在生产中的应用程序总是写插入单独的页面,并始终使用准备http://php.net/manual/en/mysqli.prepare.php

+0

我使用的需要,我仍然需要在表单字段中使用action =''?此外,用户名无需操作即可发送到数据库,但在删除我的if语句后不会发送。 – Pacified

+0

是的。只要点击提交按钮,就有页面调用什么可以做我们想做的事情。 – b2ok

+0

我不想被重定向到一个空白页面,我只是希望页面重新加载,并且用户名出现在列表中 – Pacified

1

您没有运行查询除了那些if语句之外的其他地方。

尝试增加$mysqli->query($sql)您的$sql

+0

或者mysqli_query($ conn,$ sql)如果您愿意。 – Blaise

+0

这个伎俩!但正如你所看到的,它不打印出user_name的内容? http://chatangu.tk/admin.php每次第一次运行似乎在数据库中创建2个空白用户。 – Pacified

+0

尝试删除单引号 $ mydata = mysqli_query('$ sql2,$ conn') – Blaise

0

声明下你仍然需要调用这些函数:

mysqli_select_db($conn,'heroku_cd6b3866e127c21') 

mysqli_query($conn,$sql) 

即使他们被包裹在if语句或不你仍然需要选择数据库并发送一个查询。但我不想这样做,我会考虑PDO。

http://php.net/manual/en/book.pdo.php

这些方法是已知的具有SQLI漏洞。

编辑

而且这一行有一个错误:

$mydata = mysqli_query('$sql2,$conn'); 

我认为它应该是:

$mydata = mysqli_query($conn,$sql2); 
+0

死我真的不担心太多vulnerablities因为我只存储名称,而不是人来登录用户名的实际,我希望能够加入他们,并让用户看按字母顺序排列。 – Pacified

+0

雅它仅仅是一个需要注意的,如果你使用的情况下,不直接采取从用户的输入,那么你可能是确定的大部分,但此行我的黑客侧面看起来不错,多汁: $ USER_NAME = $ _POST [ 'USER_NAME']; $ sql =“INSERT INTO store(user_name)VALUES('$ user_name')”; – Asleepace

+0

http://prntscr.com/g9rrj3任何想法为什么它的生成空白? – Pacified