2015-08-23 45 views
-3

我看不出这个代码有什么问题?提交按钮 - 形式到MySQL

HTML

<form id="msform" method="post" type="submit" name="submit" action="oddaj.php"> 
     <!-- progressbar -->    
     <ul id="progressbar"> 
      <li class="active">Kontaktne informacije</li>     
      <li>Podatki o vozilu</li>     
      <li>Cena vozila</li>     
     </ul>    
     <!-- fieldsets -->    
     <fieldset> 
      <h2 class="fs-title">Oddaj vozilo v prodajo</h2> 
      <h3 class="fs-subtitle">Kontaktne informacije</h3> 
      <input type="text" name="ime" pattern="[a-žA-ž0-9]+" placeholder="Ime in priimek" required /> 
      <input type="text" name="telefonska" pattern="^\d{3}-\d{3}-\d{3}$" placeholder="Telefonska številka" /> 
      <input type="email" name="email" required placeholder="Email naslov" required /> 
      <input type="button" name="next" class="next action-button" value="Nadaljuj" /> 
     </fieldset>       
     <fieldset> 
      <h2 class="fs-title">Podatki o vozilu</h2> 
      <h3 class="fs-subtitle">Natančno posredujte podatke!</h3> 
      <input type="text" name="twitter" placeholder="Naslov, kjer se nahaja vozilo" /> 
      <input type="text" name="facebook" placeholder="Minimalna cena vozila" /> 
      <input type="text" name="gplus" placeholder="Izberite trajanje dražbe" /> 
      <input type="button" name="previous" class="previous action-button" value="Previous" /> 
      <input type="submit" form="msform" name="submit" class="submit action-button" value="Submit" /> 
     </fieldset>    
    </form>   

PHP

<?php 
/* Attempt MySQL server connection. Assuming you are running MySQL 
server with default setting (user 'root' with no password) */ 
$link = mysqli_connect("host", "username", "password", "database"); 

// Check connection 
if($link === false){ 
    die("ERROR: Could not connect. " . mysqli_connect_error()); 
} 

// Escape user inputs for security 
$ime = mysqli_real_escape_string($link, $_POST['ime']); 
$telefonska = mysqli_real_escape_string($link, $_POST['telefonska']); 
$email = mysqli_real_escape_string($link, $_POST['email']); 
$slika = mysqli_real_escape_string($link, $_POST['slika']); 

// attempt insert query execution 
$sql = "INSERT INTO oddaja (ime, telefonska, email) VALUES ('$ime', '$telefonska', '$email', '$slika')"; 
if(mysqli_query($link, $sql)){ 
    echo "Records added successfully."; 
} else{ 
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
} 

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

I`ve所做的一切。试着在同一页上提交(action =“”),POST,GET。 GET甚至没有改变URI。如果我访问PHP文件(用于提交),它将记录保存到数据库,但值为空。

+0

此一件事'<形式类型= “提交” 名称= “提交”'和使用上的POST方法GET阵列。编辑:啊,你编辑。Nice Stealth ;-) –

+0

然后3列和4值 –

+0

你会得到什么错误? – Jaylen

回答

0

让你开始像老板一样调试你的代码。

潜在错误的列表,可以occure

  • 是HTML标记是否有效?
  • PHP中的POST变量存在吗?
  • MySQLI连接是否成功?
  • SQL中是否有任何错误?

寻址错误

所以来检查的HTML标记你首先要熟悉HTML错误。如果你没有,那么谷歌的每一个元素,所以你了解他们,了解他们的属性,之后,如果你确信HTML标记是正确的,然后开始调试服务器端。

var_dump是一个伟大的快速查看事情的方法,如果您有任何问题使用它,如果使用正确,你应该解决大多数问题。

如果MySQLI connection不成功,那么您需要检查您的凭据和数据库名称。

如果在SQL中有任何错误,您应该会看到服务器抱怨此IF您已将error_reporting设置为正确。

你的代码是非常程序化的,你不使用预处理语句。 There are numerous questions and discussions regarding procedural vs oop,但底线重要的是了解如何使代码易于理解和易于维护。

我强烈建议你考虑prepared statements,因为通过这种方式,查询和数据分别发送到SQL服务器,并且这样做的好处是因为SQL注入问题的根源是代码和数据。 Here对此感谢@Your Common Sense。

这里是我对代码的贡献,它提供了使用预处理语句的更加面向对象的代码方式。

HTML

<form id="msform" method="post" type="submit" name="submit" action="oddaj.php"> 
    <!-- progressbar -->    
    <ul id="progressbar"> 
     <li class="active">Kontaktne informacije</li>     
     <li>Podatki o vozilu</li>     
     <li>Cena vozila</li>     
    </ul>    
    <!-- fieldsets -->    
    <fieldset> 
     <h2 class="fs-title">Oddaj vozilo v prodajo</h2> 
     <h3 class="fs-subtitle">Kontaktne informacije</h3> 
     <input type="text" name="ime" pattern="[a-žA-ž0-9]+" placeholder="Ime in priimek" required /> 
     <input type="text" name="telefonska" pattern="^\d{3}-\d{3}-\d{3}$" placeholder="Telefonska številka" /> 
     <input type="email" name="email" required placeholder="Email naslov" required /> 
     <input type="button" name="next" class="next action-button" value="Nadaljuj" /> 
    </fieldset>       
    <fieldset> 
     <h2 class="fs-title">Podatki o vozilu</h2> 
     <h3 class="fs-subtitle">Natančno posredujte podatke!</h3> 
     <input type="text" name="twitter" placeholder="Naslov, kjer se nahaja vozilo" /> 
     <input type="text" name="facebook" placeholder="Minimalna cena vozila" /> 
     <input type="text" name="gplus" placeholder="Izberite trajanje dražbe" /> 
     <input type="button" name="previous" class="previous action-button" value="Previous" /> 
     <input type="submit" form="msform" name="submit" class="submit action-button" value="Submit" /> 
    </fieldset>    
</form>  

PHP

// if the POST variables are set 
if (isset($_POST['ime']) && $_POST['telefonska'] && $_POST['email'] && $_POST['slika']) { 

    // Object oriented style 
    $ime = mysqli_real_escape_string($_POST['ime']); 
    $telefonska = mysqli_real_escape_string($_POST['telefonska']); 
    $email = mysqli_real_escape_string($_POST['email']); 

    // Object oriented style 
    $mysqli = new mysqli("host", "username", "password", "database"); 

    // If there is an error exit 
    if ($mysqli->connect_errno) { 
     printf("ERROR: Could not connect. %s\n", $mysqli->connect_error); 
     exit(); 
    } 

    // Prepare the statement 
    $stmt = $mysqli->prepare("INSERT INTO oddaja (ime, telefonska, email) VALUES (?,?,?)"); 
    // Bind the parameters 
    $stmt->bind_param($ime,$telefonska,$email); 
    // Execute the query 
    $stmt->execute(); 
    // Close the connection 
    $stmt->close(); 
} 
1

您在这两个表单标签有这个,你的提交按钮

type="submit" name="submit" 

那些需要从你的表单标签移除。

  • 这是相冲突的。

然后,您在查询中使用3列和4个值。

  • 您的查询中缺少$slika的列。

  • 我还注意到,在你的窗体中没有名称属性“slika”或匹配的元素。那一个人应该会投掷你的未定义索引slika通知。

另外,如果您的形式和PHP/MySQL的是同一个文件里,你将需要使用!empty()和/或isset()对你的接线柱阵列。无论哪种方式,最好检查空的领域。

如果是这样,您将得到未定义的索引通知。

即:

if(
    isset($_POST['submit']) 

    && !empty($_POST['ime']) 
    && !empty($_POST['telefonska']) 
    && !empty($_POST['email']) 
    && !empty($_POST['slika']) 
) 
{ 
// do something 
} 

else{ 
    echo "Something failed. Error reporting/logs will tell you."; 
} 

使用的是在您的处置的工具。

error reporting添加到您的文件的顶部,这将有助于发现错误。

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// rest of your code 

旁注:显示错误应该只在分期完成,并且从不生产。

  • var_dump();
  • print_r();

看到的是通过与否。


旁注:

mysqli_connect("host" - 如果host是不是代表值,那么就应该读作localhost。只是说。