当我在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=[ ] 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";
} ?>
答案 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 statements或PDO 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”。