مشكلة في كود php
السلام عليكم جميعاً
قمت ببرمجة كود ليساعدني في إنشاء صفحات تلقائي وكتابت الاكواد عني xD
كل ماعلي فعله هو فقط وضع اسم الصفحة وصورة لها و تغير بعض اللوازم والبقية ينشأ تلقائياً .. على كل حال
[تعديل] إضافة الكود :
أعرف ان الكود غير آمن الكود مبسط جداً فقط لتتضح المشكلة
أنشت ملف باسم ("test1.php")ياخذ بيانات من المستخدم وهي اسم الموضوع والرسالة و اسم صفحة يختارها
<form action="test1.php" method="post">
Subject name : <br> <input type="text" name="SubName"> <br>
Subject text : <br> <textarea name="SubText" rows="5" cols="20"></textarea> <br>
page name : <br> <input type="text" name="PagName"> <br><br>
<input type="submit" name="submit" value="Create">
</form>
<?php
// if the user click on the submit button
if(isset($_POST['submit'])) {
$SubName = $_POST['SubName'];
$SubText = $_POST['SubText'];
$PagName = $_POST['PagName'];
// connect to db
$connect = mysqli_connect("localhost","root","","test") or die("Problem to connect to db ");
$query = mysqli_query
($connect,"INSERT INTO subject_detail (name,message,page_name)
VALUES ('$SubName','$SubText','$PagName')");
// check if the data insert into db
if($query) {
$create_file = fopen("$PagName.php","w");
if ($create_file) {
$write_to_file = fwrite($create_file,"<?php copy('index.php','$PagName.php') ?>");
if($write_to_file) {
echo "file created";
}
}
}
else {
echo "Sorry, there's problem to create this file";
}
}// close $_POST['submit]
?>
وهنا الصفحة التي يطبع البيانات التي قام بإدخالها المستخدم بإسم ("index.php")
كود بسيط جداً
<?php
// connect to db
$connect = mysqli_connect('localhost','root','','test') or die ("Problem to connect to db");
$query = mysqli_query($connect,"SELECT * FROM subject_detail ");
//fetch the data from db
$rows = mysqli_fetch_array($query) ;
// display the data to user
echo 'Your Subject name is : ' . $rows['name'] . "<br>";
echo 'Your Message is : ' . $rows['message'] . "<br>";
?>
في المرة الاول البيانات تظهر بشكل صحيح كمثال هذه الصورة صحيحة وهي البيانات التي إدخلتها
لكن عند إدخال بيانات أخرى
تظهر هذه الببانات مع ان البيانات التي إدخلتها مختلفة تماماً عن السابقة
انا اريد ان اعرف كيف اجعله يفرق بين الصفحات اي هذه الصفحة لها بيانات مخصصة وهي كذا وكذا والاخرى افعل بها كذا وكذا
كل شئ يعمل صحيحاً لكن هنالك مشكلة ان الكود لا يستيطع ان يفرق ان هذه الصفحة التي اريد ان يفعل بها كذا وكذا والصفحة الاخرى يفعل كذا وكذا
انشت ملف نصي (التي يحتوي فيها الاكواد الضرورية )
ويقوم باستدعائها تلقائيا عند كل إنشاء صفحة جديدة عن طريق دالة copy()
والبيانات التي اقوم بإدخالها تخزن في قاعدة البيانات ويطبعها عند كل صفحة أنشئها
ولكن كل مرة أدخل بيانات ( بيانات جديدة) تقوم كل الصفحات بتغيره محتوياتها الى المحتويات الجديدة
وانا لا اريد كذا بل كل صفحة بيانات مخصصة
شكرا لكم :)
الإجابة الصحيحة
السلام عليكم
المشكلة أنك تحضر جميع الصفوف من جدول قاعدة البيانات وتعرض أول صف كما ذكر الأخ Alhoqbani
ولحل هذه المشكلة في الاستعلام عن الصفحة يجب تضمين اسم الصفحة التي تبحث عنها
فتصبح جملة الاستعلام كما يلي :
// connect to db
$connect = mysqli_connect('localhost','root','','test') or die ("Problem to connect to db");
$query = mysqli_query($connect,"SELECT * FROM subject_detail WHERE page_name = " . __FILE__);
حيث __FILE__ هو إسم الصفحة الحالية من دون لاحقة (php) ولكن يجب أن يكون إسم الصفحة الحالية مطابق تماماً لما هو في قاعدة البيانات
ولكن من رأي شخصي هذه الطريقة غير فعالة لأكثر من سبب أولها إحتمال تكرار اسم الصفحة بشكل كبير وهذا سيعيدك للمشكلة الحالية
وثانياً هناك إحتمال كبير لعدم القدرة على نسخ الملف إلى ملف آخر بسبب الصلاحيات وغيرها من المشاكل
أقترح عليك أن تتخلص من التعامل مع نظام الملفات وتجعل تعاملك مع قواعد البيانات كاملاً
بالتوفيق إن شاء الله
الإجابات (3)
قد يكون الكلام ليس كافي لتصور المشكلة ..
لا مانع ان احتجتم لصورة أو إرفاق الكود هنا
Alhoqbani: يا ليت تحط الأكواد وتكون مرتبة. اضغط على زر قصاصة الشيفرة (اللي عليه علامة اكبر من واصغر من) واختر اللغة php
محمد الحربي: تم التحديث وإضافة الاكواد
المشكلة عندك انك بعد ما تسوي استعلام من قاعدة البيانات في الملف index.php تعرض فقط أول نتيجة أو صف في البينات.
الدالة mysqli_fetch_array تعطيك فقط أول نتيجة، ولازم تسوي حلقة تكرار حتى تقدر تعرض بقية النتائج من قاعدة البيانات.
عدل الكود بالشكل التالي:
<?php
// connect to db
$connect = mysqli_connect('localhost', 'root', '', 'testing') or die ("Problem to connect to db");
$query = mysqli_query($connect, "SELECT * FROM subject_detail ");
?>
<h1>Results:</h1>
<ol>
<?php
//fetch the data from db
while ($rows = mysqli_fetch_assoc($query)) {
// display each row to user
echo '<li>';
echo 'Your Message is : ' . $rows['message'] . "<br>";
echo 'Your Subject name is : ' . $rows['name'] . "<br>";
echo 'Your Page name is : ' . $rows['page_name'] . "<br>";
echo '</li>';
}
?>
</ol>
لاحظ اني غيرت الدالة منmysqli_fetch_array إلى mysqli_fetch_assoc والفرق بسيط بينهم لكن في حالتك ما تحتاج mysqli_fetch_array
محمد الحربي: انا لا اريد ان اطبعها كلها
محمد الحربي: كل صفحة اريد ان اطبع فيها اسم الموضوع و الرسالة .. يعني عندما يختار اسم للصفحة سيتم إنشاء صفحة جديدة بالاسم الذي اختاره ويوجد بداخلها معطياته وليست صفحة واحدة ويطبع جميع البيانات
السلام عليكم
المشكلة أنك تحضر جميع الصفوف من جدول قاعدة البيانات وتعرض أول صف كما ذكر الأخ Alhoqbani
ولحل هذه المشكلة في الاستعلام عن الصفحة يجب تضمين اسم الصفحة التي تبحث عنها
فتصبح جملة الاستعلام كما يلي :
// connect to db
$connect = mysqli_connect('localhost','root','','test') or die ("Problem to connect to db");
$query = mysqli_query($connect,"SELECT * FROM subject_detail WHERE page_name = " . __FILE__);
حيث __FILE__ هو إسم الصفحة الحالية من دون لاحقة (php) ولكن يجب أن يكون إسم الصفحة الحالية مطابق تماماً لما هو في قاعدة البيانات
ولكن من رأي شخصي هذه الطريقة غير فعالة لأكثر من سبب أولها إحتمال تكرار اسم الصفحة بشكل كبير وهذا سيعيدك للمشكلة الحالية
وثانياً هناك إحتمال كبير لعدم القدرة على نسخ الملف إلى ملف آخر بسبب الصلاحيات وغيرها من المشاكل
أقترح عليك أن تتخلص من التعامل مع نظام الملفات وتجعل تعاملك مع قواعد البيانات كاملاً
بالتوفيق إن شاء الله
محمد الحربي: شكراً لك أنحلت المشكلة لكن استخدمت دالة basename لانها ترجع اسم الصفحة فقط بدلا من ان ترجع اسم المسار كاملاً ! .. شكرا جميع لكم
Abdullah Alhariri: بالتوفيق إن شاء الله
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !