php-mysql ερωτήσεις
php-mysql ερωτήσεις
Προσπαθώ να κάνω ένα query που περιέχει στήλες μερικά από τα ονόματα των οποίων είναι σύνθετα (π.χ. για την αξία ενός τιμολογίου η αντίστοιχη στήλη είναι TIM-AXIA). Προσοχή στην ενδιάμεση παύλα! Όταν καλώ το αρχείο php από ένα html μου πετάει ένα sql syntax error εκεί που βρίσκεται η παύλα.
Γιατί συμβαίνει αυτό; Μήπως ο χαρακτήρας παύλα είναι ειδικός στην sql ή στην php; Με κάτω παύλα δείχνει να παίζει, αλλά αν γίνεται θα προτιμούσα να μην αλλάξω τα ονόματα.
Γιατί συμβαίνει αυτό; Μήπως ο χαρακτήρας παύλα είναι ειδικός στην sql ή στην php; Με κάτω παύλα δείχνει να παίζει, αλλά αν γίνεται θα προτιμούσα να μην αλλάξω τα ονόματα.
Last edited by Luke on Tue Feb 06, 2007 7:14 pm, edited 1 time in total.
Είμαι ένας μοναχικός cowboy...
Αυτό με το addslashes() το χρησιμοποιώ αλλά αντί της stripslashes() χρησιμοποιώ την trim().
Το πρόβλημα είναι όμως ότι την παύλα δεν τη δίνω όταν εισάγω δεδομένα αλλά είναι το όνομα μιας στήλης που το έχω ορίσει όταν κατασκευάζω τους πίνακες. Εκεί δυστυχώς δε μπορώ να κάνω κάτι αντίστοιχο.
Το πρόβλημα είναι όμως ότι την παύλα δεν τη δίνω όταν εισάγω δεδομένα αλλά είναι το όνομα μιας στήλης που το έχω ορίσει όταν κατασκευάζω τους πίνακες. Εκεί δυστυχώς δε μπορώ να κάνω κάτι αντίστοιχο.
Είμαι ένας μοναχικός cowboy...
Για να καταλάβω, τραβάς το όνομα της στήλης από κάποια βάση και το εμφανίζεις σαν όνομα κάποιας στήλης? Η addslashes() τοποθετεί \ πριν από τους ειδικούς χαρακτήρες και η stripslashes() βγάζει τα \. Αν δεν το κάνεις stripslashes() τότε θα εμφανίζει \ πριν από ειδικούς χαρακτήρες. Το trim το μόνο που κάνει είναι να αφαιρεί τα κενά και μάλιστα νομίζω μόνο από την αρχή και το τέλος... Εγώ πάντως δουλεύω καθημερινά σε php και δεν έχω αντιμετωπίζει ποτέ τέτοιο πρόβλημα
Γράψε απόσπασμα του κώδικά σου αν θες μήπως μπορέσω να βοηθήσω

Όχι δεν τραβάω κανένα όνομα στήλης απλά χρησιμοποιώ στις επερωτήσεις μου τα ονόματα των στηλών. Το πρόβλημα εμφανίζεται στις γραμμές με το κόκκινο.
Καλά λεπτομέρειες θα μου πεις αλλά έτσι από περιέργεια θα ήθελα να μάθω γιατί γίνεται αυτό.
Αν αντί για αυτά γράφω αντίστοιχα: APOD_NO (με κάτω παύλα) και apod_no, apod_date, apod_poso (πάλι με κάτω παύλα) και αφού εννοείται αλλάξω τα ονόματα των στηλών στους πίνακες όλα δουλέυουν καλά. Αν το αφήσω έτσι όπως είναι μου βγάζει sql syntax error.Κώδικας wrote: $server = "localhost";
$base = "suppliersmanagement";
$uid = "";
$pwd = "";
//ginetai h sundesh me ton server
$conn = mysql_connect($server, $uid, $pwd) or die("Failure to communicate with database");
//ginetai h sundesh me th vash
mysql_select_db($base) or die(mysql_error());
//apo8hkeush twn timwn pou dwsame sta pedia se metavlhtes
$supplier = trim(addslashes($_POST['sid']));
$payid = trim(addslashes($_POST['recid']));
$paydate = trim(addslashes($_POST['recdate']));
$payamount = trim(addslashes($_POST['recamount']));
$payway = trim(addslashes($_POST['way']));
$result1 = mysql_query("SELECT * FROM PROMITH WHERE KWDIKOS = $supplier");
$result2 = mysql_query("SELECT * FROM APODEIXEIS WHERE APOD-NO = $payid");
//an yparxei hdh o kwdikos ston pinaka twn promitheutwn mia fora (ka8ws einai 3eno
//kleidi) kai epipleon an den yparxei hdh to idio id apodei3hs ston pinaka twn
//apodei3ewn, ginetai epityxws h eisagwgh alliws enhmerwnei gia lan8asmena dedomena
//eisagwghs kai mas protrepei na ta eisagoume 3ana
//sthn ousia ginetai elegxos gia thn anaforikh akeraiothta 3enou kleidiou kai gia thn
//akeraiothta proteuontos kleidiou mazi
if (mysql_num_rows($result1) == 1)
{
if (mysql_num_rows($result2) == 0)
{
$query = "INSERT INTO APODEIXEIS (kwdikos, apod-no, apod-date, apod-poso, tropos) VALUES ('$supplier','$payid','$paydate','$payamount', '$payway')";
mysql_query($query) or die(mysql_error());
Καλά λεπτομέρειες θα μου πεις αλλά έτσι από περιέργεια θα ήθελα να μάθω γιατί γίνεται αυτό.
Είμαι ένας μοναχικός cowboy...
Έστω ότι έχω το παρακάτω τμήμα κώδικα:
Γράφω το παρακάτω στο αρχείο deletePromith.php αλλά δε δουλεύει:
[edit]Άλλαξα τον τίτλο γιατί προέκυψαν κι άλλες απορίες στη συνέχεια.
[/edit]
[edit2]Λύθηκε! Αντί για ήθελε [/edit2]
Μ' αυτό τον τρόπο γεμίζω ένα drop down box. Όμως πώς μπορώ να περάσω την τιμή που επιλέγω από αυτό το drop down box στο αρχείο που δηλώνω στο action; Θέλω να πω, πώς μπορώ μετά στο αρχείο deletePromith.php να πάρω αυτή την τιμή και να τη χρηιμοποιήσω για ένα άλλο query στη βάση;Κώδικας wrote: $query = "SELECT kwdikos FROM PROMITH ORDER BY kwdikos";
$result = mysql_query($query) or die(mysql_error());
$html .= "<form method=POST action=deletePromith.php> <select name='sids'>";
while ($row = mysql_fetch_array($result))
{
$html .= "<option>" . $row['kwdikos'] . "</option>";
}
$html .= "</select></form>";
echo $html;
Γράφω το παρακάτω στο αρχείο deletePromith.php αλλά δε δουλεύει:
Είναι σωστός τρόπος αυτός για αυτήν την περίπτωση; Όταν, αντί για drop down, έδινα τιμή σ' ένα text field λειτουργούσε μια χαρά, γι' αυτό ρωτάω.Κώδικας wrote:$supplier = $_POST['sids'];
$result = mysql_query("SELECT * FROM PROMITH WHERE KWDIKOS = $supplier");
[edit]Άλλαξα τον τίτλο γιατί προέκυψαν κι άλλες απορίες στη συνέχεια.

[edit2]Λύθηκε! Αντί για
Code: Select all
$html .= "<option>" . $row['kwdikos'] . "</option>";
Code: Select all
$html .= "<option value="" . $row['kwdikos'] ."">" . $row['kwdikos'] . "</option>";
Είμαι ένας μοναχικός cowboy...
Επανέρχομαι με νέες απορίες!
Σε μια σελίδα php που έχω φτιάξει (που περιλαμβάνει και html εννοείται) έχω βάλει 2 drop down λίστες οι οποίες παίρνουν τα περιεχόμενά τους από μία βάση δεδομένων. Στην ουσία οι συνδυασμοί των περιεχομένων των 2 παρέχουν ένα σύνθετο κλειδί που αντιστοιχεί σε έναν από τους πίνακες της βάσης μου. Το θέμα είναι ότι γεμίζω και τις 2 λίστες με τις δυνατές τιμές από ολόκληρο τον πίνακα για κάθε πεδίο.
Για να το κάνω λίγο πιο φιλικό προς το χρήστη σκέφτηκα ότι χρειάζεται, σε περίπτωση που επιλέξω μία τιμή στη μία από τις δύο λίστες, με βάση αυτή την τιμή να μπορώ να "φιλτράρω" τις δυνατές τιμές που θα μου δίνει η άλλη λίστα. Όταν έδινα τα αποτελέσματα της μιας μέσω μιας φόρμας με τη μέθοδο post() σε μια άλλη php σελίδα ήταν σχετικά εύκολο να ελέγξω και να κάνω κάτι τέτοιο καθώς έκανα αναφορά στην τιμή που ήθελα μέσω της $_POST['kati']. Τώρα που θέλω να κάνω τον έλεγχο μέσα στην ίδια σελίδα τι μπορώ να κάνω;
Αν δεν κάνω λάθος ο πίνακας $_POST[] γεμίζει όταν πατάμε κάποιο κουμπί submit και στέλνονται τα περιεχόμενά του στην άλλη σελίδα αλλιώς παραμένει κενός, σωστά;
Βασικά αυτό που χρειάζομαι (και που δε γνωρίζω αν υπάρχει κάτι τέτοιο) είναι να αποθηκεύω σε κάποιο πίνακα την επιλεγμένη τιμή την εκάστοτε χρονική στιγμή (και όχι την προεπιλεγμένη) της μιας λίστας έτσι ώστε με βάση αυτήν να μπορώ να φιλτράρω στο select τα αποτελέσματα της άλλης με μια παραπάνω συνθήκη στο where clause.
Αυτή την επιλεγμένη τιμή της μίας drop down λίστας πώς μπορώ να την ανακτήσω ώστε να την χρησιμοποιήσω;
Σε μια σελίδα php που έχω φτιάξει (που περιλαμβάνει και html εννοείται) έχω βάλει 2 drop down λίστες οι οποίες παίρνουν τα περιεχόμενά τους από μία βάση δεδομένων. Στην ουσία οι συνδυασμοί των περιεχομένων των 2 παρέχουν ένα σύνθετο κλειδί που αντιστοιχεί σε έναν από τους πίνακες της βάσης μου. Το θέμα είναι ότι γεμίζω και τις 2 λίστες με τις δυνατές τιμές από ολόκληρο τον πίνακα για κάθε πεδίο.
Για να το κάνω λίγο πιο φιλικό προς το χρήστη σκέφτηκα ότι χρειάζεται, σε περίπτωση που επιλέξω μία τιμή στη μία από τις δύο λίστες, με βάση αυτή την τιμή να μπορώ να "φιλτράρω" τις δυνατές τιμές που θα μου δίνει η άλλη λίστα. Όταν έδινα τα αποτελέσματα της μιας μέσω μιας φόρμας με τη μέθοδο post() σε μια άλλη php σελίδα ήταν σχετικά εύκολο να ελέγξω και να κάνω κάτι τέτοιο καθώς έκανα αναφορά στην τιμή που ήθελα μέσω της $_POST['kati']. Τώρα που θέλω να κάνω τον έλεγχο μέσα στην ίδια σελίδα τι μπορώ να κάνω;
Αν δεν κάνω λάθος ο πίνακας $_POST[] γεμίζει όταν πατάμε κάποιο κουμπί submit και στέλνονται τα περιεχόμενά του στην άλλη σελίδα αλλιώς παραμένει κενός, σωστά;
Βασικά αυτό που χρειάζομαι (και που δε γνωρίζω αν υπάρχει κάτι τέτοιο) είναι να αποθηκεύω σε κάποιο πίνακα την επιλεγμένη τιμή την εκάστοτε χρονική στιγμή (και όχι την προεπιλεγμένη) της μιας λίστας έτσι ώστε με βάση αυτήν να μπορώ να φιλτράρω στο select τα αποτελέσματα της άλλης με μια παραπάνω συνθήκη στο where clause.
Αυτή την επιλεγμένη τιμή της μίας drop down λίστας πώς μπορώ να την ανακτήσω ώστε να την χρησιμοποιήσω;
Είμαι ένας μοναχικός cowboy...
Λοιπόν, ελπίζω να κατάλαβα καλά την απορία... Θα σου δώσω ένα παράδειγμα και ελπίζω να βοηθήσει. Έστω ότι έχουμε 2 drop down menu, στο πρώτο εμφανίζουμε μάρκα κινητού (π.χ. Nokia, SonyEricsson) και στο δεύτερο το μοντέλο του κινητού (π.χ. Nokia 3210). Όταν ο χρήστης επιλέξει την εταιρεία από το πρώτο drop down menu στο δεύτερο θα πρέπει να εμφανιστούν μόνο τα μοντέλα της συγκεκριμένης εταιρείας. Έστω ότι αυτά τα δεδομένα είναι περασμένα σε δύο πίνακες, σε ένα πίνακα έχουμε τις εταιρείες και σε έναν άλλο τα μοντέλα.
ΔΟΜΗ ΠΙΝΑΚΑ ΜΕ ΕΤΑΙΡΕΙΕΣ
TABLE companies
{
company_id int (ένας κωδικός αριθμός που χαρακτηρίζει την εταιρεία),
company varchar (το όνομα κάθε εταιρείας, πχ Samsung)
}
ΔΟΜΗ ΠΙΝΑΚΑ ΜΕ ΜΟΝΤΕΛΑ
TABLE models
{
id int autoincrement (αύξων αριθμός κάθε εγγραφής, μοναδικός κωδικός, ουσιαστικά θα μπορούσε να παραληφθεί αφού παρακάτω έχω μοναδικό κωδικό κάθε μοντέλου, το model_id, απλώς εγώ συνηθίζω στους πίνακές μου να βάζω και ένα αυξανόμενο κωδικό),
company_id int (ένας κωδικός αριθμός που χαρακτηρίζει την εταιρεία, αντίστοιχος του πίνακα companies),
model_id int (ένας κωδικός αριθμός που χαρακτηρίζει τo μοντέλο),
model varchar (το όνομα κάθε μοντέλου, πχ 3210)
}
Στο κομμάτι html-php που εμφανίζεις τα δύο μενού ο κώδικας είναι ο εξής:
<SELECT
onchange=getAvailableModels(this.value) name="company"> <OPTION value=""
selected>- Επιλέξτε εταιρεία-</OPTION>
<?php
$query = "SELECT company_id, company FROM companies";
$result = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($result) ) {
print "<OPTION value=\"$row[0]\">$row[1]</OPTION>";
}
?>
</SELECT>
<SELECT name="model"> <OPTION
value="" selected>-Επιλέξτε κινητό-</OPTION></SELECT>
και μετά φτιάχνεις το εξής σκριπτάκι:
<SCRIPT language=javascript type=text/javascript>
var All_Models= new Array(
<?php
$database = mysql_connect($hostname_database , $username_database , $password_database ) or die(mysql_error());
mysql_select_db($database_database , $database );
$query = "SELECT company_id, model, model_id, id FROM models order by model";
$result = mysql_query($query) or die(mysql_error());
$count = mysql_num_rows($result)-1;
$i = 0;
while ( $i<$count)
{ $row = mysql_fetch_array($result);
print "'$row[0]-$row[1],$row[3]',";
$i++;
}
$row = mysql_fetch_array($result);
print "'$row[0]-$row[1],$row[3]'";
?>
)
function getAvailableModels(strMake){
// get available models
document.modelAvailability.model.options.length = 0;
var looper = 0;
for(var i = 0; i < All_Models.length; i++){
var k = All_Models.indexOf('-');
if(All_Models.substr(0,k) == strMake){
getCurrent = document.modelAvailability.model.value;
document.modelAvailability.model.options.length = document.modelAvailability.model.options.length + 1;
var l = All_Models.indexOf(',');
var txt = All_Models.substr(k+1,l-k-1);
var val = All_Models.substr(l+1);
document.modelAvailability.model.options[looper].text = txt;
document.modelAvailability.model.options[looper].value = val;
looper++;
}
}
}
</SCRIPT>
Ουσιαστικά αρχικά δημιουργούμε ένα πίνακα All_Models, ο οποίος περιλαμβάνει όλα τα μοντέλα που έχει ο πίνακάς μας με τη μορφή company_id-model,id. Π.χ. ένα απόσπασμα θα ήταν το εξής
var All_Models= new Array( '8-6600,34','8-6310i,5','8-8210,41','8-8250,192','12-GX29,417','16-K750i,416')
όπου ο πρώτος αριθμός είναι ο κωδικός της εταιρείας, ίδιος στον πίνακα companies και στον πίνακα models, το δεύτερο είναο το μοντέλο κινητού, και το τρίτο είναι ο μοναδικός κωδικός κάθε εγγραφής του πίνακα models.
H συνάρτηση getAvailableModels παίρνει ως όρισμα την τιμή που δίνει ο χρήστης στο πρώτο μενού και μετά κάνει parsing σε κάθε στοιχείο του πίνακα, βρίσκει για ποιά στοιχεία το πρώτο κομμάτι είναι ίσο με την τιμή του ορίσματος, και μετά τραβάει την τιμή του model και του id και την περνάει στα αντίστοιχα πεδία του δεύτερου μενού.
Ελπίζω να ήταν αυτή η απορία σου και να μην τα έγραφα τσάμπα
. Μπλέξιμο, ε? Είναι λίγο μέχρι να καταλάβεις τη λογική... Ελπίζω να βοήθησα
ΔΟΜΗ ΠΙΝΑΚΑ ΜΕ ΕΤΑΙΡΕΙΕΣ
TABLE companies
{
company_id int (ένας κωδικός αριθμός που χαρακτηρίζει την εταιρεία),
company varchar (το όνομα κάθε εταιρείας, πχ Samsung)
}
ΔΟΜΗ ΠΙΝΑΚΑ ΜΕ ΜΟΝΤΕΛΑ
TABLE models
{
id int autoincrement (αύξων αριθμός κάθε εγγραφής, μοναδικός κωδικός, ουσιαστικά θα μπορούσε να παραληφθεί αφού παρακάτω έχω μοναδικό κωδικό κάθε μοντέλου, το model_id, απλώς εγώ συνηθίζω στους πίνακές μου να βάζω και ένα αυξανόμενο κωδικό),
company_id int (ένας κωδικός αριθμός που χαρακτηρίζει την εταιρεία, αντίστοιχος του πίνακα companies),
model_id int (ένας κωδικός αριθμός που χαρακτηρίζει τo μοντέλο),
model varchar (το όνομα κάθε μοντέλου, πχ 3210)
}
Στο κομμάτι html-php που εμφανίζεις τα δύο μενού ο κώδικας είναι ο εξής:
<SELECT
onchange=getAvailableModels(this.value) name="company"> <OPTION value=""
selected>- Επιλέξτε εταιρεία-</OPTION>
<?php
$query = "SELECT company_id, company FROM companies";
$result = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($result) ) {
print "<OPTION value=\"$row[0]\">$row[1]</OPTION>";
}
?>
</SELECT>
<SELECT name="model"> <OPTION
value="" selected>-Επιλέξτε κινητό-</OPTION></SELECT>
και μετά φτιάχνεις το εξής σκριπτάκι:
<SCRIPT language=javascript type=text/javascript>
var All_Models= new Array(
<?php
$database = mysql_connect($hostname_database , $username_database , $password_database ) or die(mysql_error());
mysql_select_db($database_database , $database );
$query = "SELECT company_id, model, model_id, id FROM models order by model";
$result = mysql_query($query) or die(mysql_error());
$count = mysql_num_rows($result)-1;
$i = 0;
while ( $i<$count)
{ $row = mysql_fetch_array($result);
print "'$row[0]-$row[1],$row[3]',";
$i++;
}
$row = mysql_fetch_array($result);
print "'$row[0]-$row[1],$row[3]'";
?>
)
function getAvailableModels(strMake){
// get available models
document.modelAvailability.model.options.length = 0;
var looper = 0;
for(var i = 0; i < All_Models.length; i++){
var k = All_Models.indexOf('-');
if(All_Models.substr(0,k) == strMake){
getCurrent = document.modelAvailability.model.value;
document.modelAvailability.model.options.length = document.modelAvailability.model.options.length + 1;
var l = All_Models.indexOf(',');
var txt = All_Models.substr(k+1,l-k-1);
var val = All_Models.substr(l+1);
document.modelAvailability.model.options[looper].text = txt;
document.modelAvailability.model.options[looper].value = val;
looper++;
}
}
}
</SCRIPT>
Ουσιαστικά αρχικά δημιουργούμε ένα πίνακα All_Models, ο οποίος περιλαμβάνει όλα τα μοντέλα που έχει ο πίνακάς μας με τη μορφή company_id-model,id. Π.χ. ένα απόσπασμα θα ήταν το εξής
var All_Models= new Array( '8-6600,34','8-6310i,5','8-8210,41','8-8250,192','12-GX29,417','16-K750i,416')
όπου ο πρώτος αριθμός είναι ο κωδικός της εταιρείας, ίδιος στον πίνακα companies και στον πίνακα models, το δεύτερο είναο το μοντέλο κινητού, και το τρίτο είναι ο μοναδικός κωδικός κάθε εγγραφής του πίνακα models.
H συνάρτηση getAvailableModels παίρνει ως όρισμα την τιμή που δίνει ο χρήστης στο πρώτο μενού και μετά κάνει parsing σε κάθε στοιχείο του πίνακα, βρίσκει για ποιά στοιχεία το πρώτο κομμάτι είναι ίσο με την τιμή του ορίσματος, και μετά τραβάει την τιμή του model και του id και την περνάει στα αντίστοιχα πεδία του δεύτερου μενού.
Ελπίζω να ήταν αυτή η απορία σου και να μην τα έγραφα τσάμπα


Μάλιστα... Σε ευχαριστώ πολύ για τον κόπο να γράψεις όλο αυτό το κατεβατό. Πάνω κάτω κατάλαβα τη λογική, απλά περίμενα ότι θα ήταν κάτι αρκετά πιο απλό.
Η αλήθεια είναι ότι με συναρτήσεις και scripts δεν έχω ασχοληθεί ακόμα αλλά να η ευκαιρία. Πιστεύω είναι ένα καλό ξεκίνημα.

Η αλήθεια είναι ότι με συναρτήσεις και scripts δεν έχω ασχοληθεί ακόμα αλλά να η ευκαιρία. Πιστεύω είναι ένα καλό ξεκίνημα.

Είμαι ένας μοναχικός cowboy...
Ούτε εγώ έχω ασχοληθεί πολύ με script είναι η αλήθεια, αλλά βοηθάνε πολλές φορές. Γενικά, ότι βρίσκεις σε άλλα site και σ'αρέσει ρίχνε μια ματιά στον κώδικα για να μαθαίνεις, όλοι αυτό κάνουν
Κι αυτό που έγραψα μη νομίζεις ότι το σκέφτηκα εγώ, κάπου το βρήκα και απλώς πρόσθεσα την Php για να το προσαρμόσω στο δικό μου πίνακα 


- Ganther
- Wow! Terabyte level
- Posts: 2273
- Joined: Fri Jun 18, 2004 9:31 am
- Academic status: 3rd year
- Gender: ♀
Εχω 2 πινακες. Στο ενα κινιτα τηλεφωνα και στο αλλο καταστηματα
Εκει που εχω τα κινητα τηλεφ, εχω κωδικο ως πεδιο.
Στα καταστηματα εχω κωδικο καταστηματος, και κωδικο κινητων που εχει το καταστημα και αποθεμα καταστηματος στο συγκεκριμενο προιον.
Πως μπορω να ελεγχω ενα προιον αν εχει σε ολα τα υποκαταστηματα 0 αποθεμα? Ξερει κανεις να μου πει το query που πρεπει να κανω?
(Στην ουσια η απορια ειναι αν υπαρχει query Που να απανταει ποσα κελια ειναι ισα με μια τιμη, και οχι να επιστρεφει τις τιμες των κελιων. Τοτε μπορω να κανω ενα query που να επιστρεψει ποσα κελια ειναι ολα που εχουν τιμες προιοντων, και μετα ενα που λεει ποσα ειναι 0, οποτε βλεπω αν ειναι σε ολα τα καταστηματα 0 το αποθεμα. )
Εκει που εχω τα κινητα τηλεφ, εχω κωδικο ως πεδιο.
Στα καταστηματα εχω κωδικο καταστηματος, και κωδικο κινητων που εχει το καταστημα και αποθεμα καταστηματος στο συγκεκριμενο προιον.
Πως μπορω να ελεγχω ενα προιον αν εχει σε ολα τα υποκαταστηματα 0 αποθεμα? Ξερει κανεις να μου πει το query που πρεπει να κανω?
(Στην ουσια η απορια ειναι αν υπαρχει query Που να απανταει ποσα κελια ειναι ισα με μια τιμη, και οχι να επιστρεφει τις τιμες των κελιων. Τοτε μπορω να κανω ενα query που να επιστρεψει ποσα κελια ειναι ολα που εχουν τιμες προιοντων, και μετα ενα που λεει ποσα ειναι 0, οποτε βλεπω αν ειναι σε ολα τα καταστηματα 0 το αποθεμα. )
Αν και καθυστερημένα θα πω τι θα έκανα εγώ. Δεδομένου ότι ξέρεις τον κωδικό του προϊόντος ο κώδικας θα είναι κάπως έτσι:
$query = "SELECT count(*) FROM table WHERE kwd_proion=$kwd_proion and apothema!=0";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);
$count = $row[0];
if($count!=0) { $apothema_mhden = false; }
Ουσιαστικά ψάχνεις να βρεις για ένα προϊόν που έχεις τον κωδικό του αν σε κάποιο υποκατάστημα υπάρχει απόθεμα που δεν είναι 0. Αν βρει εγγραφές, θα σου επιστρέψει τον αριθμό των εγγραφών στη μεταβλητή count. Αν πάλι δεν ξέρεις τον κωδικό του προϊόντος, τραβάς όλους τους κωδικούς με ένα query και μετά μπαίνεις σε ένα while, τραβάς σε μια μεταβλητή τον κωδικό κάθε φορά και μέσα στο while βάζεις τον παραπάνω κώδικα. Με αυτό θα βρεις όλα τα προϊόντα που δεν έχουν απόθεμα μηδέν σε όλα τα υποκαταστήματα, οπότε κρατάς τα υπόλοιπα.
Ελπίζω να σε κάλυψα
$query = "SELECT count(*) FROM table WHERE kwd_proion=$kwd_proion and apothema!=0";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);
$count = $row[0];
if($count!=0) { $apothema_mhden = false; }
Ουσιαστικά ψάχνεις να βρεις για ένα προϊόν που έχεις τον κωδικό του αν σε κάποιο υποκατάστημα υπάρχει απόθεμα που δεν είναι 0. Αν βρει εγγραφές, θα σου επιστρέψει τον αριθμό των εγγραφών στη μεταβλητή count. Αν πάλι δεν ξέρεις τον κωδικό του προϊόντος, τραβάς όλους τους κωδικούς με ένα query και μετά μπαίνεις σε ένα while, τραβάς σε μια μεταβλητή τον κωδικό κάθε φορά και μέσα στο while βάζεις τον παραπάνω κώδικα. Με αυτό θα βρεις όλα τα προϊόντα που δεν έχουν απόθεμα μηδέν σε όλα τα υποκαταστήματα, οπότε κρατάς τα υπόλοιπα.
Ελπίζω να σε κάλυψα

- Ganther
- Wow! Terabyte level
- Posts: 2273
- Joined: Fri Jun 18, 2004 9:31 am
- Academic status: 3rd year
- Gender: ♀
thanx a lot ρανια για αλλη μια φορα με εσωσες! Θα το δοκιμασω το απογευμα για να εχω mysql και ΡΗΡ στο pc και θα πω αν δουλευει...
Βασικα ειχα κανει κατι αλλα ειχα ενα προβλημα στο θεμα της php. Αν το καταλαβαινω σωστα, το εχεις απαντησει
edit
Δουλευει σε ευχαριστω πολυ! (αργησα λιγο να το γραψω εδω
)
Βασικα ειχα κανει κατι αλλα ειχα ενα προβλημα στο θεμα της php. Αν το καταλαβαινω σωστα, το εχεις απαντησει

edit
Δουλευει σε ευχαριστω πολυ! (αργησα λιγο να το γραψω εδω

- Ganther
- Wow! Terabyte level
- Posts: 2273
- Joined: Fri Jun 18, 2004 9:31 am
- Academic status: 3rd year
- Gender: ♀
Εχω το ιδιο προβλημα που ρωτησε πριν ο Luke, αλλα σε αλλη μορφη.
Πως μπορω να επεξεργαζομαι στην Ιδια σελιδα τον ιδιο πινακα.
Το ψαχνω και δεν μπορω να το βρω, και στα παραδειγματα που εχει η καστανια ειναι ολα μονο με αλλαγη σελιδα και Post μετα...
Βασικα κανω αυτο
και τωρα θελω να βαλω το storecode που πηρα απο τον πινακα σε μια μεταβλητη $storecode και το Quant που πηρα απο τον πινακα σε μια μεταβλητη $quant και να κανω update με αυτες τις μεταβλητες ενα αλλο πινακα stores...
Δοκιμασα πολλα πραγματα(νομιζω τα παντα) και τιποτα δεν πιανει... :(
αυτο δεν επρεπε να πιανει κανονικα???
Επισης αν αντι fetch_array εβαζα fetch_row δεν επρεπε μετα με $row[0] να μου τα εμφανιζει ωραια και καλα? καπως το εχω χασει το θεμα νομιζω... Ειμαι και αυπνος ολο το βραδι με PHP και mysql...
Πως μπορω να επεξεργαζομαι στην Ιδια σελιδα τον ιδιο πινακα.
Το ψαχνω και δεν μπορω να το βρω, και στα παραδειγματα που εχει η καστανια ειναι ολα μονο με αλλαγη σελιδα και Post μετα...
Βασικα κανω αυτο
Code: Select all
$query = "SELECT STORECODE,QUANT
FROM instore
WHERE TRANSCODE = '$transcode' AND PCODE = '$prodcutcode'";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);
Δοκιμασα πολλα πραγματα(νομιζω τα παντα) και τιποτα δεν πιανει... :(
Code: Select all
while ($row = mysql_fetch_array($result)) {
$storecode = $row['QUANT'];
//$storecode = $row[0]; }
Επισης αν αντι fetch_array εβαζα fetch_row δεν επρεπε μετα με $row[0] να μου τα εμφανιζει ωραια και καλα? καπως το εχω χασει το θεμα νομιζω... Ειμαι και αυπνος ολο το βραδι με PHP και mysql...

Ganther πρέπει να σβήσεις το ένα από τα δύο $row = mysql_fetch_array($result); Σε κάθε τέτοια εντολή που κάνεις τραβάς μία εγγραφή από το query που εκτέλεσες. Προφανώς το query σου επιστρέφει μία εγγραφή, αλλά εσύ τραβάς δύο φορές. Την πρώτη φορά θα δεις ότι όντως σου επιστρέφει τις μεταβλητές, τη δεύτερη όμως δεν έχει κάποια εγγραφή να τραβήξει οπότε δε μπαίνει καν μέσα στο while. Αν είσαι σίγουρος ότι θες την πρώτη εγγραφή τότε κράτα το απλό $row = mysql_fetch_array($result); Το while χρησιμοποιείται στην περίπτωση που έχεις άγνωστο αριθμό πλειάδων από το query και θες να τις επεξεργαστείς όλες.
- Ganther
- Wow! Terabyte level
- Posts: 2273
- Joined: Fri Jun 18, 2004 9:31 am
- Academic status: 3rd year
- Gender: ♀
Οχι, οχι δε με καταλαβες. Ειμαι ασχετος αλλα οχι τοσο
Aυτο που εγραψα ειναι και καλα δυο διαφορετικα που δοκιμασα γιαυτο τα εβαλα σε 2 ξεχωριστα κομματια.
Εγω νομιζα οτι θα επρεπε να δουλεψει με το πανω αλλα δε δουλευει. Βασικα κοιτα βαζω ακριβως αυτο
ΥΓ. Απορω πως εχεις υπομονη να δουλευεις σε αυτο το πραγμα

Aυτο που εγραψα ειναι και καλα δυο διαφορετικα που δοκιμασα γιαυτο τα εβαλα σε 2 ξεχωριστα κομματια.
Εγω νομιζα οτι θα επρεπε να δουλεψει με το πανω αλλα δε δουλευει. Βασικα κοιτα βαζω ακριβως αυτο
Προσεξε οτι το εχω βαλει να τραβαει μονο storecode για να ειναι ακομα πιο απλο. Και παλι δεν εμφανιζει τιποτα αυτο το πραγμα. Μου εχει σπασει τα νευρα. προφανως κανω βλακεια αλλα δε μπορω να το σκεφτω με τιποτα τι φταιει. O πινακας παντως ειναι γεματος, και τα δεδομενα που του βαζω ειναι ικανα να βρουνε εγγραφη...$query = "SELECT STORECODE
FROM instore
WHERE TRANSCODE = '$transcode' AND PCODE = '$prodcutcode'";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);
echo $row[0];
ΥΓ. Απορω πως εχεις υπομονη να δουλευεις σε αυτο το πραγμα

Last edited by Ganther on Tue Mar 06, 2007 11:11 am, edited 1 time in total.
Αν κατάλαβα καλά ο Ganther μόνο το ένα από τα 2 $row = mysql_fetch_array($result) χρησιμοποιεί, απλά μας έγραψε τις εκδοχές που έχει δοκιμάσει.
Νομίζω πάντως ότι δουλεύει μόνο με η εκδοχή με το while στην έκδοση της mysql που είχε η Kαστανιά στον alexandro. Το άλλο δε μου δούλευε όσες φορές το χρησιμοποίσα κάνοντας αναζήτηση με βάση το κλειδί.
Ganther, σου βγάζει κάποιο μήνυμα λάθους ή απλά δεν κάνει τίποτα; Επίσης για πρόσεξε κι αυτό τον αναγραμματισμό (productcode αντί prodcutcode) μήπως φταίει γιατί κι εγώ την έχω πατήσει πολλές φορές με τέτοιου είδους κουλά.
$query = "SELECT STORECODE,QUANT
FROM instore
WHERE TRANSCODE = '$transcode' AND PCODE = ' $prodcutcode '";
[edit]Τελικά, μετά το post του Ganther, δίκιο είχα για το παραπάνω.
[/edit]
Νομίζω πάντως ότι δουλεύει μόνο με η εκδοχή με το while στην έκδοση της mysql που είχε η Kαστανιά στον alexandro. Το άλλο δε μου δούλευε όσες φορές το χρησιμοποίσα κάνοντας αναζήτηση με βάση το κλειδί.
Ganther, σου βγάζει κάποιο μήνυμα λάθους ή απλά δεν κάνει τίποτα; Επίσης για πρόσεξε κι αυτό τον αναγραμματισμό (productcode αντί prodcutcode) μήπως φταίει γιατί κι εγώ την έχω πατήσει πολλές φορές με τέτοιου είδους κουλά.
$query = "SELECT STORECODE,QUANT
FROM instore
WHERE TRANSCODE = '$transcode' AND PCODE = ' $prodcutcode '";
[edit]Τελικά, μετά το post του Ganther, δίκιο είχα για το παραπάνω.

Είμαι ένας μοναχικός cowboy...