مشكلة في كود php

محمد الحربي • منذ 5 سنوات

السلام عليكم جميعاً

قمت ببرمجة كود ليساعدني في إنشاء صفحات تلقائي وكتابت الاكواد عني 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>";



?>

في المرة الاول البيانات تظهر بشكل صحيح كمثال هذه الصورة صحيحة وهي البيانات التي إدخلتها

1

لكن عند إدخال بيانات أخرى

تظهر هذه الببانات مع ان البيانات التي إدخلتها مختلفة تماماً عن السابقة

 

انا اريد ان اعرف كيف اجعله يفرق بين الصفحات اي هذه الصفحة لها بيانات مخصصة وهي كذا وكذا والاخرى افعل بها كذا وكذا

 

 

كل شئ يعمل صحيحاً لكن هنالك مشكلة ان الكود لا يستيطع ان يفرق ان هذه الصفحة التي اريد ان يفعل بها كذا وكذا والصفحة الاخرى يفعل كذا وكذا

انشت ملف نصي (التي يحتوي فيها الاكواد الضرورية )

ويقوم باستدعائها تلقائيا عند كل إنشاء صفحة جديدة عن طريق دالة copy() 

 

والبيانات التي اقوم بإدخالها تخزن في قاعدة البيانات ويطبعها عند كل صفحة أنشئها

 

ولكن كل مرة أدخل بيانات ( بيانات جديدة) تقوم كل الصفحات بتغيره محتوياتها الى المحتويات الجديدة

وانا لا اريد كذا بل كل صفحة بيانات مخصصة

 

 

شكرا لكم :)

 

كلمات دليلية: html php

الإجابة الصحيحة

Abdullah Alhariri • منذ 5 سنوات

السلام عليكم

المشكلة أنك تحضر جميع الصفوف من جدول قاعدة البيانات وتعرض أول صف كما ذكر الأخ  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)

محمد الحربي • منذ 5 سنوات

قد يكون الكلام ليس كافي لتصور المشكلة ..

لا مانع ان احتجتم لصورة أو إرفاق الكود هنا

Alhoqbani: يا ليت تحط الأكواد وتكون مرتبة. اضغط على زر قصاصة الشيفرة (اللي عليه علامة اكبر من واصغر من) واختر اللغة php

محمد الحربي: تم التحديث وإضافة الاكواد

Alhoqbani • منذ 5 سنوات

المشكلة عندك انك بعد ما تسوي استعلام من قاعدة البيانات في الملف 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

محمد الحربي: انا لا اريد ان اطبعها كلها

محمد الحربي: كل صفحة اريد ان اطبع فيها اسم الموضوع و الرسالة .. يعني عندما يختار اسم للصفحة سيتم إنشاء صفحة جديدة بالاسم الذي اختاره ويوجد بداخلها معطياته وليست صفحة واحدة ويطبع جميع البيانات

Abdullah Alhariri • منذ 5 سنوات
الإجابة الصحيحة
مميز

السلام عليكم

المشكلة أنك تحضر جميع الصفوف من جدول قاعدة البيانات وتعرض أول صف كما ذكر الأخ  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: بالتوفيق إن شاء الله

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !