使用PHP提交之前发送表单

时间:2014-12-21 22:04:29

标签: php html mysql forms

当我在localhost(XAMPP)中运行该php时,在我按下提交按钮“bilgilersistemegönderilemedi”之前我直接得到该错误消息

所以我无法将信息发送到我的数据库。

<body>

<form  action="insert_pro.php" method="post" enctype="multipart/form-data">
    <div class="center_content">
      <div class="title_box">Insert New Product</div>
      <div class="prod_box_big">
        <div class="center_prod_box_big">
          <div class="product_img_big"> <!-- <a href="javascript:popImage('images/big_pic.jpg','Some Title')" title="header=[Zoom] body=[&nbsp;] fade=[on]"><img src="images/p3.jpg" alt="" border="0" /></a> -->

          </div>
          <div class="details_big_box">


          <!-- TITLE -->
            <div class="product_title_big" >Product Title :</div>
            <td><input type="text" name="title" required/></td>

            <!-- DESCRİPTİON -->
            <div class="product_title_big">Description : </div>
            <td><textarea name="descrip" cols="21" rows="5"/></textarea></td>

            <!-- PRICE -->
            <div class="product_title_big">Price :</div>
            <td><input type="text" name="price" required/></td>

            <!-- PHOTO -->
            <div class="product_title_big">Product Photo :</div>
            <td><input type="file" name="way" required/></td>

            <!-- NOTE -->
            <h1>IF YOU FINISHED FILLING INFORMATION OF THE PRODUCT CLICK ADD PRODUCT</h1>
            </div>

            <!-- BUTTON -->
            <input   type="submit" name="insert_post" value="ADD PRODUCT">

        </div>
      </div>
    </div>

</form>


</body>
</html>


<?php
$title=$_POST['title'];
$descrip=$_POST['descrip'];
$price=$_POST['price'];

if($price){//veri geldi ise sisteme giriyoruz
    //mysqle bağlanıyoruz
$ServerAd="localhost";//server ismini girin localde kurduysanız localhost girin.
$KAd="root";//kullanıcı adı
$KSifre="3306505";//kullanıcı şifresi
$VeriAd="shop";//veritabanı adı
$db=@mysql_connect($ServerAd,$KAd,$KSifre) or die(@mysql_err());//veri tabanına bağlanılıyor
$sec=@mysql_select_db($VeriAd);//veri tabanı seçiliyor
$ekle=mysql_query("insert into product (title,descrip,price) values ($title,$descrip,$price)");//veri tabanına veri giriliyor.
if($ekle)//veri girişi başarılı ise
echo "Sayın Yorumunuz sistemimize iletilmiştir.Teşekkürler";
else//veri girişi hatalı ise
echo "bilgiler sisteme gönderilemedi";
} ?>

1 个答案:

答案 0 :(得分:3)

您需要引用字符串值。但是,您可以使用SQL injection,因此我使用mysqli准备了一些语句。

旁注:将or die(mysql_error())添加到mysql_query()会发出语法错误信号。

<?php 
$link = new mysqli('localhost', 'root', 'password', 'db');
if ($link->connect_errno) {
    throw new Exception($link->connect_error, $link->connect_errno);
}

// Check that the expected value has been provided via a POST request
if (isset($_POST['insert_post'])) {


// now prepare an INSERT statement
if (!$stmt = $link->prepare('insert into product (title,descrip,price) VALUES (?,?,?)')) {
    throw new Exception($link->error, $link->errno);
}

// bind parameters
$stmt->bind_param('sss', $_POST['title'], $_POST['descrip'], $_POST['price']);

if (!$stmt->execute()) {
    throw new Exception($stmt->error, $stmt->errno);
    }

} // brace for (isset($_POST['insert_post']))

有关准备好的陈述的更多信息:

咨询the manual on mysqli with prepared statementsPDO with prepared statements


<强> N.B:

如果您仍然热衷于保留现有的MySQL API,请将其更改为:

VALUES ('".$title."','".$descrip."','".$price."')

并使用** stripslashes()&lt; =(请参阅旁注)和mysql_real_escape_string()

即:

$title = stripslashes($_POST['title']);
$title = mysql_real_escape_string($_POST['title']);

并为其他人做同样的事。

**旁注:我使用stripslashes()的原因是能够在诸如O'Neil之类的名称中添加撇号。而不是它在数据库中显示为O \'Neil。

它(stripslashes())与防止SQL注入无关,它只是一个附加选项。 mysql_real_escape_string()是有助于注射的,但是使用预处理语句是真正应该使用的;是使用mysqli_还是使用PDO API。

引用Halfer:

据我所知,如果magic quotes已自动转义,则您只需在包含撇号的名称上使用stripslashes()。由于这在PHP中不再可用,我将不再添加此类代码。像mysql_real_escape_string()这样的转义函数可以自行处理“O'Neil”。