Εγγραφή σε πίνακα... που είναι το λάθος;;;

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
rafinos
Δημοσιεύσεις: 301
Εγγραφή: 15 Μάιος 2011 00:20
Επικοινωνία:

Εγγραφή σε πίνακα... που είναι το λάθος;;;

Δημοσίευση από rafinos » 10 Ιαν 2012 17:43

Ποιο είναι το λάθος στον παρακάτω κώδικα....

Κώδικας: Επιλογή όλων

<?php
	session_start&#40;&#41;;
	
	header&#40;"Content-type&#58; text/html;charset=UTF-8"&#41;;
	
	if&#40;$_SESSION&#91;'username'&#93;&#41;&#123;
	
		include "connect.php";
		
		$from = mysql_real_escape_string&#40;$_POST&#91;'from'&#93;&#41;;
		$to = mysql_real_escape_string&#40;$_POST&#91;'to'&#93;&#41;;
		$description = mysql_real_escape_string&#40;$_POST&#91;'description'&#93;&#41;; 
		
		if&#40;isset&#40;$_POST&#91;'now'&#93;&#41;&#41;&#123;
			$to = "σήμερα";
		&#125;
	
		$result = mysql_query&#40;"SELECT id FROM user_data WHERE username='".$_SESSION&#91;'username'&#93;."'"&#41;;
		$count = mysql_num_rows&#40;$result&#41;; 
		
		if&#40;$count == 1&#41;&#123;
			$row = mysql_fetch_assoc&#40;$result&#41;;
			$user_id = $row&#91;'id'&#93;;
		&#125;
		
		mysql_query&#40;"INSERT INTO experience&#40;title,id,from,to&#41; VALUES&#40;'$description','$user_id','$from','$to'&#41;"&#41;;
		$add = mysql_affected_rows&#40;&#41;;
		
		if&#40;$add<1&#41;&#123;				
			die&#40;"Η προσθήκη δεν ολοκληρώθηκε με επιτυχία! <a href='experiences.php'>επιστροφή</a>"&#41;;
		&#125;else&#123;
				header&#40;"location&#58; experiences.php"&#41;;
		&#125;
	&#125;
?>


αυτός είναι ο πίνακας....

Εικόνα



****με αυτό τρέχει!!!!!!!

Κώδικας: Επιλογή όλων

$result = mysql_query&#40;"INSERT INTO `experience` &#40;`title`, `id`, `from`, `to`&#41; VALUES &#40;'$description', '$user_id', '$from', '$to'&#41;"&#41;;
αλλά γιατί;;; επειδή υπάρχει το from????

εντάξει αυτό έφταιγε.....

panosru
WebDev Moderator
Δημοσιεύσεις: 1885
Εγγραφή: 13 Σεπ 2005 16:13
Τοποθεσία: Camp

Εγγραφή σε πίνακα... που είναι το λάθος;;;

Δημοσίευση από panosru » 10 Ιαν 2012 21:27

Τι σφάλμα σου βγάζει όταν τρέχεις τον κώδικα;

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Εγγραφή σε πίνακα... που είναι το λάθος;;;

Δημοσίευση από gvre » 10 Ιαν 2012 21:52

Ναι. Το from είναι δεσμευμένη λέξη.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Εγγραφή σε πίνακα... που είναι το λάθος;;;

Δημοσίευση από korgr » 10 Ιαν 2012 22:25

Γι' αυτό να σου γίνει συνήθεια, σε ονοματα πεδίων και πινάκων να χρησιμοποιεις backticks πχ `name`

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Εγγραφή σε πίνακα... που είναι το λάθος;;;

Δημοσίευση από dva_dev » 10 Ιαν 2012 22:45

Καλό είναι να χρησιμοποιούμε μόνο λατινικά γράμματα και όχι τις δεσμευμένες λέξεις παρότι κάποια db μπορεί να το επιτρέπει με ή χωρίς κόλπα.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Εγγραφή σε πίνακα... που είναι το λάθος;;;

Δημοσίευση από gvre » 10 Ιαν 2012 23:03

Προσωπικά αποφεύγω τα backticks και χρησιμοποιώ ονόματα που βγάζουν νόημα. Το from πχ δεν ξεκαθαρίζει αν πρόκειται για ημερομηνία, έτος, ημέρα κλπ. Ένα year_from θα ήταν καλύτερη επιλογή και δε θα υπήρχε πρόβλημα με το όνομα.

@rafinos Αν στο from αποθηκεύεις έτος πρέπει να προσθέσεις άλλο ένα byte στο μέγεθος του πεδίου ( varchar(5) ). Είναι καλύτερα βέβαια να το κάνεις smallint.

rafinos
Δημοσιεύσεις: 301
Εγγραφή: 15 Μάιος 2011 00:20
Επικοινωνία:

Εγγραφή σε πίνακα... που είναι το λάθος;;;

Δημοσίευση από rafinos » 12 Ιαν 2012 16:56

ναι έτσι το έκανα :P

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Εγγραφή σε πίνακα... που είναι το λάθος;;;

Δημοσίευση από cherouvim » 12 Ιαν 2012 19:10

dva_dev έγραψε:Καλό είναι να χρησιμοποιούμε μόνο λατινικά γράμματα και όχι τις δεσμευμένες λέξεις παρότι κάποια db μπορεί να το επιτρέπει με ή χωρίς κόλπα.
Το escaping δεν είναι κόλπο.
Επίσης δεν χρειάζεται να ξέρω όλες τις δεσμευμένες λέξεις που μπορεί να έχουν όλες οι dbs που θέλω να υποστηρίζει η εφαρμογή μου. Πχ "BULK" και "FULL" επιτρέπονται σε MySQL αλλά όχι σε SQL Server.
gvre έγραψε:Προσωπικά αποφεύγω τα backticks και χρησιμοποιώ ονόματα που βγάζουν νόημα. Το from πχ δεν ξεκαθαρίζει αν πρόκειται για ημερομηνία, έτος, ημέρα κλπ. Ένα year_from θα ήταν καλύτερη επιλογή και δε θα υπήρχε πρόβλημα με το όνομα.
Άλλες φορές το from όμως ακούγεται σωστα. Πχ

Κώδικας: Επιλογή όλων

item_links &#40;from, to, title&#41;
Οπότε προτιμώ να ονομάζω τα πεδία όπως ακριβώς πρέπει να λέγονται βάση του μοντέλου μου.

BTW η χειρότερη πρακτική που έχω δει ποτέ είναι να γίνονται prefix τα πάντα με "x" για να μην υπάρχει ο κίνδυνος που συζητάμε. Δηλαδή people (xid, xage, xname, xsurname, xemail). Χαχα.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Εγγραφή σε πίνακα... που είναι το λάθος;;;

Δημοσίευση από gvre » 12 Ιαν 2012 19:27

cherouvim έγραψε: Άλλες φορές το from όμως ακούγεται σωστα. Πχ

Κώδικας: Επιλογή όλων

item_links &#40;from, to, title&#41;
To from και to τι πληροφορία αποθηκεύουν; :)

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Εγγραφή σε πίνακα... που είναι το λάθος;;;

Δημοσίευση από cherouvim » 12 Ιαν 2012 19:37

Είναι FKs στα items.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Εγγραφή σε πίνακα... που είναι το λάθος;;;

Δημοσίευση από dva_dev » 12 Ιαν 2012 19:58

Θα διαφωνήσω, αλλά δεν έχει και πολύ σημασία.
cherouvim έγραψε:Το escaping δεν είναι κόλπο.
Το escaping είναι κόλπο. Το κόλπο για να χρησιμοποιήσεις δεσμευμένες λέξεις, ώστε να διευκολύνουν το migration από ανταγωνίστριες βάσεις δεδομένων.
cherouvim έγραψε:Επίσης δεν χρειάζεται να ξέρω όλες τις δεσμευμένες λέξεις που μπορεί να έχουν όλες οι dbs που θέλω να υποστηρίζει η εφαρμογή μου. Πχ "BULK" και "FULL" επιτρέπονται σε MySQL αλλά όχι σε SQL Server.
Αν "θέλεις" να υποστηρίξεις πάνω από μία βάση δεδομένων, πως περιμένεις να την υποστηρίξεις χωρίς να ξέρεις το λεξιλόγιο της κατ' ελάχιστο; Θα το παρομοίαζα με το να γράφεις ένα query με κλειστά μάτια σε ταϊλανδέζικο πληκτρολόγιο, και να περιμένεις αυτό που θα γράψεις να σου δουλεύει.
gvre έγραψε:To from και to τι πληροφορία αποθηκεύουν;
Είναι προφανές, δεν το έπιασες; :D

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Εγγραφή σε πίνακα... που είναι το λάθος;;;

Δημοσίευση από cherouvim » 12 Ιαν 2012 20:25

dva_dev έγραψε:Το escaping είναι κόλπο. Το κόλπο για να χρησιμοποιήσεις δεσμευμένες λέξεις, ώστε να διευκολύνουν το migration από ανταγωνίστριες βάσεις δεδομένων.
Δεν νομίζω οτι ξεκίνησε για αυτό το λόγο. Με το escaping πχ μπορείς να έχεις ονόματα με κενά (spaces). Το αν έχει χρήση αυτό είναι άλλο θέμα.
dva_dev έγραψε:Αν "θέλεις" να υποστηρίξεις πάνω από μία βάση δεδομένων, πως περιμένεις να την υποστηρίξεις χωρίς να ξέρεις το λεξιλόγιο της κατ' ελάχιστο;
Μπορεί να χρησιμοποιείς ένα σύστημα πάνω από τις βάσεις, πχ ένα ORM. Το κάνω χρόνια και υποστηρίζω όσες βάσεις υποστηρίζει το ORM μου. Σε πραγματικές εγκαταστάσεις έχω βάλει σε MySQL, SQL Server και oracle την ίδια εφαρμογή με τα ίδια ονόματα πεδίων. Σε κάποιες ένα 0.5% τον πεδίων μπορεί να μην είναι valid αλλά αυτό δεν έχει σημασία γιατί το ORM κάνει escape τα πάντα. Αυτό βολεύει γιατί δεν θέλω όταν φτιάχνω την εφαρμογή να πρέπει να γνωρίζω εκ των προτέρων σε πιες βάσεις θα μπει και αν τα ονόματα είναι reserved.

Σου δίνω όλη τη λεπτομέρεια του συλλογισμού μου γιατί έβαλες το θέλεις σε εισαγωγικά, πιθανώς νομίζοντας οτι είναι ακραίο να θέλει κάποιος να υποστηρίξει πολλές βάσεις στην ίδια εφαρμογή.
dva_dev έγραψε:Είναι προφανές, δεν το έπιασες; :D
Δεν χρειάζεται η ειρωνεία ρε φίλε μου καλέ. Μπορεί να μην σου άρεσε το παράδειγμα γιατί κολλήσατε στο οτι δεν περιγράφει το datatype ή δεν έχει _id κάτι το οποίο είναι άσχετο με το εν λόγω θέμα (escaping στα column/table names). Το θέμα είναι αν έχει χρήση το escaping και όχι το αν σου αρέσει η ονοματολογία του σχήματος μου.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Εγγραφή σε πίνακα... που είναι το λάθος;;;

Δημοσίευση από dva_dev » 12 Ιαν 2012 21:35

Το "προφανές" δεν πήγαινε στο ότι δεν περιγράφει το data type, αλλά στο ότι δεν έχει καμία ένδειξη ότι είναι κάτι που σχετίζεται με τον items. Πολύ περισσότερο που σε ένα item (όπως το εννοείς γιατί είναι μια γενική έννοια), το primary key θα μπορούσε να είναι κάλλιστα είτε αριθμός (με ή χωρίς auto number) είτε κείμενο (π.χ. product key, hash, serial number), αναλόγως τη σχεδίαση της βάσης σου και αντίστοιχα το from, to του item_links.

Ούτως ή άλλως και σε πολλούς πίνακες που υπάρχουν πεδία fromdate, todate, το "date" δηλώνει τι είναι το περιεχόμενο και όχι το data type (συχνά είναι date ή datetime ή timestamp αλλά εξίσου συχνά ειδικά στη mysql το βλέπεις και σαν text).
Αντίστοιχα σε πολλούς πίνακες που υπάρχουν διευθύνσεις (πόλη, οδός, αριθμός, σε ξεχωριστά πεδία), το "αριθμός" δεν σημαίνει ότι θα έχει και datatype int ή κάτι αντίστοιχο, αντιθέτως, αν θέλουμε να είμαστε σωστοί θα πρέπει να έχει data type varchar.

Το escaping έχει χρήση, δε νομίζω να διαφωνεί κανείς. Για να πω όμως ειλικρινά τη γνώμη μου, πολύ κακώς. Οδηγεί/προτείνει σε κακές πρακτικές ονοματοδοσίας. Αυτό που κάνεις τώρα εύκολα σε μία βάση μετά θα το πληρώσεις σε συμβατότητα με άλλες βάσεις.
Είναι περίπου σαν τον κανόνα ότι ποτέ δεν πρέπει να κάνεις ελέγχους ισότητας με το true, αλλά πάντα με το false (= false ή <> false).

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Εγγραφή σε πίνακα... που είναι το λάθος;;;

Δημοσίευση από gvre » 13 Ιαν 2012 00:16

Δεν έχω πρόβλημα με τη χρήση των backticks. Δεν τα χρησιμοποιώ επειδή οι ονομασίες των πεδίων μου είναι αρκετά περιγραφικές και χωρίς κενά. Με αυτόν τον τρόπο αποφεύγω τη χρήση δεσμευμένων λέξεων.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες