PDA

View Full Version : سوال: مشکل در ارسال محتوای Html به فایل Php



mehran6764
جمعه 07 آذر 1393, 19:34 عصر
این کد صفحه Html است




<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!DOCTYPE HTML>
<html>
<body>

<form action="insert.php" method="post">
rrslink: <input type="text" name="rrslink"><br>
sitename: <input type="text" name="sitename"><br>
type: <input type="text" name="cate"><br>



<input type="submit">
</form>

</body>
</html>



و این پایینی هم کد PHP




<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<?php
$servername = "localhost";
$username = "Myuser";
$password = "Mypass";
$dbname = "Mydb";

//echo $_POST["rrslink"]."-------->".$_POST["sitename"]."---------->".$_POST["$cate"];
$rrslink=$_POST["rrslink"];
$sitename=$_POST["sitename"];
$cate= intval($_POST["cate"]);

try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


$sql = "INSERT INTO rrsTB(rrslink,sitename,type)


VALUES ($rrslink,$sitename,$cate)";


// use exec() because no results are returned
$conn->exec($sql);

echo "New record created successfully";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}

$conn = null;
?>




هر چقدر سرچ کردم ، فکر کردم نتونستم دلیل این خطا رو پیدا کنم




INSERT INTO rrsTB(rrslink,sitename,type) VALUES (http://www.tabnak.ir/fa/rss/allnews,tabnak,0)
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '://www.tabnak.ir/fa/rss/allnews,tabnak,0)' at line 4


اولش فکر می کردم چون تابع intval رو برای تبدیل رشته به عدد نزاشتم این خطا رو می ده درست نشد ، بعدش فکر کردم که یکی از فیلدها کلمات کلیدی هست تغییرش دادم بازم درست نشد ، بعدش فکر کردم شاید محتویاتی که ارسال میشن خالی هستن اما چاپشون کردم و دیدم مشکلی نیست و ...

Tarragon
جمعه 07 آذر 1393, 20:28 عصر
مشکل از این خطه :
$sql = "INSERT INTO rrsTB(rrslink,sitename,type) VALUES ($rrslink,$sitename,$cate)";
باید با bind متغیر ها رو هم براش ارسال کنید.

ashkufaraz
جمعه 07 آذر 1393, 22:16 عصر
type فیلدهای rrslink,sitename,type چیه؟ همین query را داخل phpmyadmin اجرا کن با مقدار ثابت برای این فیلدها ببین بازم خطا میده

mehran6764
جمعه 07 آذر 1393, 22:53 عصر
مشکل از این خطه :
$sql = "INSERT INTO rrsTB(rrslink,sitename,type) VALUES ($rrslink,$sitename,$cate)";
باید با bind متغیر ها رو هم براش ارسال کنید.
با این کد حل شد . مچکرم . یه سوال. این SSS چیه ؟



$stmt = $conn->prepare("INSERT INTO rrsTB(rrslink, sitename, type) VALUES (?, ?, ?)");
$stmt->bind_param("sss",$rrslink,$sitename,$cate);

$rrslink=$_POST["rrslink"];
$sitename=$_POST["sitename"];
$cate= intval($_POST["cate"]);
$stmt->execute();






type فیلدهای rrslink,sitename,type چیه؟ همین query را داخل phpmyadmin اجرا کن با مقدار ثابت برای این فیلدها ببین بازم خطا میده

نه داداش ، مشکل از کد بود . با شیوه اولی نمی شد متغیر ارسال کرد باس از bind استفاده می کردم . که کدشو بالا نوشتم . شما نمی دونی این روشی که هست
در برابر حملات هک ایمنه ، یا اصلا ربطی به sql injection نداره ؟

ashkufaraz
جمعه 07 آذر 1393, 23:54 عصر
sss مشخص کننده type فیلد های است sبه معنای string است و می تونی از i,d,b برای نوع های عددی و اعشاری استفاده کنی .وقتی از مقادیر را با پارامتر ارسال کنی به نظرم دگه نمیشه بهش injection زد

mehran6764
شنبه 08 آذر 1393, 00:14 صبح
sss مشخص کننده type فیلد های است sبه معنای string است و می تونی از i,d,b برای نوع های عددی و اعشاری استفاده کنی .وقتی از مقادیر را با پارامتر ارسال کنی به نظرم دگه نمیشه بهش injection زد

اگر تو پارامترها بولین ،رشته و اعداد صحیح هم داشته باشیم چی استفاده می کنیم ؟

Tarragon
شنبه 08 آذر 1393, 05:10 صبح
خب مسلما نمی تونه وارد دیتابیس کنه چون mysql بهت اررور می گیره.