Εμφάνιση προγραμματισμένων event σε σελίδα

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

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

Απάντηση
akism
Δημοσιεύσεις: 14
Εγγραφή: 19 Οκτ 2015 15:09

Εμφάνιση προγραμματισμένων event σε σελίδα

Δημοσίευση από akism » 12 Νοέμ 2015 19:23

Καλησπέρα σας,
ας υποθέσουμε ότι έχουμε ένα πίνακα σε mysql βάση ο οποίος έχει τις εξής πληροφορίες:
+----+-----------+--------------+------------+----------+----------+
| id | firstname | lastname | apDate | apStart | apEnd |
+----+-----------+--------------+------------+----------+----------+
| 18 | name_1 | lname_1 | 2015-11-09 | 08:00:00 | 10:00:00 |
| 19 | name_2 | lname_2 | 2015-11-09 | 08:00:00 | 09:30:00 |
| 20 | name_3 | lname_3 | 2015-11-09 | 10:00:00 | 11:30:00 |
+----+-----------+--------------+------------+----------+----------+

Ο παραπάνω πίνακας αφορά προγραμματισμένα ραντεβού ενός ιατρείου.
Θέλω να φτιάξω μία σελίδα στην οποία θα εμφανίζονται τα ημερίσια (συγκεκριμένα τα σημερινά ραντεβού // η ημερομηνία έρχεται στο query με $_POST) έτσι:
$sql = "SELECT * FROM table WHERE apDate = '$_POST[apDate]'";

Αυτό που προσπαθώ να πετύχω είναι να τα εμφανίζω στη σελίδα κάπως έτσι:

ΩΡΑ | Όνομα
===========
08:00 | lname_1
.........| lname_2
09:00 |
10:00 | lname_3
11:00 |
...κλπ


Οι ώρες στην πρώτη στήλη θα ξεκινάνε από τις 8:00 που ανοίγει το ιατρείο μέχρι πχ τις 16:00 και σε κάθε ώρα από αυτές, θέλω στη διπλανή στήλη να εμφανίσω τα ονόματα των ασθενών (ένα σε κάθε γραμμή // αν προσέξετε στον πίνακα, στις 8:00 έχει δυο ραντεβού). Αν για παράδειγμα στις 10:00 δεν υπάρχει προγραμματισμένο ραντεβού η διπλανή στήλη θα είναι κενή.

Θα το εκτιμούσα πάρα πολύ αν κάποιος μπορούσε να βοηθήσει στο συγκεκριμένο γιατί παλεύω 5 μέρες τώρα και δεν καταφέρνω να τα εμφανίσω σωστά (στις περισσότερες προσπάθειες κατάφερα να εμφανίσω μόνο το πρώτο ραντεβού των 8:00 :( ).

Σας ευχαριστώ προκαταβολικά.

Άβαταρ μέλους
webdevgr
Δημοσιεύσεις: 696
Εγγραφή: 11 Δεκ 2010 17:25
Τοποθεσία: Ηράκλειο
Επικοινωνία:

Εμφάνιση προγραμματισμένων event σε σελίδα

Δημοσίευση από webdevgr » 13 Νοέμ 2015 01:23

Εγώ δεν κατάλαβα που κόλλησες. Στο πως θα "τυπώσεις" στη σελίδα τα δεδομένα που τραβάς από τη βάση ή στο ότι πχ στην πρώτη στήλη θα εμφανίζεται δύο φορές το 8:00;

akism
Δημοσιεύσεις: 14
Εγγραφή: 19 Οκτ 2015 15:09

Εμφάνιση προγραμματισμένων event σε σελίδα

Δημοσίευση από akism » 13 Νοέμ 2015 14:54

Το πρόβλημά μου είναι το πως θα τυπώσω τα δεδομένα που τραβάω από τη βάση σε συγκεκριμένες θέσεις στη σελίδα. Πιο αναλυτικά:

Θεωρούμε ότι θέλω να εμφανίσω τα ραντεβού για τις 9 Νοε 2015.
Μέσα στο php αρχείο εκτελώ την $sql = "SELECT * FROM table WHERE apDate = '$_POST[apDate]'"; όπου το $_POST[apDate] παίρνει τιμή από μία πρηγούμενη φόρμα με ένα calendar.
Tο αποτέλεσμα του query μου φέρνει τα εξής:
+----+-----------+----------+------------+----------+----------+
| id | firstname | lastname | apDate | apStart | apEnd |
+----+-----------+----------+------------+----------+----------+
| 18 | fname_1 | lname_1 | 2015-11-09 | 09:00:00 | 11:00:00 |
| 19 | fname_2 | lname_2 | 2015-11-09 | 08:00:00 | 09:30:00 |
| 20 | fname_3 | lname_3 | 2015-11-09 | 12:00:00 | 13:30:00 |
| 25 | fname_5 | lname_5 | 2015-11-09 | 08:00:00 | 09:00:00 |
+----+-----------+----------+------------+----------+----------+

Δεν με καλύπτει η συγκεκριμένη εμφάνιση στη σελίδα με τα ραντεβού.
Αυτό που θέλω να κάνω είναι να δημιουργήσω ένα πινακάκι με 2 στήλες όπου η πρωτη θα έχει ώρες από τις 8:00 μέχρι πχ 16:00 και δίπλα από κάθε ώρα να εμφανίζονται τα ραντεβού που έχουν προγραμματιστεί για τη συγκεκριμένη χρονική στιγμή (αν σε κάποια ώρα δεν υπάρχουν ραντεβού να τυπώνει "-").

Το πιο κοντινό στο ζητούμενο που έχω καταφέρει είναι να εμφανίσω το παρακάτω:
08:00:00 lname_2
09:00:00 -
10:00:00 -
11:00:00 -
12:00:00 -
13:00:00 -
14:00:00 -
15:00:00 -
16:00:00 -

Αυτό τυπώθηκε με τον εξής κώδικα:

$sql3 = "SELECT * FROM pat WHERE apDate = '$_POST[apDate]' ORDER BY apStart ASC";
$result3 = $conn->query($sql3);
echo "<p><table border='1'>";
$k = 7;
if ($result3->num_rows > 0) {
while ($row = $result3->fetch_assoc()) {
while ($k < 16) { // loop για να τυπώνει τις ώρες
$k++;
if ($k <=9) {
$testVar = "0".$k.":00:00"; // φτιάχνουμε το $k σε μορφή ώρας για να τυπωθεί στον πίνακα
if ($testVar == $row['apStart']) { // συγκρίνουμε το $k με την ώρα από το query
echo "<tr><td>" . $testVar . "</td><td>" . $row['lastname'] . "</td></tr>";
} else {
echo "<tr><td>" . $testVar . "</td><td> " . " - " . "</td></tr>";
}
} else {
$testVar2 = $k.":00:00";
if ($testVar2 == $row['apStart']) {
echo "<tr><td>" . $testVar2 . "</td><td>" . $row['lastname'] . "</td></tr>";
} else {
echo "<tr><td>" . $testVar2 . "</td><td> " . " - " . "</td></tr>";
}
}
}
}
} else {
echo "No data in DB";
}
echo "</table></p>";


Όπως βλέπετε τυπώνει μόνο το πρώτο που βρίσκει και από εκεί και μετά τίποτα άλλο ενώ αυτό που θέλω είναι να τυπώσει δίπλα στις 8:00 τα δυο ραντεβού που είναι προγραμματισμένα για τις 8:00 (σε διαφορετικές γραμμές), δίπλα στις 9:00 το ραντεβού των 9:00 κ.ο.κ

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

Εμφάνιση προγραμματισμένων event σε σελίδα

Δημοσίευση από gvre » 13 Νοέμ 2015 16:28

Μπορείς να ξεκινήσεις με το παρακάτω και να κάνεις τις αλλαγές που χρειάζονται, για να το παρουσιάσεις με τον τρόπο που θέλεις.

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

$conn = new PDO&#40;'mysql&#58;host=127.0.0.1; dbname=test;', 'user', 'pass'&#41;;
$sql = 'SELECT apStart, apEnd, id, firstname, lastname FROM pat WHERE apDate = ?';
$stmt = $conn->prepare&#40;$sql&#41;;
$stmt->execute&#40;&#91; $_POST&#91;'apDate'&#93; &#93;&#41;;
$res = $stmt->fetchAll&#40;PDO&#58;&#58;FETCH_ASSOC | PDO&#58;&#58;FETCH_GROUP&#41;;

$time = &#91;
    '08&#58;00&#58;00',
    '09&#58;00&#58;00',
    '10&#58;00&#58;00',
    '11&#58;00&#58;00',
    '12&#58;00&#58;00',
    '13&#58;00&#58;00',
    '14&#58;00&#58;00',
    '15&#58;00&#58;00',
    '16&#58;00&#58;00'
&#93;;

foreach&#40;$time as $t&#41; &#123;
    echo $t . ' -> ';
    if &#40;isset&#40;$res&#91;$t&#93;&#41;&#41; &#123;
        echo implode&#40;', ', array_column&#40;$res&#91;$t&#93;, 'lastname'&#41;&#41;;
    &#125; else &#123;
        echo '-';
    &#125;
    echo "\n";
&#125;
Αν είσαι σε php < 5.5, πρόσθεσε το παρακάτω κάπου στην αρχή.

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

if &#40;!function_exists&#40;'array_column'&#41;&#41; &#123;
    function array_column&#40;$array, $col&#41; &#123;
        return array_map&#40;function&#40;$e&#41; use&#40;$col&#41; &#123; return $e&#91;$col&#93;; &#125;, $array&#41;;
    &#125;
&#125;

Άβαταρ μέλους
webdevgr
Δημοσιεύσεις: 696
Εγγραφή: 11 Δεκ 2010 17:25
Τοποθεσία: Ηράκλειο
Επικοινωνία:

Εμφάνιση προγραμματισμένων event σε σελίδα

Δημοσίευση από webdevgr » 13 Νοέμ 2015 16:40

Πολύ καλή λύση, αλλά προϋποθέτει ότι οι ώρες είναι στάνταρ κι ότι δεν πρόκειται ο χρήστης να περάσει τιμές του στυλ 8:15 ή 8:30

Αν οι ώρες επιλέγονται ελεύθερα και έχουν μεγάλο εύρος, θα πρέπει να φτιάξεις ένα array με τις ώρες που υπάρχουν στη βάση και subarrays με τα ραντεβού κάθε ώρας.

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

Εμφάνιση προγραμματισμένων event σε σελίδα

Δημοσίευση από gvre » 13 Νοέμ 2015 16:47

Εννοείται ότι σε αυτή την περίπτωση αλλάζουν τα πράγματα. Από τα δεδομένα και τα λεγόμενα του akism συμπέρανα ότι θα είναι fixed οι ώρες.

Άβαταρ μέλους
webdevgr
Δημοσιεύσεις: 696
Εγγραφή: 11 Δεκ 2010 17:25
Τοποθεσία: Ηράκλειο
Επικοινωνία:

Εμφάνιση προγραμματισμένων event σε σελίδα

Δημοσίευση από webdevgr » 13 Νοέμ 2015 16:52

Η επισήμανση μου πήγαινε στον akism ώστε να κρατήσει σταθερές τις ώρες στη φόρμα εισαγωγής, γιατί αλλιώς κάποια στιγμή θα βρεθεί προ εκπλήξεως και θα αναρωτιέται γιατί δεν εμφανίζονται οι εγγραφές :)

akism
Δημοσιεύσεις: 14
Εγγραφή: 19 Οκτ 2015 15:09

Εμφάνιση προγραμματισμένων event σε σελίδα

Δημοσίευση από akism » 13 Νοέμ 2015 16:53

webdevgr έγραψε:Πολύ καλή λύση, αλλά προϋποθέτει ότι οι ώρες είναι στάνταρ κι ότι δεν πρόκειται ο χρήστης να περάσει τιμές του στυλ 8:15 ή 8:30

Αν οι ώρες επιλέγονται ελεύθερα και έχουν μεγάλο εύρος, θα πρέπει να φτιάξεις ένα array με τις ώρες που υπάρχουν στη βάση και subarrays με τα ραντεβού κάθε ώρας.
Όχι, οι ώρες είναι standard.

akism
Δημοσιεύσεις: 14
Εγγραφή: 19 Οκτ 2015 15:09

Εμφάνιση προγραμματισμένων event σε σελίδα

Δημοσίευση από akism » 13 Νοέμ 2015 16:55

Eυχαριστώ ΠΑΑΑΑΡΑ πολύ για την απάντηση. Είναι ακριβώς ότι χρειάζομαι (και όπως ανέφερα προηγουμένως οι ώρες είναι fixed).
Έχω όμως ένα θεματάκι. Δεν έχω δουλέψει καθόλου με PDO και οτιδήποτε έχω κάνει για το συγκεκριμένο project είναι με mysqli.
Θα κάνεις τον κόπο να "μεταφράσεις" σε mysqli γιατί δεν "το 'χω"????

Σε ευχαριστώ.

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

Εμφάνιση προγραμματισμένων event σε σελίδα

Δημοσίευση από gvre » 13 Νοέμ 2015 17:20

Αντικαθιστάς το

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

$conn = new PDO&#40;'mysql&#58;host=127.0.0.1; dbname=test;', 'user', 'pass'&#41;; 
$sql = 'SELECT apStart, apEnd, id, firstname, lastname FROM pat WHERE apDate = ?'; 
$stmt = $conn->prepare&#40;$sql&#41;; 
$stmt->execute&#40;&#91; $_POST&#91;'apDate'&#93; &#93;&#41;; 
$res = $stmt->fetchAll&#40;PDO&#58;&#58;FETCH_ASSOC | PDO&#58;&#58;FETCH_GROUP&#41;; 
με το

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

$conn = new mysqli&#40;'127.0.0.1', 'user', 'pass', 'db'&#41;;
$sql = 'SELECT apStart, apEnd, id, firstname, lastname FROM pat WHERE apDate = ?';
$stmt = $conn->prepare&#40;$sql&#41;;
$stmt->bind_param&#40;'s', $_POST&#91;'apDate'&#93;&#41;;
$stmt->execute&#40;&#41;;
$result = $stmt->get_result&#40;&#41;;
while &#40;$row = $result->fetch_assoc&#40;&#41;&#41; &#123;
    $res&#91;$row&#91;'apStart'&#93;&#93;&#91;&#93; = $row;
&#125;
Το ζητούμενο είναι να έχεις ένα array με keys τις ώρες και values τις εγγραφές τής βάσης.

akism
Δημοσιεύσεις: 14
Εγγραφή: 19 Οκτ 2015 15:09

Εμφάνιση προγραμματισμένων event σε σελίδα

Δημοσίευση από akism » 13 Νοέμ 2015 17:33

:pint: :pint: :pint:
Ευχαριστώ πάρα πολύ. Με γλίτωσες από πολλές ώρες κάψιμο.
Πάμε να κεράσω μπύρες.

akism
Δημοσιεύσεις: 14
Εγγραφή: 19 Οκτ 2015 15:09

Εμφάνιση προγραμματισμένων event σε σελίδα

Δημοσίευση από akism » 13 Νοέμ 2015 18:54

Κάτι τελευταίο...
πως μπορώ με την implode να εμφανίσω επιπλέον πληροφορίες???

Στον κώδικά σου έχεις echo implode(', ', array_column($res[$t], 'lastname'));

Αν σε αυτό το σημείο θέλω να εμφανίσω και το firstname από τη βάση πως θα το συντάξω?

thanatoz
Δημοσιεύσεις: 31
Εγγραφή: 25 Οκτ 2015 19:46

Εμφάνιση προγραμματισμένων event σε σελίδα

Δημοσίευση από thanatoz » 13 Νοέμ 2015 18:59

$sql = "SELECT * FROM table WHERE apDate = '$_POST[apDate]'"


αν εχεις κωδικα αυτης της μορφης εισαι εκτεθιμενος σε SQL Injection.

Μην διανοηθεις να ανεβασεις τετια πραγματα Online την εβαψες απλα. και εχεις μεσα και προσωπικα δεδομενα !!!!!!!

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

Εμφάνιση προγραμματισμένων event σε σελίδα

Δημοσίευση από gvre » 13 Νοέμ 2015 19:28

akism έγραψε:Κάτι τελευταίο...
πως μπορώ με την implode να εμφανίσω επιπλέον πληροφορίες???

Στον κώδικά σου έχεις echo implode(', ', array_column($res[$t], 'lastname'));

Αν σε αυτό το σημείο θέλω να εμφανίσω και το firstname από τη βάση πως θα το συντάξω?
Η array_column χρησιμοποιείται για να πάρεις τιμές από μία συγκεκριμένη στήλη, όχι από περισσότερες. Μπορείς να αλλάξεις το query σου με το ακόλουθο και να ζητήσεις τη στήλη fullname ή να αλλάξεις το array που περνάς στην implode, έτσι ώστε να συμπεριλαμβάνονται οι στήλες που θέλεις (προτεινόμενος τρόπος).
Γενικά, κάνε δοκιμές και θα βρίσκεις λύσεις. Μην περιμένεις απαντήσεις μόνο από εδώ μέσα για να προχωρήσεις.

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

$sql = 'SELECT apStart, apEnd, id, firstname, lastname, CONCAT&#40;lastname, " ", firstname&#41; AS fullname FROM pat WHERE apDate = ?';

akism
Δημοσιεύσεις: 14
Εγγραφή: 19 Οκτ 2015 15:09

Εμφάνιση προγραμματισμένων event σε σελίδα

Δημοσίευση από akism » 16 Νοέμ 2015 08:52

Καλημέρα σε όλους.
Ευχαριστώ πολύ για τις απαντήσεις.
Εννοείται ότι δεν βασίζομαι στο forum για να προχωρήσω. Απλά είναι σχετικά νέος στην php.

Απάντηση

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

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

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