2010-07-29 21 views
5

मैंने आज php और mysql के साथ काम करना शुरू कर दिया। असल में, मेरे पास जो है, वह एक खाली पृष्ठ है जिसमें मैं डेटाबेस में एक आईडी देखने से भरता हूं।php और mysql, सर्वोत्तम प्रथाओं

<a href="content/display.php?id=id1"> 

और फिर मेरी display.php में मैं इस किया है::

<?php 
    include '../includes/header.php'; 
    $id = $_GET['id']; 
    $mysqli = new mysqli('localhost','username','password','dbname'); 
    if($result = $mysqli->query("SELECT * FROM portfolio WHERE id='".$id."'")) 
    { 
     while($row = $result->fetch_object()) 
     { 
      $head = $row->head; 
      $img1 = $row->img1; 
      $img2 = $row->img2; 
      $img_url = $row->imgurl; 
      $img_thumb = $row->imgthumb; 
      $vid = $row->vid; 
      $swf = $row->swf; 
      $url = $row->url; 
      $url_text = $row->urltext; 
      $text = $row->text; 
     } 
    } 
    else echo $mysqli->error; 
?> 

ऐसा नहीं है कि में एक विरल तालिका नहीं उन क्षेत्रों के सभी तो मेरे मुखपृष्ठ पर मैं एक यूआरएल है कि इस तरह दिखता है जानकारी होगी (कई शून्य हो सकता है)। मूल रूप से वे html में फ़ाइल नाम शामिल हैं और फिर मैं कोड है कि इस तरह दिखता है:

if(isset($img1)) 
        { 
         echo '<img src="images/'.$img1.'" />'; 
        } 

सवालों की एक जोड़ी,

  1. इस यह करने के लिए सबसे अच्छा तरीका है?
  2. हर बार जब मैं display.php पर जाता हूं, तो मैं डेटाबेस कनेक्शन को फिर से खोल रहा हूं? यह अच्छा नहीं हो सकता है ...
  3. मैंने पूरे पथ नामों, या यहां तक ​​कि वास्तविक फाइलों के बजाय डेटाबेस में फ़ाइलों का नाम भी चुना है, यह समझते हुए कि, अगर मैं फ़ाइल का नाम बदलता हूं I डेटाबेस में जा सकते हैं और उस फ़ाइल के लिए इसे अपडेट कर सकते हैं जिसे मैं बदलना चाहता हूं। अगर मैं पथ बदलता हूं, तो मैं इसे HTML में एक बार बदल सकता हूं। क्या यह सबसे अच्छा विचार है?

धन्यवाद!

+0

(पुनः) डेटाबेस कनेक्शन खोलना सामान्य अभ्यास है, इससे कोई फर्क नहीं पड़ता। मुझे आश्चर्य है कि आप किसी अन्य चर में ऑब्जेक्ट की हर संपत्ति क्यों चाहते हैं? – Wrikken

+0

मुझे लगता है कि मुझे लूप के दौरान उसमें पूरी साइट को लपेटने की ज़रूरत नहीं थी ... मुझे लगता है कि मैं ऐसा कर सकता हूं हालांकि – JPC

उत्तर

6

1) नहीं:

ऐसे mysql_real_escape_string रूप
$id = (int) $_GET['id']; 

उपयोग कार्य या और भी बेहतर उपयोग हालांकि यह शुरुआत के लिए सबसे आसान तरीका है। मूल बातें के साथ सहज महसूस करने के बाद, आपको आवेदन संरचना के विभिन्न दृष्टिकोणों पर विचार करने में कुछ समय व्यतीत करना चाहिए। सबसे महत्वपूर्ण नियम चिंताओं को अलग करना है। प्रस्तुति कोड के साथ व्यापार तर्क कोड के साथ डेटाबेस कोड मिश्रण मत करो। लेकिन जैसे मैंने कहा, यह ऐसा कुछ नहीं है जिसे आपको अपने पहले दिन चिंता करनी चाहिए। अभी के लिए बस मूल बातें सीखो।

2) वास्तव में कोई अन्य तरीका नहीं है। वेब एप्लिकेशन के लिए ब्राउज़र से प्रत्येक अनुरोध एप्लिकेशन के व्यक्तिगत रन की तरह होता है। तथाकथित निरंतर डेटाबेस कनेक्शन का उपयोग करने की संभावना है, लेकिन पिछले बिंदु की तरह ही, ऐसा कुछ है जिसे आपको अपने पहले दिन से निपटना नहीं चाहिए, क्योंकि उन्हें आपके वेब सर्वर की विशिष्ट कॉन्फ़िगरेशन की आवश्यकता होती है। उस समय के लिए सामान्य कनेक्शन का उपयोग करें।

3) यह बहुत समझदार विचार है। आप अपने छवि पथ को PHP स्थिर के रूप में भी परिभाषित कर सकते हैं, ताकि यदि किसी बदलाव की आवश्यकता हो, तो आप केवल एक स्थिर को बदल दें।

4) एसएसी का कहना है कि उनके जवाब में बहुत महत्वपूर्ण है। एसक्यूएल इंजेक्शन और उन्हें रोकने के बारे में पढ़ें।

+0

1) मैं एमवीसी दृष्टिकोण से परिचित हूं। हालांकि, मैं PHP के लिए बिल्कुल नया हूँ। मैंने स्ट्रूट्स 2 का उपयोग किया है और व्यापार, डेटा और प्रस्तुति को अलग करने के लिए ढांचे को एक साथ रखा गया है। भविष्य के संदर्भ के लिए, मैं php में ऐसा करने के तरीके के बारे में और जानना चाहता हूं। शुरू करने के लिए एक अच्छी गाइड के किसी भी सुझाव? धन्यवाद! – JPC

+0

ओह उस मामले में यह पूरी तरह से अलग बात है :) PHP के लिए कई एमवीसी फ्रेमवर्क कार्यान्वयन के विवरण में काफी भिन्न हैं। ज़ेंड फ्रेमवर्क बहुत लोकप्रिय है, कई कहते हैं कि यह वास्तव में कमजोर युग्मित वर्गों का संग्रह है। दूसरी तरफ सिम्फनी जैसे 'कॉन्फ्रेंस द्वारा कॉन्फ़िगरेशन' मॉडल को लागू करने वाले ढांचे हैं। आपको निश्चित रूप से कुछ ऐसी चीज मिल जाएगी जो आपकी आवश्यकताओं के अनुरूप हो। – Mchl

+0

@ कोल। श्रापनेल मैं अभी भी इस साइट के लिए नया हूं और प्रोटोकॉल का जवाब देता हूं। मुझे एहसास नहीं हुआ कि मैं केवल एक जवाब चुन सकता हूं। – JPC

6

आप SQL injection लिए जोखिम रहता है ठीक से अपने चर डाली प्रकार,:,

+2

+1 तैयार बयान के लिए – Wrikken

+0

मैंने जेडीबीसी के लिए तैयार कथन का उपयोग किया है, लेकिन PHP के लिए नहीं, मैं कुछ हद तक परिचित हूँ। मैं इसे देख लूंगा। चूंकि मेरी आईडी int नहीं है, यह है कि mysql_real_escape_string क्या है? धन्यवाद – JPC

+0

@JPC: हाँ आप 'mysql_real_escape_string' का उपयोग कर सकते हैं। – Sarfraz

1

एसक्यूएल इंजेक्शन & तैयार कथन पहले ही उल्लेख किए गए हैं।कि में नया होगा:

else echo $mysqli->error; 

बदलें कि करने के लिए:

else trigger_error($mysqli->error,E_USER_ERROR); 

क्यों आप से पूछना? क्योंकि आगंतुकों को आपके डेटाबेस के बारे में कोई जानकारी नहीं होनी चाहिए, और त्रुटि को ठीक नहीं कर सकता है, इसलिए उन्हें सादे इसे नहीं देखना चाहिए। इस तरह, आप display_errors पर सुरक्षित रूप से विकसित कर सकते हैं, और लाइव साइट display_errors बंद है, और आप log_errors त्रुटि लॉग में हैं।

+0

त्रुटियां लॉग इन होती हैं? क्या मुझे कहीं भी display_errors और log_errors को कॉन्फ़िगर करना है? – JPC

+0

मैं तर्क दूंगा कि वास्तव में सबसे अच्छा तरीका सभी त्रुटियों को त्रुटि अपवादों में बदलने के लिए है http://php.net/manual/en/class.errorexception.php, लेकिन फिर यह थोड़ा और उन्नत विषय है। – Mchl

+1

@Mchl अपवाद अधिक त्रुटि * हैंडलिंग * है जबकि Wrikken त्रुटि * ट्रैकिंग * की बात कर रहा है। यह अलग-अलग दुनिया है, जो हस्तक्षेप नहीं करते हैं। दरअसल आप एक ही स्क्रिप्ट में दोनों का उपयोग कर सकते हैं। –

1

ऐसा लगता है कि आप जो करना चाहते हैं उस पर अच्छा संभाल है। मुझे नहीं पता कि आपके पास कितनी विकास पृष्ठभूमि है, लेकिन केवीपीएचपी, फ्यूज, या यहां तक ​​कि ज़ेंड फ्रेमवर्क (ब्लीह !!!) जैसे एमवीसी के बारे में सीखना शुरू करना एक अच्छा विचार होगा। मैं आपको अपने सभी बुनियादी डीबी इंटरफ़ेस, टेम्पलेट हैंडलिंग, सत्र हैंडलिंग को पूर्व परिभाषित करके और अधिक लम्बे अनुप्रयोगों पर समय बचाऊंगा, और आपको उच्च स्तर की समस्याओं के बारे में चिंता करने देता हूं, जैसे लंच के लिए क्या है! :)

संबंधित मुद्दे