Κόλλημα σε κώδικα

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

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

Απάντηση
servetas
Δημοσιεύσεις: 304
Εγγραφή: 01 Φεβ 2010 15:08
Επικοινωνία:

Κόλλημα σε κώδικα

Δημοσίευση από servetas » 20 Ιούλ 2013 21:09

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

Σας φαίνεται τίποτα παράξενο; :hammer:

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

public function theory_checkride_assign($examid, $pilotid, $by, $at) {
$examid = DB::escape($examid);
$pilotid = DB::escape($pilotid);
$by = DB::escape($by);
$at = DB::escape($at);
$sql="INSERT INTO phpvms_fssexams_available
(id, examid, pilotid, by, at)
VALUES ('', '$examid', '$pilotid', '$by', '$at')";
         DB::query($sql);
}

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

public function assign_checkride()
{
$this->set('pilots', AcademyData::get_pilots());
$this->set('exams', AcademyData::get_exams());
$this->render('academy/checkride_assign.tpl');
}

public function checkride_theory_assign()
{
$ret = AcademyData::theory_checkride_assign($this->post->examid, $this->post->pilotid, $this->post->by, $this->post->at);
$this->set('message', 'Added');
$this->render('core_success.tpl');
}

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

<h3>Assign Theory Checkride to a Trainee</h3>
<center><form id="form" action="<?php echo adminaction&#40;'/academy/checkride_theory_assign/'&#41;; ?>" method="post">
<table width="60%" border="0">
<tr>
<td>Trainee&#58;</td>
<td><select name="pilotid">
<?php
foreach&#40;$pilots as $plt&#41;
&#123; ?>
<option value="<?php echo $plt->pilotid; ?>"><?php echo $plt->lastname; ?></option> <?php &#125; ?>
</select></td>
</tr>
<tr>
<td>Checkride Type&#58;</td>
<td><select name="examid">
<?php
foreach&#40;$exams as $exm&#41;
&#123; ?>
<option value="<?php echo $exm->id; ?>"><?php echo $exm->exam_description; ?></option> <?php &#125; ?>
</select></td>
</tr>
<tr>
<td colspan="2"><center><input type="submit" name="submit" value="Submit This Material" /></center></td>
</tr>
</table>
</form></center>
<br />
Ένα δεύτερο άτομο μπορεί να βρει τι βλακεία κάνω :P

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Κόλλημα σε κώδικα

Δημοσίευση από burnmind » 20 Ιούλ 2013 21:21

Τι error σου δίνει η βάση; Από εκεί θα καταλάβεις τι κάνεις λάθος.

Με μια γρήγορη ματιά στο query, χωρίς να ξέρω βέβαια τη μορφή της βάσης σου, είσαι σίγουρος πως πρέπει να περνάς ένα κενό string ως value του id, και πως άλλα τα 2 ids (examid και pilotid) είναι επίσης strings;

Όπως και να'χει, ακόμα και να βρεις την άκρη μαντεύοντας αυτή τη φορά, ενεργοποίησε τα errors της βάσης (στο production environment). Θα κάνουν το debugging πολύ πιο εύκολο.

servetas
Δημοσιεύσεις: 304
Εγγραφή: 01 Φεβ 2010 15:08
Επικοινωνία:

Κόλλημα σε κώδικα

Δημοσίευση από servetas » 20 Ιούλ 2013 21:26

Στις άλλες insert εντολές που έχω το id το περνάω ως κενό και απλά μέσα απο την βαση το έχω ορίσει ως Auto Increament. Το debugging πώς μπορώ να το ενεργοποιήσω μέσα απο το phpmyadmin γιατί το τρέχω στον local server.

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Κόλλημα σε κώδικα

Δημοσίευση από burnmind » 20 Ιούλ 2013 21:37

Αν το id είναι ορισμένο ως auto-increment, τότε μη το περνάς καθόλου στο insert. Θα δημιουργηθεί μόνο του.

Το phpmyadmin είναι άσχετο με τα errors. Αναλόγως με τον τρόπο με τον οποίο χειρίζεσαι τη σύνδεση με τη βάση, θα υπάρχει και ο τρόπος να εμφανίσεις τα errors. Πχ αν χρησιμοποιείς mysqli δες εδώ, κλπ. Αν χρησιμοποιείς κάποιο framework, σίγουρα σου δίνει κάποιον τρόπο να τα εμφανίσεις.

Πιο "μπακάλικα", μπορείς να κάνεις και το εξής: Κάνε ένα echo το query (στο παράδειγμά σου τη μεταβλητή $sql αφότου κάνεις assign τα values), και το αποτέλεσμα τρέξ' το χειροκίνητα από το phpmyadmin, όπου θα σου εμφανίσει το error (αν υπάρχει).

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Κόλλημα σε κώδικα

Δημοσίευση από geomagas » 20 Ιούλ 2013 22:08

Κάτι που σίγουρα είναι λάθος: Το by είναι λέξη της mysql (δεν είμαι σίγουρος και για το at). Σε τέτοιες περιπτώσεις, τα βάζουμε σε "ανάποδα αυτάκια", δηλ. `by`.
Μία καλή πρακτική είναι να το κάνεις πάντα, και για όλα τα πεδία (αν δεν βαριέσαι) ώστε να μη χρειάζεται να θυμάσαι πάντα ποιά πεδία σου κάνουν conflict με reserved words της mysql.
Διόρθωσε αυτό, και βλέπουμε παρακάτω...

servetas
Δημοσιεύσεις: 304
Εγγραφή: 01 Φεβ 2010 15:08
Επικοινωνία:

Κόλλημα σε κώδικα

Δημοσίευση από servetas » 20 Ιούλ 2013 22:15

Τελικά δούλεψε, το άλλαξα σε addedby και όλα είναι μια χαρά.

ΥΓ: Έχοντας ξοδέψει περισσότερες από 4 ώρες για αυτό σήμερα. Πάω να φύγω! :lol: :lol:

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Κόλλημα σε κώδικα

Δημοσίευση από geomagas » 20 Ιούλ 2013 22:21

καλή ξεκούραση! :wink:

servetas
Δημοσιεύσεις: 304
Εγγραφή: 01 Φεβ 2010 15:08
Επικοινωνία:

Κόλλημα σε κώδικα

Δημοσίευση από servetas » 20 Ιούλ 2013 22:25

Σε ευχαριστώ, να 'σε καλά! :D

Απάντηση

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

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

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