php-mysql ερωτήσεις

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
User avatar
Luke
Gbyte level
Gbyte level
Posts: 1388
Joined: Wed Aug 09, 2006 11:19 am
Academic status: Alumnus/a
Gender:

php-mysql ερωτήσεις

Post by Luke » Sat Feb 03, 2007 3:47 pm

Προσπαθώ να κάνω ένα query που περιέχει στήλες μερικά από τα ονόματα των οποίων είναι σύνθετα (π.χ. για την αξία ενός τιμολογίου η αντίστοιχη στήλη είναι TIM-AXIA). Προσοχή στην ενδιάμεση παύλα! Όταν καλώ το αρχείο php από ένα html μου πετάει ένα sql syntax error εκεί που βρίσκεται η παύλα.

Γιατί συμβαίνει αυτό; Μήπως ο χαρακτήρας παύλα είναι ειδικός στην sql ή στην php; Με κάτω παύλα δείχνει να παίζει, αλλά αν γίνεται θα προτιμούσα να μην αλλάξω τα ονόματα.
Last edited by Luke on Tue Feb 06, 2007 7:14 pm, edited 1 time in total.
Είμαι ένας μοναχικός cowboy...
User avatar
ράνια
Kilobyte level
Kilobyte level
Posts: 235
Joined: Wed Oct 12, 2005 2:51 pm

Post by ράνια » Sat Feb 03, 2007 3:53 pm

Δοκίμασε πριν βάλεις τη λέξη στη βάση να την περάσεις από τη συνάρτηση addslashes($string) κι όταν την τραβάς από την stripslashes($string). Αν είναι όντως ειδικός χαρακτήρας αυτό λογικά θα παίξει!
User avatar
Luke
Gbyte level
Gbyte level
Posts: 1388
Joined: Wed Aug 09, 2006 11:19 am
Academic status: Alumnus/a
Gender:

Post by Luke » Sat Feb 03, 2007 4:02 pm

Αυτό με το addslashes() το χρησιμοποιώ αλλά αντί της stripslashes() χρησιμοποιώ την trim().

Το πρόβλημα είναι όμως ότι την παύλα δεν τη δίνω όταν εισάγω δεδομένα αλλά είναι το όνομα μιας στήλης που το έχω ορίσει όταν κατασκευάζω τους πίνακες. Εκεί δυστυχώς δε μπορώ να κάνω κάτι αντίστοιχο.
Είμαι ένας μοναχικός cowboy...
User avatar
ράνια
Kilobyte level
Kilobyte level
Posts: 235
Joined: Wed Oct 12, 2005 2:51 pm

Post by ράνια » Sat Feb 03, 2007 4:10 pm

Για να καταλάβω, τραβάς το όνομα της στήλης από κάποια βάση και το εμφανίζεις σαν όνομα κάποιας στήλης? Η addslashes() τοποθετεί \ πριν από τους ειδικούς χαρακτήρες και η stripslashes() βγάζει τα \. Αν δεν το κάνεις stripslashes() τότε θα εμφανίζει \ πριν από ειδικούς χαρακτήρες. Το trim το μόνο που κάνει είναι να αφαιρεί τα κενά και μάλιστα νομίζω μόνο από την αρχή και το τέλος... Εγώ πάντως δουλεύω καθημερινά σε php και δεν έχω αντιμετωπίζει ποτέ τέτοιο πρόβλημα :???: Γράψε απόσπασμα του κώδικά σου αν θες μήπως μπορέσω να βοηθήσω
User avatar
Luke
Gbyte level
Gbyte level
Posts: 1388
Joined: Wed Aug 09, 2006 11:19 am
Academic status: Alumnus/a
Gender:

Post by Luke » Sat Feb 03, 2007 6:49 pm

Όχι δεν τραβάω κανένα όνομα στήλης απλά χρησιμοποιώ στις επερωτήσεις μου τα ονόματα των στηλών. Το πρόβλημα εμφανίζεται στις γραμμές με το κόκκινο.
Κώδικας 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());
Αν αντί για αυτά γράφω αντίστοιχα: APOD_NO (με κάτω παύλα) και apod_no, apod_date, apod_poso (πάλι με κάτω παύλα) και αφού εννοείται αλλάξω τα ονόματα των στηλών στους πίνακες όλα δουλέυουν καλά. Αν το αφήσω έτσι όπως είναι μου βγάζει sql syntax error.

Καλά λεπτομέρειες θα μου πεις αλλά έτσι από περιέργεια θα ήθελα να μάθω γιατί γίνεται αυτό.
Είμαι ένας μοναχικός cowboy...
User avatar
ράνια
Kilobyte level
Kilobyte level
Posts: 235
Joined: Wed Oct 12, 2005 2:51 pm

Post by ράνια » Sat Feb 03, 2007 10:38 pm

Α κατάλαβα! Νομίζω όμως ότι το πρόβλημά σου δεν έχει λύση, αναγκαστικά θα πρέπει να αλλάξεις το όνομα της στήλης... Κι εμένα μου χτυπούσε πρόβλημα όταν πήγαινε να εκτελέσει ένα query γιατί είχα ονομάσει ένα πεδίο update κι επειδή είναι εντολή της sql δεν το δεχότανε...
User avatar
Luke
Gbyte level
Gbyte level
Posts: 1388
Joined: Wed Aug 09, 2006 11:19 am
Academic status: Alumnus/a
Gender:

Post by Luke » Sat Feb 03, 2007 11:45 pm

ΟΚ, ευχαριστώ πολύ για τον κόπο να το κοιτάξεις.
Είμαι ένας μοναχικός cowboy...
User avatar
Luke
Gbyte level
Gbyte level
Posts: 1388
Joined: Wed Aug 09, 2006 11:19 am
Academic status: Alumnus/a
Gender:

Post by Luke » Tue Feb 06, 2007 7:11 pm

Έστω ότι έχω το παρακάτω τμήμα κώδικα:
Κώδικας 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;
Μ' αυτό τον τρόπο γεμίζω ένα drop down box. Όμως πώς μπορώ να περάσω την τιμή που επιλέγω από αυτό το drop down box στο αρχείο που δηλώνω στο action; Θέλω να πω, πώς μπορώ μετά στο αρχείο deletePromith.php να πάρω αυτή την τιμή και να τη χρηιμοποιήσω για ένα άλλο query στη βάση;

Γράφω το παρακάτω στο αρχείο deletePromith.php αλλά δε δουλεύει:
Κώδικας wrote:$supplier = $_POST['sids'];

$result = mysql_query("SELECT * FROM PROMITH WHERE KWDIKOS = $supplier");
Είναι σωστός τρόπος αυτός για αυτήν την περίπτωση; Όταν, αντί για drop down, έδινα τιμή σ' ένα text field λειτουργούσε μια χαρά, γι' αυτό ρωτάω.



[edit]Άλλαξα τον τίτλο γιατί προέκυψαν κι άλλες απορίες στη συνέχεια. :-D [/edit]

[edit2]Λύθηκε! Αντί για

Code: Select all

$html .= "<option>" . $row['kwdikos'] . "</option>";
ήθελε

Code: Select all

$html .= "<option value="" . $row['kwdikos'] ."">" . $row['kwdikos'] . "</option>";
[/edit2]
Είμαι ένας μοναχικός cowboy...
User avatar
ράνια
Kilobyte level
Kilobyte level
Posts: 235
Joined: Wed Oct 12, 2005 2:51 pm

Post by ράνια » Wed Feb 07, 2007 11:28 am

Έτσι ;) Άμα δεν του στείλεις το value πού να το βρει το καημένο? :-p Δυστυχώς όπως λέει και στο βιβλίο του Κάβουρα, τα προγράμματα κάνουν πάντα αυτό που τους λέμε και όχι αυτό που θέλουμε...
User avatar
Luke
Gbyte level
Gbyte level
Posts: 1388
Joined: Wed Aug 09, 2006 11:19 am
Academic status: Alumnus/a
Gender:

Post by Luke » Wed Feb 07, 2007 4:12 pm

Βασικά δεν είχα κατανοήσει τη χρησιμότητα του value γιατί στην html φαινόταν μια χαρά αλλά δεν μπορούσε να το μεταβιβάσει, κάτι που δε μπορούσα να το δω άμεσα εγώ, γι' αυτό και το είχα παραλήψει αρχικά.
Είμαι ένας μοναχικός cowboy...
User avatar
Luke
Gbyte level
Gbyte level
Posts: 1388
Joined: Wed Aug 09, 2006 11:19 am
Academic status: Alumnus/a
Gender:

Post by Luke » Sat Feb 17, 2007 1:19 am

Επανέρχομαι με νέες απορίες!

Σε μια σελίδα php που έχω φτιάξει (που περιλαμβάνει και html εννοείται) έχω βάλει 2 drop down λίστες οι οποίες παίρνουν τα περιεχόμενά τους από μία βάση δεδομένων. Στην ουσία οι συνδυασμοί των περιεχομένων των 2 παρέχουν ένα σύνθετο κλειδί που αντιστοιχεί σε έναν από τους πίνακες της βάσης μου. Το θέμα είναι ότι γεμίζω και τις 2 λίστες με τις δυνατές τιμές από ολόκληρο τον πίνακα για κάθε πεδίο.

Για να το κάνω λίγο πιο φιλικό προς το χρήστη σκέφτηκα ότι χρειάζεται, σε περίπτωση που επιλέξω μία τιμή στη μία από τις δύο λίστες, με βάση αυτή την τιμή να μπορώ να "φιλτράρω" τις δυνατές τιμές που θα μου δίνει η άλλη λίστα. Όταν έδινα τα αποτελέσματα της μιας μέσω μιας φόρμας με τη μέθοδο post() σε μια άλλη php σελίδα ήταν σχετικά εύκολο να ελέγξω και να κάνω κάτι τέτοιο καθώς έκανα αναφορά στην τιμή που ήθελα μέσω της $_POST['kati']. Τώρα που θέλω να κάνω τον έλεγχο μέσα στην ίδια σελίδα τι μπορώ να κάνω;
Αν δεν κάνω λάθος ο πίνακας $_POST[] γεμίζει όταν πατάμε κάποιο κουμπί submit και στέλνονται τα περιεχόμενά του στην άλλη σελίδα αλλιώς παραμένει κενός, σωστά;

Βασικά αυτό που χρειάζομαι (και που δε γνωρίζω αν υπάρχει κάτι τέτοιο) είναι να αποθηκεύω σε κάποιο πίνακα την επιλεγμένη τιμή την εκάστοτε χρονική στιγμή (και όχι την προεπιλεγμένη) της μιας λίστας έτσι ώστε με βάση αυτήν να μπορώ να φιλτράρω στο select τα αποτελέσματα της άλλης με μια παραπάνω συνθήκη στο where clause.
Αυτή την επιλεγμένη τιμή της μίας drop down λίστας πώς μπορώ να την ανακτήσω ώστε να την χρησιμοποιήσω;
Είμαι ένας μοναχικός cowboy...
User avatar
ράνια
Kilobyte level
Kilobyte level
Posts: 235
Joined: Wed Oct 12, 2005 2:51 pm

Post by ράνια » Sat Feb 17, 2007 1:10 pm

Λοιπόν, ελπίζω να κατάλαβα καλά την απορία... Θα σου δώσω ένα παράδειγμα και ελπίζω να βοηθήσει. Έστω ότι έχουμε 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 και την περνάει στα αντίστοιχα πεδία του δεύτερου μενού.


Ελπίζω να ήταν αυτή η απορία σου και να μην τα έγραφα τσάμπα :oops: . Μπλέξιμο, ε? Είναι λίγο μέχρι να καταλάβεις τη λογική... Ελπίζω να βοήθησα
;)
User avatar
Luke
Gbyte level
Gbyte level
Posts: 1388
Joined: Wed Aug 09, 2006 11:19 am
Academic status: Alumnus/a
Gender:

Post by Luke » Sat Feb 17, 2007 1:52 pm

Μάλιστα... Σε ευχαριστώ πολύ για τον κόπο να γράψεις όλο αυτό το κατεβατό. Πάνω κάτω κατάλαβα τη λογική, απλά περίμενα ότι θα ήταν κάτι αρκετά πιο απλό. :???:
Η αλήθεια είναι ότι με συναρτήσεις και scripts δεν έχω ασχοληθεί ακόμα αλλά να η ευκαιρία. Πιστεύω είναι ένα καλό ξεκίνημα. :-)
Είμαι ένας μοναχικός cowboy...
User avatar
ράνια
Kilobyte level
Kilobyte level
Posts: 235
Joined: Wed Oct 12, 2005 2:51 pm

Post by ράνια » Sat Feb 17, 2007 1:59 pm

Ούτε εγώ έχω ασχοληθεί πολύ με script είναι η αλήθεια, αλλά βοηθάνε πολλές φορές. Γενικά, ότι βρίσκεις σε άλλα site και σ'αρέσει ρίχνε μια ματιά στον κώδικα για να μαθαίνεις, όλοι αυτό κάνουν :-p Κι αυτό που έγραψα μη νομίζεις ότι το σκέφτηκα εγώ, κάπου το βρήκα και απλώς πρόσθεσα την Php για να το προσαρμόσω στο δικό μου πίνακα ;)
User avatar
Ganther
Wow! Terabyte level
Wow! Terabyte level
Posts: 2273
Joined: Fri Jun 18, 2004 9:31 am
Academic status: 3rd year
Gender:

Post by Ganther » Thu Feb 22, 2007 3:55 am

Εχω 2 πινακες. Στο ενα κινιτα τηλεφωνα και στο αλλο καταστηματα

Εκει που εχω τα κινητα τηλεφ, εχω κωδικο ως πεδιο.
Στα καταστηματα εχω κωδικο καταστηματος, και κωδικο κινητων που εχει το καταστημα και αποθεμα καταστηματος στο συγκεκριμενο προιον.

Πως μπορω να ελεγχω ενα προιον αν εχει σε ολα τα υποκαταστηματα 0 αποθεμα? Ξερει κανεις να μου πει το query που πρεπει να κανω?

(Στην ουσια η απορια ειναι αν υπαρχει query Που να απανταει ποσα κελια ειναι ισα με μια τιμη, και οχι να επιστρεφει τις τιμες των κελιων. Τοτε μπορω να κανω ενα query που να επιστρεψει ποσα κελια ειναι ολα που εχουν τιμες προιοντων, και μετα ενα που λεει ποσα ειναι 0, οποτε βλεπω αν ειναι σε ολα τα καταστηματα 0 το αποθεμα. )
User avatar
TaRaNTuLa
Gbyte level
Gbyte level
Posts: 1598
Joined: Fri Apr 30, 2004 4:54 pm
Academic status: PhD
Gender:
Location: MMLab

Post by TaRaNTuLa » Tue Feb 27, 2007 1:25 pm

με GROUP BY και COUNT θα μπορείς να πάρεις το επιθυμητό αποτέλεσμα, πιστεύω... :???:
Tamiya rulezZz....

TL-01 Full Carbon, TL-01 Upgraded, FF-01 Upgraded, M03, CC-01, ΤΤ-01 TypeE, Volvo και Scania Trucks και η λίστα συνεχίζεται...
User avatar
ράνια
Kilobyte level
Kilobyte level
Posts: 235
Joined: Wed Oct 12, 2005 2:51 pm

Post by ράνια » Tue Feb 27, 2007 2:31 pm

Αν και καθυστερημένα θα πω τι θα έκανα εγώ. Δεδομένου ότι ξέρεις τον κωδικό του προϊόντος ο κώδικας θα είναι κάπως έτσι:

$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 βάζεις τον παραπάνω κώδικα. Με αυτό θα βρεις όλα τα προϊόντα που δεν έχουν απόθεμα μηδέν σε όλα τα υποκαταστήματα, οπότε κρατάς τα υπόλοιπα.

Ελπίζω να σε κάλυψα :-p
User avatar
Ganther
Wow! Terabyte level
Wow! Terabyte level
Posts: 2273
Joined: Fri Jun 18, 2004 9:31 am
Academic status: 3rd year
Gender:

Post by Ganther » Wed Feb 28, 2007 2:39 pm

thanx a lot ρανια για αλλη μια φορα με εσωσες! Θα το δοκιμασω το απογευμα για να εχω mysql και ΡΗΡ στο pc και θα πω αν δουλευει...
Βασικα ειχα κανει κατι αλλα ειχα ενα προβλημα στο θεμα της php. Αν το καταλαβαινω σωστα, το εχεις απαντησει ;)

edit
Δουλευει σε ευχαριστω πολυ! (αργησα λιγο να το γραψω εδω :oops: )
User avatar
Ganther
Wow! Terabyte level
Wow! Terabyte level
Posts: 2273
Joined: Fri Jun 18, 2004 9:31 am
Academic status: 3rd year
Gender:

Post by Ganther » Tue Mar 06, 2007 9:24 am

Εχω το ιδιο προβλημα που ρωτησε πριν ο Luke, αλλα σε αλλη μορφη.
Πως μπορω να επεξεργαζομαι στην Ιδια σελιδα τον ιδιο πινακα.
Το ψαχνω και δεν μπορω να το βρω, και στα παραδειγματα που εχει η καστανια ειναι ολα μονο με αλλαγη σελιδα και 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);
και τωρα θελω να βαλω το storecode που πηρα απο τον πινακα σε μια μεταβλητη $storecode και το Quant που πηρα απο τον πινακα σε μια μεταβλητη $quant και να κανω update με αυτες τις μεταβλητες ενα αλλο πινακα stores...

Δοκιμασα πολλα πραγματα(νομιζω τα παντα) και τιποτα δεν πιανει... :(

Code: Select all

while ($row = mysql_fetch_array($result)) {

  $storecode =  $row['QUANT'];
//$storecode = $row[0]; }
αυτο δεν επρεπε να πιανει κανονικα???

Επισης αν αντι fetch_array εβαζα fetch_row δεν επρεπε μετα με $row[0] να μου τα εμφανιζει ωραια και καλα? καπως το εχω χασει το θεμα νομιζω... Ειμαι και αυπνος ολο το βραδι με PHP και mysql... :smt022
User avatar
ράνια
Kilobyte level
Kilobyte level
Posts: 235
Joined: Wed Oct 12, 2005 2:51 pm

Post by ράνια » Tue Mar 06, 2007 10:36 am

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

Post by Ganther » Tue Mar 06, 2007 10:59 am

Οχι, οχι δε με καταλαβες. Ειμαι ασχετος αλλα οχι τοσο :-D
Aυτο που εγραψα ειναι και καλα δυο διαφορετικα που δοκιμασα γιαυτο τα εβαλα σε 2 ξεχωριστα κομματια.

Εγω νομιζα οτι θα επρεπε να δουλεψει με το πανω αλλα δε δουλευει. Βασικα κοιτα βαζω ακριβως αυτο
$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];
Προσεξε οτι το εχω βαλει να τραβαει μονο storecode για να ειναι ακομα πιο απλο. Και παλι δεν εμφανιζει τιποτα αυτο το πραγμα. Μου εχει σπασει τα νευρα. προφανως κανω βλακεια αλλα δε μπορω να το σκεφτω με τιποτα τι φταιει. O πινακας παντως ειναι γεματος, και τα δεδομενα που του βαζω ειναι ικανα να βρουνε εγγραφη...

ΥΓ. Απορω πως εχεις υπομονη να δουλευεις σε αυτο το πραγμα :-p
Last edited by Ganther on Tue Mar 06, 2007 11:11 am, edited 1 time in total.
User avatar
Luke
Gbyte level
Gbyte level
Posts: 1388
Joined: Wed Aug 09, 2006 11:19 am
Academic status: Alumnus/a
Gender:

Post by Luke » Tue Mar 06, 2007 11:03 am

Αν κατάλαβα καλά ο 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]
Είμαι ένας μοναχικός cowboy...
Post Reply

Return to “Προγραμματισμός”