Jump to content
Old threads will finally start getting archived ×

Barand

Moderators
  • Posts

    24,599
  • Joined

  • Last visited

  • Days Won

    828

Barand last won the day on March 11

Barand had the most liked content!

About Barand

Profile Information

Recent Profile Visitors

104,183 profile views

Barand's Achievements

Prolific Member

Prolific Member (5/5)

2.2k

Reputation

497

Community Answers

  1. Put this line just before the mysqli connection code... mysqli_report(MYSQLI_REPORT_ERROR|MYSQLI_REPORT_STRICT); Ensure error_reporting is ON. You should now get error messages if there are problems with a query.
  2. PS You aren't doing yourself any favours by insisting on mysqli. PDO is a superior library and easier to use. While you are still learning, put your effort into PDO
  3. Change $pdo = pdoConnect(); to $pdo = new mysqli(HOST, USERNAME, PASSWORD, DATABASE); Job done.
  4. BTW, it seems a pity that that those students who attain a C6 grade should receive only an anagram instead of a Credit
  5. @sule, Here are two version of the program A single loop tracking changes in studentid (as I suggested) Stores data in a muti-dimensional array and uses nested foreach() loops Version 1 <?php define("HOST", 'localhost'); define("USERNAME", '????'); define("PASSWORD", '????'); define("DATABASE", '????'); // default database name function pdoConnect($dbname=DATABASE) { $db = new PDO("mysql:host=".HOST.";dbname=$dbname;charset=utf8",USERNAME,PASSWORD); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $db->setAttribute(PDO::MYSQL_ATTR_LOCAL_INFILE, true); return $db; } $pdo = pdoConnect(); $res = $pdo->query("SELECT marks.acayear , marks.semester , marks.form , marks.class , marks.studentid , marks.name , marks.subject , marks.class_score1 , marks.exam_score1 , ROUND(marks.total, 1) as total , marks.grade , marks.remarks , RANK() OVER (PARTITION BY marks.acayear, marks.semester, marks.lessonsid ORDER BY marks.total DESC) as rank FROM marks WHERE marks.acayear='2024/2025' AND marks.semester='1' AND marks.form='3' AND marks.class='SCI A' ORDER BY name, subject; "); $previd = 0; $tdata = ''; foreach ($res as $r) { if ($r['studentid'] != $previd) { if ($previd != 0) { // if not the first $tdata .= "\n</table>\n</div>\n</div>\n\n"; // close preceding report } $tdata .= outputReportHeading(...array_slice($r, 0, 6)); $previd = $r['studentid']; } $tdata .= outputSubject(...array_slice($r, 6)); // close last report } $tdata .= "\n</table>\n</div>\n</div>\n\n"; # # FUNCTIONS # function outputReportHeading($acayear, $semester, $form, $class, $studentid, $name) { return <<<HEAD <div class='report w3-container w3-white'> <div class='report-head'> SAVELUGU SENIOR HIGH SCHOOL </div> <div class='report-head'> $acayear ACADEMIC YEAR </div> <div class='w3-row w3-margin-top'> <div class='w3-col m1 w3-center'> [SCHOOL<br>CREST] </div> <div class='w3-col m5 report-subhead'> Student ID: <span class='hval'>$studentid</span> <br> Name: <span class='hval'>$name</span> <br> Semester: <span class='hval'>$semester</span> </div> <div class='w3-col m5 report-subhead'> House: <span class='hval'></span> <br> Gender: <span class='hval'></span> <br> Class: <span class='hval'>$form $class</span> </div> <div class='w3-col m1 w3-center'> [PHOTO] </div> </div> <div class='report-head w3-margin-top'> STUDENT TERMINAL REPORT </div> <div class='w3-responsive'> <table border='1' class='scores'> <tr> <th>Subject</th> <th class='w3-hide-small'>Class Score</th> <th class='w3-hide-small'>Exam Score</th> <th>Total</th> <th>Grade</th> <th>Pos</th> <th>Remarks</th> </tr> HEAD; } function outputSubject($subject, $class_score1, $exam_score1, $total, $grade, $remarks, $rank) { return <<<SUB <tr> <td>$subject</td> <td class='w3-hide-small ca'>$class_score1</td> <td class='w3-hide-small ca'>$exam_score1</td> <td class='ca'>$total</td> <td class='ca'>$grade</td> <td class='ca'>$rank</td> <td>$remarks</td> </tr> SUB; } ?> <!DOCTYPE html> <html lang="en"> <head> <title>Example Reports 1</title> <meta charset="utf-8"> <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css"> <style type='text/css'> body { background-color: #FCF8E8; } .report { margin: 16px; padding: 8px; border: 1px solid gray; } .report-head { font-size: 18pt; font-weight: 600; text-align: center; } .report-subhead { font-size: 14pt; font-weight: 300; } .hval { font-weight: 600; color: blue; } .scores { width: 100%; border-collapse: collapse; } th { padding: 8px 2px; background-color: gray; color: white; } td { padding: 8px 4px; } .ca { text-align: center; } </style> </head> <body> <?= $tdata ?> </body> </html> Version 2 <?php define("HOST", 'localhost'); define("USERNAME", '????'); define("PASSWORD", '????'); define("DATABASE", '????'); // default database name function pdoConnect($dbname=DATABASE) { $db = new PDO("mysql:host=".HOST.";dbname=$dbname;charset=utf8",USERNAME,PASSWORD); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $db->setAttribute(PDO::MYSQL_ATTR_LOCAL_INFILE, true); return $db; } $pdo = pdoConnect(); $res = $pdo->query("SELECT marks.acayear , marks.semester , marks.form , marks.class , marks.studentid , marks.name , marks.subject , marks.class_score1 , marks.exam_score1 , ROUND(marks.total, 1) as total , marks.grade , marks.remarks , RANK() OVER (PARTITION BY marks.acayear, marks.semester, marks.lessonsid ORDER BY marks.total DESC) as rank FROM marks WHERE marks.acayear='2024/2025' AND marks.semester='1' AND marks.form='3' AND marks.class='SCI A' ORDER BY name, subject; "); $tdata = ''; # # store the data in a 3D array # $data = []; foreach ($res as $r) { if (!isset($data[$r['studentid']])) { $data[$r['studentid']] = [ 'head' => array_slice($r, 0, 6), 'scores' => [] ]; } $data[$r['studentid']]['scores'][] = array_slice($r, 6); } # echo '<pre>' . print_r($data, 1) . '</pre>'; // uncomment to view array structure # # PROCESS THE ARRAY # foreach ($data as $sdata) { $tdata .= outputReportHeading(...$sdata['head']); foreach ($sdata['scores'] as $subdata) { $tdata .= outputSubject(...$subdata); } $tdata .= "\n</table>\n</div>\n</div>\n\n"; } # # FUNCTIONS # function outputReportHeading($acayear, $semester, $form, $class, $studentid, $name) { return <<<HEAD <div class='report w3-container w3-white'> <div class='report-head'> SAVELUGU SENIOR HIGH SCHOOL </div> <div class='report-head'> $acayear ACADEMIC YEAR </div> <div class='w3-row w3-margin-top'> <div class='w3-col m1 w3-center'> [SCHOOL<br>CREST] </div> <div class='w3-col m5 report-subhead'> Student ID: <span class='hval'>$studentid</span> <br> Name: <span class='hval'>$name</span> <br> Semester: <span class='hval'>$semester</span> </div> <div class='w3-col m5 report-subhead'> House: <span class='hval'></span> <br> Gender: <span class='hval'></span> <br> Class: <span class='hval'>$form $class</span> </div> <div class='w3-col m1 w3-center'> [PHOTO] </div> </div> <div class='report-head w3-margin-top'> STUDENT TERMINAL REPORT </div> <div class='w3-responsive'> <table border='1' class='scores'> <tr> <th>Subject</th> <th class='w3-hide-small'>Class Score</th> <th class='w3-hide-small'>Exam Score</th> <th>Total</th> <th>Grade</th> <th>Pos</th> <th>Remarks</th> </tr> HEAD; } function outputSubject($subject, $class_score1, $exam_score1, $total, $grade, $remarks, $rank) { return <<<SUB <tr> <td>$subject</td> <td class='w3-hide-small ca'>$class_score1</td> <td class='w3-hide-small ca'>$exam_score1</td> <td class='ca'>$total</td> <td class='ca'>$grade</td> <td class='ca'>$rank</td> <td>$remarks</td> </tr> SUB; } ?> <!DOCTYPE html> <html lang="en"> <head> <title>Example Reports 2</title> <meta charset="utf-8"> <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css"> <style type='text/css'> body { background-color: #FCF8E8; } .report { margin: 16px; padding: 16px; border: 1px solid gray; } .report-head { font-size: 18pt; font-weight: 600; text-align: center; } .report-subhead { font-size: 14pt; font-weight: 300; } .hval { font-weight: 600; color: blue; } .scores { width: 100%; border-collapse: collapse; } th { padding: 8px 2px; background-color: gray; color: white; } td { padding: 8px 4px; } .ca { text-align: center; } </style> </head> <body> <?= $tdata ?> </body> </html> Samples
  6. Use the <> button when posting code
  7. I've just described a method to you. What have you now tried? (or are you just going to keep repeating the same question without trying the suggestion?)
  8. As you loop throught the query results, check for a change of studentid. Each time to reach a new student, out put the report headings (name, photo etc) then continue listing subject rows until the next change. Pseudocode... previd = 0; foreach result row { if studentid != previd { previd = studentid output report headings } output subject data }
  9. I couldn't find anything wrong with your query, although I had to limit my version to the marks table only as the other tables required seem to have fallen down the back of your sofa. I assumed you want the positions in their class. SELECT -- marks.acayear -- , marks.semester -- , marks.form -- , marks.class marks.studentid , marks.name , marks.subject , marks.class_score1 , marks.exam_score1 , marks.total , marks.remarks , RANK() OVER (PARTITION BY marks.lessonsid, marks.acayear, marks.form, marks.semester, marks.subject, marks.class ORDER BY marks.total DESC) as rank FROM marks WHERE marks.acayear='2024/2025' AND marks.semester='1' AND marks.form='3' AND marks.class='SCI A' ORDER BY name, SUBJECT; +-------------+--------------------------+----------------+--------------+-------------+-------+-----------+------+ | studentid | name | subject | class_score1 | exam_score1 | total | remarks | rank | +-------------+--------------------------+----------------+--------------+-------------+-------+-----------+------+ | 82611900422 | ABDUL-HANAN SA-EED | BIOLOGY | 0 | 0 | 0 | | 23 | | 82611900422 | ABDUL-HANAN SA-EED | CHEMISTRY | 0 | 0 | 0 | | 29 | | 82611900422 | ABDUL-HANAN SA-EED | ELECTIVE MATHS | 0 | 0 | 0 | | 29 | | 82611900422 | ABDUL-HANAN SA-EED | ENGLISH LANG | 0 | 0 | 0 | | 29 | | 82611900422 | ABDUL-HANAN SA-EED | ICT | 0 | 0 | 0 | | 26 | | 82611900422 | ABDUL-HANAN SA-EED | INT SCIENCE | 0 | 0 | 0 | | 29 | | 82611900422 | ABDUL-HANAN SA-EED | MATHEMATICS | 0 | 0 | 0 | | 25 | | 82611900422 | ABDUL-HANAN SA-EED | PHYSICS | 0 | 0 | 0 | | 27 | | 82611900422 | ABDUL-HANAN SA-EED | SOCIAL STUDIES | 0 | 0 | 0 | | 26 | +-------------+--------------------------+----------------+--------------+-------------+-------+-----------+------+ | 80106802422 | ABDUL-RAHMAN NASIBA | BIOLOGY | 23.4 | 53.9 | 77.3 | Very Good | 3 | | 80106802422 | ABDUL-RAHMAN NASIBA | CHEMISTRY | 16.8 | 53.2 | 70 | Very Good | 6 | | 80106802422 | ABDUL-RAHMAN NASIBA | ELECTIVE MATHS | 16.8 | 53.9 | 70.7 | Very Good | 11 | | 80106802422 | ABDUL-RAHMAN NASIBA | ENGLISH LANG | 20.1 | 39.2 | 59.3 | Credit | 18 | | 80106802422 | ABDUL-RAHMAN NASIBA | ICT | 16.8 | 23.8 | 40.6 | Pass | 25 | | 80106802422 | ABDUL-RAHMAN NASIBA | INT SCIENCE | 20.1 | 39.2 | 59.3 | Credit | 14 | | 80106802422 | ABDUL-RAHMAN NASIBA | MATHEMATICS | 16.8 | 30.8 | 47.6 | Pass | 21 | | 80106802422 | ABDUL-RAHMAN NASIBA | PHYSICS | 16.8 | 53.9 | 70.7 | Very Good | 8 | | 80106802422 | ABDUL-RAHMAN NASIBA | SOCIAL STUDIES | 13.5 | 23.1 | 36.6 | Fail | 25 | +-------------+--------------------------+----------------+--------------+-------------+-------+-----------+------+ | 82606700822 | ABUBAKARI ABDUL HALIK | BIOLOGY | 13.5 | 45.5 | 59 | Credit | 11 | | 82606700822 | ABUBAKARI ABDUL HALIK | CHEMISTRY | 22.8 | 53.9 | 76.7 | Very Good | 5 | | 82606700822 | ABUBAKARI ABDUL HALIK | ELECTIVE MATHS | 13.5 | 39.2 | 52.7 | Crdeit | 26 | | 82606700822 | ABUBAKARI ABDUL HALIK | ENGLISH LANG | 20.1 | 46.2 | 66.3 | Good | 14 | | 82606700822 | ABUBAKARI ABDUL HALIK | ICT | 13.5 | 46.2 | 59.7 | Credit | 15 | | 82606700822 | ABUBAKARI ABDUL HALIK | INT SCIENCE | 22.8 | 53.9 | 76.7 | Very Good | 5 | | 82606700822 | ABUBAKARI ABDUL HALIK | MATHEMATICS | 23.1 | 45.5 | 68.6 | Good | 10 | | 82606700822 | ABUBAKARI ABDUL HALIK | PHYSICS | 13.5 | 23.8 | 37.3 | Fail | 24 | | 82606700822 | ABUBAKARI ABDUL HALIK | SOCIAL STUDIES | 16.8 | 30.8 | 47.6 | Pass | 21 | +-------------+--------------------------+----------------+--------------+-------------+-------+-----------+------+ | 80115900922 | ALAWI ABDALLAH | BIOLOGY | 10.2 | 37.8 | 48 | Pass | 13 | | 80115900922 | ALAWI ABDALLAH | CHEMISTRY | 22.8 | 38.5 | 61.3 | Credit | 8 | | 80115900922 | ALAWI ABDALLAH | ELECTIVE MATHS | 23.1 | 39.2 | 62.3 | Credit | 20 | | 80115900922 | ALAWI ABDALLAH | ENGLISH LANG | 16.8 | 53.9 | 70.7 | Very Good | 12 | | 80115900922 | ALAWI ABDALLAH | ICT | 13.5 | 39.2 | 52.7 | Crdeit | 22 | | 80115900922 | ALAWI ABDALLAH | INT SCIENCE | 19.8 | 37.8 | 57.6 | Credit | 16 | | 80115900922 | ALAWI ABDALLAH | MATHEMATICS | 26.4 | 46.9 | 73.3 | Very Good | 3 | | 80115900922 | ALAWI ABDALLAH | PHYSICS | 16.8 | 38.5 | 55.3 | Credit | 17 | | 80115900922 | ALAWI ABDALLAH | SOCIAL STUDIES | 13.5 | 23.8 | 37.3 | Fail | 24 | +-------------+--------------------------+----------------+--------------+-------------+-------+-----------+------+ | etc...
  10. You can't concatenate an if() statement like that. Try $message = 'Message goes here' . "\r\n" . 'Name: ' . $name . "\r\n"; if ($doesthishavedata != '') { $message .= 'Does this have data: ' . $doesthishavedata . "\r\n"; } $message .= 'something else: ' . $hasdata . "\r\n" .
  11. An "if() construct" often comes in useful at times like this.
  12. Inser queries cannot have a WHERE clause. You need an UPDATE query
  13. You don't need the braces so long as there are only single statements to be executed but only if they are in the same <?php .. ?> block of code. EG this works... <?php if (date('d')==24) echo 'today'; else echo 'Not today'; ?>
  14. Are you using <?php ... ?> or <? ... ?> in your code when you enter a php code section? The short version (<?) is no longer a default and requires an ini file setting to enable.
  15. I'd do something like this... <?php $data = [ '46.105.73.18:27015' => [ 'gq_address' => '46.105.73.18', 'gq_dedicated' => '', 'gq_gametype' => '', 'gq_hostname' => '', 'gq_joinlink' => 'steam://connect/46.105.73.18:27015/' , 'gq_mapname' => '', 'gq_maxplayers' => '', 'gq_mod' => '', 'gq_name' => 'Counter-Strike: Source' , 'gq_numplayers' => '', 'gq_online' => '', 'gq_password' => '', 'gq_port_client' => 27015 , 'gq_port_query' => 27015 , 'gq_protocol' => 'source' , 'gq_transport' => 'udp' , 'gq_type' => 'css' , 'players' => Array (), 'teams' => Array () ] ] ; $tdata = ''; foreach ($data as $k => $v) { $v = array_filter($v); // get rid of blank values $tdata .= "<table border='1'> <tr><th>Array key</th><th>" . join('</th><th>', array_keys($v)) . "</th></tr>\n"; // output headings $tdata .= "<tr><th class='rowth'>$k</th><td>" . join('</td><td>', array_values($v)) . "</td></tr> // output values </table>\n"; } ?> <html lang='en'> <head> <meta 'charset'='utf-8'> <title>Example</title> <style type='text/css'> table { border-collapse: collapse; margin-bottom: 10px; } th { background-color: #444; color: white; padding: 8px; } .rowth { background-color: #888; } td { padding: 8px; text-align: center; } </style> </head> <body> <?= $tdata ?> </body> </html> Giving ...
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.