mysql_query() لا يتم تنفيذها فى الكود لا اعلم ماالسبب
مرفق الكود
هلاّ تقوم بوضع رسائل الخطأ التي تظهر لك وتقوم بوضع الشفرة في وسم كود في المشاركة بدلاً من دفعنا لتحميل الملفات والنظر فيها.
بعضنا لا يملك وقت لهذا ويكفيهم نظرة سريعة لمساعدتك فساعدهم على مساعدتك!
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
كود الخطأ يساعد كثيرا
هذا هو الكود
//showing data
$data1="select * from users";
$query1=mysql_query($data1);
if(!$query1){
echo"the query is not ok"; }وهذا هو الخطا
the query is not ok
تم تعديل هذه المشاركة بواسطة Xacker في 5 أغسطس 2012 في 18:29
أجري هذا التعديل المؤقت وهاتي رسالة الخطأ النظامية من MySQL
if(!$query1){
echo mysql_error(); }Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
Xacker كتب:أجري هذا التعديل المؤقت وهاتي رسالة الخطأ النظامية من MySQL
if(!$query1){ echo mysql_error(); }
بعد التعديل ظهر الخطا التالى
You have an error in your SQL syntax near ',,2012-08-05,18:51:11)' at line 1
والسطر الاول فى الكود هو <?php
هذا الخطأ غير مرتبط بالكود أعلاه، لا أفهم ما علاقتهم ببعض وربما أجريت تعديلات على الشفرة لديك غير المذكورة في الملفات المرفقة.
على العموم تصحيح الخطأ السابق
$data="insert into users(id,name,email,message,date,time) values('','$name','$email','$message','$date','$time')";فلتمرير سلسلة نصية عليك بلفّها بـ quotes.
بالنسبة لـ ID
المفترض أن يكون الحقل من النمط INT لكن إن كنت تستخدمين نمط آخر وتريدين تمرير قيمة فارغة أو (لا قيمة) فضعي null مثلاً إن كان يسمح بـ NULL.
صححي هذا الخطأ ونفذي الشفرة مرة أخرى وأبلغينا بما يجري.
* انتبهي ألا تكون الشفرة الموجودة في الملفات المرفقة مختلفة عمّا لديك.. لأن هذا سيكون مضيعة لوقتنا.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
إنتضر أولا لا يكفي مع mysql_query أن تضع فقط $data تحتاج أيضا للكونكشن الذي ترجعه الدالة mysql_connect.
$con = mysql_connect(“localhost”, “root”, “pass”); $query = “SELECT * FROM Products”; $result = mysql_query($query, $con);
تم تعديل هذه المشاركة بواسطة Xacker في 6 أغسطس 2012 في 01:57
gemo3615 كتب:إنتضر أولا لا يكفي مع mysql_query أن تضع فقط $data تحتاج أيضا للكونكشن الذي ترجعه الدالة mysql_connect.
لا يشترط ذلك لأن مقبض الاتصال optional وفي حال عدم استخدامه سيتم استخدام آخر مقبض اتصال مفتوح بـ mysql_connect(..)
resource mysql_query ( string $query [, resource $link_identifier = NULL ] )
link_identifier
The MySQL connection. If the link identifier is not specified, the last link opened by mysql_connect() is assumed. If no such link is found, it will try to create one as if mysql_connect() was called with no arguments. If no connection is found or established, an E_WARNING level error is generated.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
gemo3615 كتب:إنتضر أولا لا يكفي مع mysql_query أن تضع فقط $data تحتاج أيضا للكونكشن الذي ترجعه الدالة mysql_connect.
$con = mysql_connect(“localhost”, “root”, “pass”); $query = “SELECT * FROM Products”; $result = mysql_query($query, $con);
لكن الخطأ يقول
اقتباسYou have an error in your SQL syntax near ',,2012-08-05,18:51:11)' at line 1
يعني أنه هناك شئ غير عادي في الكويري
Xacker كتب:هذا الخطأ غير مرتبط بالكود أعلاه، لا أفهم ما علاقتهم ببعض وربما أجريت تعديلات على الشفرة لديك غير المذكورة في الملفات المرفقة.
على العموم تصحيح الخطأ السابق
$data="insert into users(id,name,email,message,date,time) values('','$name','$email','$message','$date','$time')";فلتمرير سلسلة نصية عليك بلفّها بـ quotes.
بالنسبة لـ ID
المفترض أن يكون الحقل من النمط INT لكن إن كنت تستخدمين نمط آخر وتريدين تمرير قيمة فارغة أو (لا قيمة) فضعي null مثلاً إن كان يسمح بـ NULL.
صححي هذا الخطأ ونفذي الشفرة مرة أخرى وأبلغينا بما يجري.
* انتبهي ألا تكون الشفرة الموجودة في الملفات المرفقة مختلفة عمّا لديك.. لأن هذا سيكون مضيعة لوقتنا.
انا ضيفت ال quotes على جملة insert كما حضرتك اشارت ولكن عند التنفيذ يتم ادخال بيانات الdate , time فقط وال id عملاه autoincrement بينما ال name ,email,message لايدخل فيهما شئ
تأكدي من وجود قيم لهذه الوسائط.
قومي بوضع (مثلاً):
echo $name . "<br>" . $email . "<br>" . $message;
قبل
$data="insert into users(id,name,email,message,date,time) values('','$name','$email','$message','$date','$time')";فإن لم يكن هناك قيم، قومي بإرفاق آخر نسخة من الملف الذي أرفقتيه في أول مشاركة.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
Xacker كتب:تأكدي من وجود قيم لهذه الوسائط.
قومي بوضع (مثلاً):
echo $name . "<br>" . $email . "<br>" . $message;قبل
$data="insert into users(id,name,email,message,date,time) values('','$name','$email','$message','$date','$time')";فإن لم يكن هناك قيم، قومي بإرفاق آخر نسخة من الملف الذي أرفقتيه في أول مشاركة.
لا يوجد اى قيم وقد ارفقت اخر نسخة من الملف
بداية،
أنا كتبت هذا:
echo $name . " " . $email . " " . $message;
وأنت وضعت
echo $name - " " - $email-" " - $message;
فلا أفهم من أين أتى الاجتهاد!
الإشارة "-" ستجبر PHP على معالجة القيم كأعداد وليس كسلاسل نصية، بالتالي ما سيتم طباعته هو الرقم "0"
بينما الإشارة "." هي المستخدمة في الربط بين السلاسل النصية، فمثلاً: "hello"." "."world!" ستطبع "hello world!"
يرجى الانتباه في المرات القادمة.
سبب عدم وجود قيم لديك هو ...
if($name=''){المعاملات في PHP هي: http://php.net/manual/en/language.operators.php
المعامل الذي تستخدمينه هو =
وهذا معامل إسناد وليس معامل مقارنة ==
بالتالي فالشفرة لديك تقوم بإسناد قيمة فارغة إلى المتغير $name وهذا يؤدي إلى ضياع البيانات المرسلة عبر النموذج.
ذات الأمر ينطبق على بقية البارامترات لديك.. سأقوم بإجراء بعض التعديلات على الشفرة وأضعها بعد قليل لأنها تحوي على بعض المعالجة الخاطئة.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
Xacker كتب:بداية،
أنا كتبت هذا:
echo $name . " " . $email . " " . $message;وأنت وضعت
echo $name - " " - $email-" " - $message;فلا أفهم من أين أتى الاجتهاد!
الإشارة "-" ستجبر PHP على معالجة القيم كأعداد وليس كسلاسل نصية، بالتالي ما سيتم طباعته هو الرقم "0"
بينما الإشارة "." هي المستخدمة في الربط بين السلاسل النصية، فمثلاً: "hello"." "."world!" ستطبع "hello world!"
يرجى الانتباه في المرات القادمة.
سبب عدم وجود قيم لديك هو ...
if($name=''){المعاملات في PHP هي: http://php.net/manual/en/language.operators.php
المعامل الذي تستخدمينه هو =
وهذا معامل إسناد وليس معامل مقارنة ==
بالتالي فالشفرة لديك تقوم بإسناد قيمة فارغة إلى المتغير $name وهذا يؤدي إلى ضياع البيانات المرسلة عبر النموذج.
ذات الأمر ينطبق على بقية البارامترات لديك.. سأقوم بإجراء بعض التعديلات على الشفرة وأضعها بعد قليل لأنها تحوي على بعض المعالجة الخاطئة.
اسفة لقد رايت ال . على انها -
وقد عدلت الكود كما اشارت حضرتك وتم تخزين البيانات فى قاعدة البيانات ولكن فى حقل الايميل يتم تخزين incorrect e_mail
وعندما حذفت if($x!=='@'){
$email="incorrect e-mail";
}
من الكود ادخل الايميل فى قاعدة البانات فما البديل لهذا الكود
واسفة على كثرة الاسئلة ولم اقصد الاجتهاد ولكن هذا يرجع الى نظر عينى
بسيطة إن شاء الله
يرجى الإطلاع على التعديلات التالية:
<!doctype html>
<html>
<head>
</head>
<body>
<?php
require('connection1.php');
echo"<h1>GusetBook</h1>";
$name = (isset($_POST['name']) && !empty($_POST['name']) ? trim($_POST['name']) : '');
$email = (isset($_POST['email']) && !empty($_POST['email']) ? trim($_POST['email']) : '');
$message = (isset($_POST['message']) && !empty($_POST['message']) ? trim($_POST['message']) : '');
$submit = (isset($_POST['submit']) && !empty($_POST['submit']) ? true : false);
$date = date('Y-m-d');
$time = date('H:i:s');
if($submit === true){
$err = false; // سنستخدم هذا المتغير في تحديد إذا كان هناك قيمة خطأ
//validation for the name field
if ($name==''){
echo "please enter your name<br />";
$err = true;
}
elseif (strlen($name)>0 and strlen($name)<7){
echo "name is at least 7 characters<br />";
$err = true;
}
elseif (is_numeric($name)){
echo "please don't enter numbers in your name<br />";
$err = true;
}
# references:
# http://fr.php.net/manual/en/function.filter-var.php
# http://fightingforalostcause.net/misc/2006/compare-email-regex.php (أفضل تعبير منتظم مستخدم في مقارنة البريد هو الموجود على هذا الرابط وهو ذاته الذي قامت PHP باستخدامه في filter_var)
//validation for email field
if ($email==''){
echo "please enter the email";
$err = true;
}
elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "incorrect email<br />";
$err = true;
}
//validation for message field
if ($message==''){
echo "please enter your message<br />";
$err = true;
}
//storing data
if ($err === false) {
$message = strip_tags($message);
echo nl2br($message);
$q="insert into users(name,email,message,date,time) values('$name','$email','$message','$date','$time')";
$r=mysql_query($q);
if(!$r){
echo mysql_error();
}
}
}
//to make horizontial line to write html code
echo"<hr>";
//showing data
$q="select * from users";
$r=mysql_query($q);
if(!$r){
echo mysql_error();
}
while ($row = mysql_fetch_assoc($r)){
echo "<div style='background-color: " . ($row['id'] % 2 == 0 ? "#fff" : "#eee") . "'>";
echo $row['name']."<br />";
echo $row['email']."<br />";
echo nl2br($row['message'])."<br />";
echo $row['date']."<br />";
echo $row['time']."<br />";
echo "</div>";
}
echo"<hr>";
?>
<form action='' method='POST'>
<table>
<tr>
<td>Your Name:</td>
<td><input name='name' type='text'> </td>
</tr>
<tr>
<td>Your Email:</td>
<td><input name='email' type='text'> </td>
</tr>
<tr>
<td valign='top'>Message:</td>
<td><textarea name='message' cols='30' rows='4' maxlength='500'></textarea></td>
</tr>
<tr>
<td><input type='submit' value='POST' name='submit'></td>
<td><input type='reset' value='Clear' name='reset'></td>
</tr>
</table>
</form>
</body>
</html><?php
//connect to database( GusetBook)
$con=@mysql_connect('localhost','root','') or die(mysql_error());
//selecting to db
mysql_select_db('GusetBook') or die(mysql_error());
mysql_set_charset('utf8', $con); // اختياري -- ولكن أفضل مع تحديد الترميز utf8_general_ci للجدول والأعمدة
?>الرجاء قراءتها بعناية فقد قمت بتعديلات كثيرة، لكنها ستضيف إليك العديد من المعلومات المفيدة إن شاء الله (يرجى قراءة التعليقات أيضاً بعناية)
قمت بإزالة شفرة تحديث الصفحة، التي تحوي على خطأ في كتابتها وموضعها، وأيضاً لعدم وجود فائدة منها لأنها قد تؤدي إلى تضييع بيانات يقوم المستخدم بإدخالها لأن التحديث قد يحدث فجأة.
بدلاً منها يمكنك استخدام AJAX request لكن هذا مجال آخر تدخل فيه javascript ويمكنك البحث في قسم جافاسكربت عن مواضيع حول Ajax.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
شكرا جزيلا على مجهوداتك الرائعة جعله الله فى ميزان حسناتك لكن عند التنفيذ يطلعلى
Fatal error: Call to undefined function: filter_var() in C:\apache\htdocs\designguset1.php on line 36
كيف اجعل الدالة معرفة للبرنامج
شكرا لك
يبدو أن إصدار PHP لديك أقدم من 5.2 (تأكد من هذا)
بكل الأحوال يمكن استبدال هذا الجزء:
elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "incorrect email<br />";
$err = true;
}بـ:
elseif (preg_match(/^(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){255,})(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){65,}@)(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-9]+)*\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\]))$/iD, $email) == 0)
echo "incorrect email<br />";
$err = true;
}كما قلت في المشاركة السابقة، فإن filter_var تستخدم التعبير المنتظم الذي وضعه Michael Rushton كما يذكر الرابط الموجود في التعليقات: http://fightingforalostcause.net/misc/2006/compare-email-regex.php
وبالتالي يمكن استخدامه بدلاً من filter_var مع التابع preg_match كما في الجزء البديل الذي وضعته الآن.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget