2015-07-18 69 views
1

长时间阅读器,第一次张贴海报。我是PHP新手,我有一个我一直在工作的页面。现在我有数据库连接运行良好,我的SELECT语句给我需要的信息。我的问题是双重的(这个帖子后,或许更多; 设置您的移相器畏缩):疑难解答HTML和PHP/MySQL

  1. 在一个点上,我有INSERT工作,但它突然停了下来,没有扭捏的量,似乎把回来了。我已经验证了INSERT语句在没有变量的单独PHP文件中工作。

  2. 当我有INSERT工作,每页刷新将复制最后一项。我尝试了几种方法来清除$ _POST数组,但我认为我的一些实验会导致问题#1。

<?php 
 
$dbhost = "REDACTED"; 
 
$dbuser = "REDACTED"; 
 
$dbpass = "REDACTED"; 
 
$dbname = "guest_list"; 
 
// Create a database connection 
 
$connection = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname); 
 
// Test if connection succeeded 
 
if(mysqli_connect_errno()) { 
 
    die("DB's not here, man: " . 
 
     mysqli_connect_error() . 
 
     " (" . mysqli_connect_errno() . ")" 
 
    ); 
 
} 
 
// replacement for mysql_real_escape_string() 
 
function html_escape($html_escape) { 
 
    $html_escape = htmlspecialchars($html_escape, ENT_QUOTES | ENT_HTML5, 'UTF-8'); 
 
    return $html_escape; 
 
} 
 

 
// Posting new data into the DB 
 
if (isset($_POST['submit'])) { 
 
    $first = html_escape($_POST['first']); 
 
    $last = html_escape($_POST['last']); 
 
    $contact = html_escape($_POST['contact']); 
 
    $associate = html_escape($_POST['associate']); 
 

 
    $insert = "INSERT INTO g_list ("; 
 
    $insert .= "g_fname, g_lname, g_phone, g_association) "; 
 
    $insert .= "VALUES ('{$first}', '{$last}', '{$contact}', '{$associate}')"; 
 
    $insert .= "LIMIT 1"; 
 
    $i_result = mysqli_query($connection, $insert); 
 
// I have verified that the above works by setting the varialble 
 
// in the VALUES area to strings and seeing it update 
 
} 
 

 
$query = "SELECT * "; 
 
$query .= "FROM g_list "; 
 
$query .= "ORDER BY g_id DESC"; 
 
$q_result = mysqli_query($connection, $query); 
 

 
?> 
 

 
<!DOCTYPE html> 
 
<html lang="en"> 
 
    <head> 
 
    <title>Guest List</title> 
 
    <link href="guest.css" media="all" rel="stylesheet" type="text/css" /> 
 
    </head> 
 
    <body> 
 
    <header> 
 
     <h1>REDACTED</h1> 
 
     <h2>Guest Registry</h2> 
 
    </header> 
 
    <div class="container"> 
 
     <div class="registry"> 
 
     <form name="formup" id="main_form" method="post"> 
 
      <fieldset> 
 
      <legend>Please enter your name into the registry</legend> 
 
      <p class="first">First Name: 
 
       <input type="text" name="first" value="" placeholder="One or more first names" size="64"></p> 
 
      <p class="last">Last Name: 
 
       <input type="text" name="last" value="" placeholder="Last name" size="64"></p> 
 
      <p class="contact">Phone Number or Email: 
 
       <input type="text" name="contact" value="" placeholder="" size="32"></p> 
 
      <p class="associate">Your relation? 
 
       <input type="text" name="associate" value="" placeholder="" size="128"></p> 
 
      <p class="submit"> 
 
       <input type="submit" name="submit" title="add" value="submit" placeholder=""></p> 
 
      </fieldset> 
 
     </form> 
 
     </div> 
 
    </div> 
 

 
    <h3>Guest List:</h3>    
 
    <table> 
 
     <tr> 
 
     <th>Firstname(s)</th><th>Lastname</th> 
 
     <th>Phone or Email</th><th>Association</th> 
 
     </tr> 
 

 
     <?php while($guest = mysqli_fetch_assoc($q_result)) { 
 
    echo "<tr>" . "<td>" . $guest["g_fname"] . "</td>" 
 
    . "<td>" . $guest["g_lname"] . "</td>" 
 
    . "<td>" . $guest["g_phone"] . "</td>" 
 
    . "<td>" . $guest["g_association"] . "</td>" . "</tr>"; 
 
} ?> 
 

 
    </table> 
 
    <footer> 
 
     <div>Copyright <?php echo date("Y"); ?>, REDACTED, LLC.</div> 
 

 
     <?php 
 
if (isset($connection)) { 
 
    mysqli_close($connection); 
 
} 
 
     ?> 
 
    </footer> 
 
    </body> 
 
</html>

+1

你没有做任何错误您的查询检查,你只是认为他们会工作。检查你的错误日志。 –

+0

你可以检查你的插入查询是否存在这样的错误:$ i_result = mysqli_query($ connection,$ insert)或trigger_error($ connection-> error。“[$ insert]”);' – Shehary

回答

3

这两条线将失败:这里

$insert .= "VALUES ('{$first}', '{$last}', '{$contact}', '{$associate}')"; 
$insert .= "LIMIT 1"; 

两个问题,都与第二行:

  • 之间没有空格), LIMIT:)LIMIT 1是你的代码;
  • LIMIT 1在INSERT不允许....
+0

已经解决了问题1 ...谢谢! – BigTime

+0

任何人有关于如何防止浏览器重新发送表单输入数据的想法?我曾尝试添加 未设置($ _ POST); $ _POST = array(); 到if语句的底部无济于事。 – BigTime

+0

您无法重置POST,因为浏览器会再次生成它。我将使用一个单独的php脚本来处理表单(所以只需在两个脚本中拆分页面,并在窗体处理完成后使用window.location来加载表单)。 –