Avatar billede rubaek Mester
21. marts 2020 - 09:24 Der er 48 kommentarer og
5 løsninger

ændring fra mysql til mysqli

Hej jeg er ved at afprøve et script fra nettet, men det virke ikke.
Jeg har fundet ud af det problemet er med coden mysql. Hvis jeg ændre den til mysqli så kan jeg få gang i programmet. Jeg har rettet et par steder og nu er jeg kommet til en login boks. Men nu fejler den så i index filer.

1) Er jeg helt forkert på den eller er det måden at gøre det på?
2) Jeg har indsæt i en parentes der hvor jeg har rettet men jeg ved ikke hvad der skal rettes til i index.php filen, hjælp søges.
Avatar billede Xelot Juniormester
21. marts 2020 - 09:42 #1
Der skal lidt mere til end bare at ændre mysql til mysqli.

Alt afhænger af hvordan koden er i nuværende tilstand

Den her guide er ret fin

https://www.w3schools.com/php/func_mysqli_connect.asp
Avatar billede rubaek Mester
21. marts 2020 - 10:32 #2
config.php
<?php
    session_start();
    $host = 'mysql17.unoeuro.com';
    $user = 'mit brugernavn';
    $pass = 'mit password';
    $db = 'rubaeks_dk_db_kompasset';

    mysqli_connect($host,$user,$pass) or die(mysql_error());  (denne er ændret til mysqli)
    mysqli_select_db($db);  (denne er ændret til mysqli)

?>


index.php
<?php   
    include('config.php');
    if(isset($_POST['submit'])){
        $user = $_POST['user'];
        $pass = $_POST['pass'];
        $query = "select * from userdata where username='$user' and password='$pass'";
        $r = mysqli_query($query);    (her skal vel også ændres til mysqli, men hvad skal der stå i parantesen)
        if(mysql_num_rows($r) == 1){
            $row = mysql_fetch_assoc($r);
            $_SESSION['level'] = $row['level'];
            $_SESSION['id'] = $row['username'];
            $_SESSION['name'] = $row['fname'].' '.$row['lname'];
            header('location:'.$row['level'].'');
        }else{
            header('location:index.php?login=0');
        }
    }

    if(isset($_SESSION['level'])){
        header('location:'.$_SESSION['level'].''); 
    }
?>
Her er koden, den kom ikke med i det første opslag.
Avatar billede olsensweb.dk Ekspert
21. marts 2020 - 11:56 #3
mysqli_connect($host,$user,$pass) or die(mysql_error());  (denne er ændret til mysqli)
mysqli_select_db($db);  (denne er ændret til mysqli)

skrives sådan
$conn = mysqli_connect(host,$user,$pass,$db);
if (!$conn) {
    echo 'Der opstod en fejl.';
    exit();
}
mysqli_set_charset($conn, "utf8");

du skal i mysqli angive navnet på din connection


$r = mysqli_query($query);    (her skal vel også ændres til mysqli, men hvad skal der stå i parantesen)
if(mysql_num_rows($r) == 1){
$row = mysql_fetch_assoc($r);

skrives
$r = mysqli_query($conn, $query);   
if(mysqli_num_rows($r) == 1){
$row = mysqli_fetch_assoc($r);



https://www.php.net/manual/en/mysqli.query.php
https://www.php.net/manual/en/mysqli-result.num-rows.php
https://www.php.net/manual/en/mysqli-result.fetch-assoc.php

i mysqli kan du skrive i procedural style som du kender det fra det gamle mysql, og du kan skrive det i OOP style, hvilke er fremtiden, du kan også blande procedural og oop style hvis du har lyst
Avatar billede rubaek Mester
21. marts 2020 - 15:35 #5
Nu begynder der at ske noget:
Nu driller denne:
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in /var/www/rubaeks.dk/oks/gradingxworking/admin/studentlist.php on line 84

Fatal error: Uncaught Error: Call to undefined function mysql_num_rows() in /var/www/rubaeks.dk/oks/gradingxworking/admin/studentlist.php:97 Stack trace: #0 {main} thrown in /var/www/rubaeks.dk/oks/gradingxworking/admin/studentlist.php on line 97

Koden:
<tbody>
                            <?php $c = 1; ?>
                            <?php while($row = mysqli_fetch_array($student)): ?>                           
                                <tr>
                                    <td><?php echo $c;?></td>
                                    <td><a href="edit.php?type=student&id=<?php echo $row['id']?>"><?php echo $row['studid'];?></a></td>
                                    <td><?php echo $row['fname'];?></td>
                                    <td><?php echo $row['lname'];?></td>
                                    <td class="text-center">
                                        <a href="data/settings_model.php?q=addaccount&level=student&id=<?php echo $row['id']?>" class="confirmacc"><i class="fa fa-key fa-2x text-warning"></i></a>
                                        <a href="studentsubject.php?id=<?php echo $row['id'];?>" title="Update Subject"><i class="fa fa-bar-chart-o fa-2x text-success"></i></a>  
                                        <a href="data/data_model.php?q=delete&table=student&id=<?php echo $row['id']?>" title="Remove"><i class="fa fa-times-circle fa-2x text-danger confirmation"></i></a></td>
                                </tr>
                            <?php $c++; ?>
                            <?php endwhile; ?>
                            <?php if(mysql_num_rows($student) < 1): ?>
                                <tr>
                                    <td colspan="5" class="bg-danger text-danger text-center">*** EMPTY ***</td>
                                </tr>
                            <?php endif; ?>
                        </tbody>
Avatar billede olsensweb.dk Ekspert
21. marts 2020 - 15:59 #6
>Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result,
$result = mysqli_query($link, $query);
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
giver din mysqli_query et resultat ??
https://www.php.net/manual/en/mysqli-result.fetch-array.php


>Fatal error: Uncaught Error: Call to undefined function mysql_num_rows()
ref https://www.php.net/manual/en/function.mysql-num-rows.php
bliver til mysqli_num_rows som der også linkes til på ovenstående link,
gælder alle de gamle functioner, der bliver linket til den nye
https://www.php.net/manual/en/mysqli-result.num-rows.php
if ($result = mysqli_query($link, "SELECT Code, Name FROM Country ORDER BY Name")) {
/* determine number of rows result set */
$row_cnt = mysqli_num_rows($result);
Avatar billede rubaek Mester
21. marts 2020 - 17:29 #7
Jeg har nu prøvet forskellige ting men mine evner rækker ikke her. Kan du give endnu et hint.

                            <?php
                          /* while($row = mysql_fetch_array($student)): Den gamle kode*/ 
                          while($row = mysqli_fetch_array($student, MYSQLI_NUM)): 
                      ?>
(Jeg har prøvet med alle 3 muligheder, men skal den ikke tælle hvor mange elever der er?)
Og fejlen der kommer: 
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in /var/www/rubaeks.dk/oks/gradingxworking/admin/studentlist.php on line 88
Avatar billede olsensweb.dk Ekspert
21. marts 2020 - 19:34 #8
antager det er linje, (se bort fra linje nummerne)
87    <?php $c = 1; ?>
88    <?php while($row = mysqli_fetch_array($student)): ?>                         
89    <tr>
90    <td><?php echo $c;?></td>
91    <td><a href="edit.php?type=student&id=<?php echo $row['id']?>"><?php echo $row['studid'];?></a></td>
92    <td><?php echo $row['fname'];?></td>

den query du laver lige før linje 88 retunerer ikke noget, prøv at sætte en or die() på
$student = mysqli_query( $conn , $query ) or die (mysqli_error($conn));

din mysqli_fetch_array skal se sådan ud:

mysqli_fetch_array($student, MYSQLI_ASSOC))

da du anvender den assocative del af arrayet

hvad laver det : i slutningen af linje 88 ??
Avatar billede olsensweb.dk Ekspert
21. marts 2020 - 19:38 #9
>(Jeg har prøvet med alle 3 muligheder, men skal den ikke tælle hvor mange elever der er?)
ville det ikke være nemmere med  mysqli_num_rows
https://www.php.net/manual/en/mysqli-result.num-rows.php
Avatar billede rubaek Mester
21. marts 2020 - 21:25 #10
Jeg har nu forsøgt at gøre som du skrev, men er det ikke rigtig at der skal stå $search i stedet for $query

Starten af koden
<?php
    include('include/header.php');
    include('include/sidebar.php');
    include('data/student_model.php');
   
    $search = isset($_POST['search']) ? $_POST['search']: null;
/*  $student = $student->getstudent($search); (Den originale kode)*/

$student = mysqli_query($conn, $query) or die (mysqli_error($conn));
?>

Den er tom og kommer med denne fejl:
Warning: mysqli_query() [function.mysqli-query]: Empty query in /var/www/rubaeks.dk/oks/gradingxworking/admin/studentlist.php on line 9

Jeg kan ikke gennemskue hvor Search kommer fra, det er vel her den burde hente alle elever
Avatar billede olsensweb.dk Ekspert
21. marts 2020 - 21:52 #11
$search = isset($_POST['search']) ? $_POST['search']: null;
hvis du har indtaste noget i formen (formindelig et elev nummer) så bliver $search denne værdi ellers bliver $search null

/* $student = $student->getstudent($search); (Den originale kode)*/

$student->getstudent():  $student er her et object, med en methode (indkapslet function) der hedder getstudent, så objectet $student der før ikke havde nogle værdier nu får værdier.

>$student = mysqli_query($conn, $query) or die (mysqli_error($conn));
skal slettes igen, fejlen ligger i functionen getstudent


du skal kigge i
include('data/student_model.php');
den methode/(function) der hedder getstudent


hvordan ser function'en getstudent ud??



btw overvej om du skal bruge require istedet for include
include('data/student_model.php');
ville jeg lave om til
require('data/student_model.php');

muligvis kombineret med en once

https://www.php.net/manual/en/function.include.php
https://www.php.net/manual/en/function.require.php
https://www.php.net/manual/en/function.include-once.php
https://www.php.net/manual/en/function.require-once.php
Avatar billede rubaek Mester
21. marts 2020 - 21:56 #12
Er det denne:
        //get all student info
        function getstudent($search){
            $q = "select * from student where studid like '%$search%' or fname like '%$search%' or lname like '%$search%' order by lname,fname,studid";
            mysqli_query($conn,$q);
           
            return $r;
        }
Avatar billede olsensweb.dk Ekspert
21. marts 2020 - 22:30 #13
#12
>Er det denne:
ja,

din connection er ikke kendt inde i functionen, den skal med over som parameter, alternetivt skal classen initaliceres med din connection. og mna skla bruge $this->conn inde i functionen

en function er et lukket scope, værdier der skal bruges inde i en function skal over som parameter.

jeg ved godt man kan bruge global men det er en uskik

jeg vil forslå du laver denne ændring
function getstudent($conn, $search){
    $q = "select * from student where studid like '%$search%' or fname like '%$search%' or lname like '%$search%' order by lname,fname,studid";
    // mysqli_query($conn,$q);
   
    r = mysqli_query($conn,$q); // gæt
 
    return $r; // hvor tildeles r en værdi ??
}


$student = $student->getstudent($search);
laves om til
$student = $student->getstudent($conn, $search);

$student er nu resultatet af din forspørgsel, man smadre så også objectet $student
Avatar billede rubaek Mester
21. marts 2020 - 22:43 #14
Nu fejler den på endwhile

Koden:
<?php while($row = mysqli_fetch_array($student, MYSQLI_ASSOC)) ?>                       
                                <tr>
                                    <td><?php echo $c;?></td>
                                    <td><a href="edit.php?type=student&id=<?php echo $row['id']?>"><?php echo $row['studid'];?></a></td>
                                    <td><?php echo $row['fname'];?></td>
                                    <td><?php echo $row['lname'];?></td>
                                    <td class="text-center">
                                        <a href="data/settings_model.php?q=addaccount&level=student&id=<?php echo $row['id']?>" class="confirmacc"><i class="fa fa-key fa-2x text-warning"></i></a>
                                        <a href="studentsubject.php?id=<?php echo $row['id'];?>" title="Update Subject"><i class="fa fa-bar-chart-o fa-2x text-success"></i></a>  
                                        <a href="data/data_model.php?q=delete&table=student&id=<?php echo $row['id']?>" title="Remove"><i class="fa fa-times-circle fa-2x text-danger confirmation"></i></a></td>
                                </tr>
                            <?php $c++; ?>
                            <?php endwhile; ?>
Avatar billede rubaek Mester
21. marts 2020 - 23:03 #15
Jeg fik rettet/fjerne noget og nu fejler den ikke længere.
Så er det bare at tilrette de andre steder i koden.

Mange tak for hjælpen.

Det er muligt jeg kommer tilbage igen, hvis der er mere der driller.

Jeg har lært meget, som jeg kan bruge fremover. Tak.
Avatar billede rubaek Mester
22. marts 2020 - 13:22 #16
Hej igen
Har du mod på mere?

Jeg får nu disse fejl:
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/rubaeks.dk/oks/gradingxworking/teacher/index.php on line 12

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/rubaeks.dk/oks/gradingxworking/teacher/index.php on line 16
Dashboard Statistics Overview

Og koden:
<?php
    require 'include/header.php' ;
    require 'include/sidebar.php' ;

    $tmp = $_SESSION['id'];
    $q = "select * from teacher where teachid='$tmp'";
    $r = mysqli_query($conn,$q);
    $result = mysqli_fetch_array($r,MYSQLI_ASSOC);
    $teachid = $result[0];

    $r1 = mysqli_query($conn,"select count(*) from class where teacher=$teachid");
    $count1 = mysqli_fetch_array($r1,MYSQLI_ASSOC);

    $r2 = mysqli_query($conn,"select * from class where teacher=$teachid");
    $students = 0;
    while($row = mysqli_fetch_array($r2,MYSQLI_ASSOC)){
        $id = $row['id']; 
        $r3 = mysqli_query($conn,"select count(*) from studentsubject where classid=$id");
        $count3 = mysqli_fetch_array($r3,MYSQLI_ASSOC);
        $students = $students + $count3[0];
    }
Avatar billede olsensweb.dk Ekspert
22. marts 2020 - 13:49 #17
$q = "select * from teacher where teachid='$tmp'";
$r = mysqli_query($conn,$q);
$result = mysqli_fetch_array($r,MYSQLI_ASSOC);

/* her vil du hente den første collonne, hvilke du ikke kan med assoc, der skal du bruge MYSQLI_NUM eller MYSQLI_BOTH */
$teachid = $result[0];
https://www.php.net/manual/en/mysqli-result.fetch-array.php

at bruge det nummeriske værdi gør coden direkte ulæslig IMHO, da man ikke kun skal kende navne på kollonnerne men også rækkefølgen

ret
$teachid = $result[0];
til
$teachid = $result['teachid'];

------------------------------

prøv også at rette dette 
$count3 = mysqli_fetch_array($r3,MYSQLI_ASSOC);
$students = $students + $count3[0];
til
$count3 = mysqli_fetch_array($r3,MYSQLI_BOTH);
$students = $students + $count3[0];

MYSQLI_BOTH tager både det nummeriske og navne arrayet, dvs du har dobbelt så meget sata som du skal bruge
Avatar billede rubaek Mester
22. marts 2020 - 14:03 #18
Koden ser nu sådan ud, stadig samme fejl:
<?php
    require 'include/header.php' ;
    require 'include/sidebar.php' ;

    $tmp = $_SESSION['id'];
    $q = "select * from teacher where teachid='$tmp'";
    $r = mysqli_query($conn,$q);
    $result = mysqli_fetch_array($r,MYSQLI_NUM);
    $teachid = $result['teachid'];

    $r1 = mysqli_query($conn,"select count(*) from class where teacher=$teachid");
    $count1 = mysqli_fetch_array($r1,MYSQLI_NUM);

    $r2 = mysqli_query($conn,"select * from class where teacher=$teachid");
    $students = 0;
    while($row = mysqli_fetch_array($r2,MYSQLI_NUM)){
        $id = $row['id']; 
        $r3 = mysqli_query($conn,"select count(*) from studentsubject where classid=$id");
        $count3 = mysqli_fetch_array($r3,MYSQLI_BOTH);
        $students = $students + $count3[0];
    }

?>
Avatar billede olsensweb.dk Ekspert
22. marts 2020 - 14:12 #19
$result = mysqli_fetch_array($r,MYSQLI_NUM);
$teachid = $result['teachid'];

skal være

$result = mysqli_fetch_array($r,MYSQLI_ASSOC);
$teachid = $result['teachid'];


alternativt

$result = mysqli_fetch_array($r,MYSQLI_BOTH);
så kan du skrive
$teachid = $result['teachid'];
og
$teachid = $result[0];
Avatar billede olsensweb.dk Ekspert
22. marts 2020 - 14:19 #20
måske er det bedre at du anvender MYSQLI_BOTH istedet for MYSQLI_ASSOC og MYSQLI_NUM

$teachid = $result['teachid'];
rettes tilbage til
$teachid = $result[0]; // da jeg ikke ved om kollonne 0 er teachid eller noget andet
Avatar billede rubaek Mester
22. marts 2020 - 14:21 #21
Det ser ud til den kom videre, nu er det linie 15 og 19 der driller. (se //15 og //19)

    $r1 = mysqli_query($conn,"select count(*) from class where teacher=$teachid");
    $count1 = mysqli_fetch_array($r1,MYSQLI_BOTH); // 15

    $r2 = mysqli_query($conn,"select * from class where teacher=$teachid");
    $students = 0;
    while($row = mysqli_fetch_array($r2,MYSQLI_BOTH)){  //19
        $id = $row['id']; 
        $r3 = mysqli_query($conn,"select count(*) from studentsubject where classid=$id");
        $count3 = mysqli_fetch_array($r3,MYSQLI_BOTH);
        $students = $students + $count3[0];
Avatar billede olsensweb.dk Ekspert
22. marts 2020 - 14:41 #22
prøv at echo din $q

$q = "select * from teacher where teachid='$tmp'";
echo $q; // test, hvad står der her ??


hvordan ser din teacher tabel ud ??
Avatar billede rubaek Mester
22. marts 2020 - 14:46 #23
select * from teacher where teachid='L1'

L1 er navnet på brugeren
Avatar billede rubaek Mester
22. marts 2020 - 14:59 #24
Tabellen har følgende felter:
id - teachid - fname - lname
Avatar billede rubaek Mester
22. marts 2020 - 15:23 #25
Her er opbygningen af de forskellige tabeller.
Userdata
id - username - password - fname - lname - level

class
id - course - year - section - sem - teacher - subject

student
id - studid - fname - lname

studentsubject
id - studid - classid - all1 - all2 - all3 osv

subject
id - code - titel
Avatar billede olsensweb.dk Ekspert
22. marts 2020 - 15:28 #26
$q = "select * from teacher where teachid='$tmp'";
$r = mysqli_query($conn,$q);
$result = mysqli_fetch_array($r,MYSQLI_BOTH);
$teachid = $result[0];
echo $teachid; // skulle gerne være id kollonnen



så er dette nemmere at læse

$q = "select * from teacher where teachid='$tmp'";
$r = mysqli_query($conn,$q);
$result = mysqli_fetch_array($r,MYSQLI_ASSOC);
$teachid = $result['id'];


prøv at sætte en or die på denne
$r1 = mysqli_query($conn,"select count(*) from class where teacher=$teachid") or die("count". mysqli_error($conn) );
Avatar billede rubaek Mester
22. marts 2020 - 15:46 #27
Den fejler med count  ???
Avatar billede rubaek Mester
22. marts 2020 - 15:57 #28
countYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Avatar billede olsensweb.dk Ekspert
22. marts 2020 - 16:11 #29
kunne det tænkes der skulle plinger omkring $teachid og backtick omkring class
$r1 = mysqli_query($conn,"select count(*) from `class` where teacher='$teachid'") or die("count". mysqli_error($conn) );
Avatar billede rubaek Mester
22. marts 2020 - 16:27 #30
Den var der, FLOT.

Næste udfordring:
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/rubaeks.dk/oks/gradingxworking/teacher/subject.php on line 54

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /var/www/rubaeks.dk/oks/gradingxworking/teacher/subject.php on line 65

Den går igen flere steder, som jeg kan se det.

                                    <?php while($row = mysqli_fetch_array($firstsem, MYSQLI_BOTH)): ?>
                                        <tr>
                                            <td><?php echo $c; ?></td>
                                            <td class="text-center"><?php echo $row['subject']; ?></td>
                                            <td class="text-center"><?php echo $row['course']; ?></td>
                                            <td class="text-center"><?php echo $row['year']; ?></td>
                                            <td class="text-center"><?php echo $row['section']; ?></td>
                                            <td class="text-center"><a href="student.php?classid=<?php echo $row['id'];?>">View Students</a></td>
                                        </tr>
                                    <?php $c++; ?>
                                    <?php endwhile; ?>
                                    <?php if(mysqli_num_rows($firstsem) < 1): ?>
                                        <tr><td colspan="6" class="text-center text-danger"><strong>*** EMPTY ***</strong></td></tr>
                                    <?php endif;?>
Avatar billede olsensweb.dk Ekspert
22. marts 2020 - 16:52 #31
<?php while($row = mysqli_fetch_array($firstsem, MYSQLI_BOTH)): ?>
hvis vi antager dette er linje 54
skal vi bruge linjerne før, hvor $firstsem får en værdi, da det er det fejlen ligger
Avatar billede rubaek Mester
22. marts 2020 - 16:57 #32
Den bliver kun nævnt helt i toppen
<?php
    require 'include/header.php';
    require 'include/sidebar.php';
    require 'data/subject_model.php';
    $firstsem = $subject->getsubject($conn,'1st',$id);   
    $secondsem = $subject->getsubject($conn,'2nd',$id);   
?>
Avatar billede rubaek Mester
22. marts 2020 - 17:04 #33
Tror jeg fandt fejlen i filen subject_model. Der manglede et par ' ' omkring en variable.
Avatar billede rubaek Mester
22. marts 2020 - 17:16 #34
Så kommer denne i stedet:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in /var/www/rubaeks.dk/oks/gradingxworking/student/grade.php on line 22

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /var/www/rubaeks.dk/oks/gradingxworking/student/grade.php on line 30

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in /var/www/rubaeks.dk/oks/gradingxworking/student/grade.php on line 32

Kode:
19)        function getid(){
20)            $studid = $_SESSION['id'];
            $r = mysqli_query($conn,"select * from `student` where studid='$studid'");
22)            $row = mysqli_fetch_array($r, MYSQLI_BOTH);
            $id = $row['id'];
            return $id;
        }


27)        function getsubject(){
28)      $id = $this->getid();
            $q = "select * from `studentsubject` where studid='$id'";
            $r = mysqli_query($conn,$q);
            $data = array();
32)            while($row = mysqli_fetch_array($r, MYSQLI_BOTH)){
                $classid = $row['classid'];
                $q2 = "select * from `class` where id='$classid'"; 
                $r2 = mysqli_query($conn,$q2); 
                $data[] = mysqli_fetch_array($r2, MYSQLI_BOTH);
            }
            return $data;
        }
Avatar billede olsensweb.dk Ekspert
22. marts 2020 - 17:29 #35
ln 19, 27: mangler du at tage din connection med over
Avatar billede rubaek Mester
22. marts 2020 - 18:16 #36
Nu kan jeg ikke se flere fejl, men en sort bjælke dækker over mulige fejl.

Tak for hjælpen igen.
Avatar billede rubaek Mester
22. marts 2020 - 19:54 #37
Så tæt og så så langt fra. Jeg kan ikke få mine data ind på siden:

Jeg har denne codestump grade.php
45)        function getid($conn){
46)            $studid = $_SESSION['id'];
            $r = mysqli_query($conn,"select * from `student` where studid='$studid'");
            $row = mysqli_fetch_array($r, MYSQLI_BOTH);
            $id = $row['id'];
            return $id;
        }
       
        function getsubject($conn){
            $id = $this->getid($conn);
            $q = "select * from `studentsubject` where studid='$id'";
            $r = mysqli_query($conn,$q);
            $data = array();
            while($row = mysqli_fetch_array($r, MYSQLI_BOTH)){
                $classid = $row['classid'];
                $q2 = "select * from `class` where id='$classid'"; 
                $r2 = mysqli_query($conn,$q2); 
                $data[] = mysqli_fetch_array($r2, MYSQLI_BOTH);
            }
            return $data;
        }

Og denne i index:
83)                    <tbody>
84)                        <?php foreach($mysubject as $row): ?>
                            <tr>
                                <td class="text-center"><?php echo $row['subject']; ?></td>
                                <?php $title = $grade->getsubjectitle($conn,$row['subject']);?>
                                <td class="text-center"><?php echo $title[0]['title']; ?></td>
                                <?php $mygrade = $grade->getgrade($conn,$row['id']); ?>
                                <td class="text-center"><?php echo $mygrade['prelim']; ?></td>
                                <td class="text-center"><?php echo $mygrade['midterm']; ?></td>
                                <td class="text-center"><?php echo $mygrade['final']; ?></td>
                                <td class="text-center"><?php echo $mygrade['total']; ?></td>
                                <td class="text-center"><?php echo $mygrade['eqtotal']; ?></td>
                              <!-- <td class="text-center"><?php echo $title[0]['unit']; ?></td>-->
                            </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
                <h4 class="text-center text-danger">*** NOTHING FOLLOWS ***</h4>


Og som jeg ser det burde den kunne trække data ud, men den er tom.
Er der noget galt med foreach coden?
Avatar billede olsensweb.dk Ekspert
22. marts 2020 - 20:25 #38
prøv at indsætte dette så vi kan se om metoden finder data
function getsubject($conn){
    $id = $this->getid($conn);   
    $q = "select * from `studentsubject` where studid='$id'";
    echo $q; // test1
   
    $r = mysqli_query($conn,$q) or die(mysqli_error($conn) );
    $data = array();
    while($row = mysqli_fetch_array($r, MYSQLI_BOTH)){
        $classid = $row['classid'];
        $q2 = "select * from `class` where id='$classid'";
        $r2 = mysqli_query($conn,$q2);
        $data[] = mysqli_fetch_array($r2, MYSQLI_BOTH);
    }
    print_r($data); // test2
    exit(0);

   
    return $data;
}


hvad skriver den ved test 1 og test 2 ??
Avatar billede rubaek Mester
22. marts 2020 - 20:40 #39
select * from `studentsubject` where studid=''

Array ( )
Avatar billede olsensweb.dk Ekspert
22. marts 2020 - 20:56 #40
vi kan hermed konstaterer at getid ikke retunere noget

så kan du godt fjerne   
echo $q; // test1
print_r($data); // test2
exit(0);

så prøv
function getid($conn){
    $studid = $_SESSION['id'];
    $r = mysqli_query($conn,"select * from `student` where studid='$studid'")or die(mysqli_error($conn) );
    echo $r;// test1
    $row = mysqli_fetch_array($r, MYSQLI_BOTH);
    $id = $row['id'];
   
    echo $id; // test2
    exit(0);
// stopper programmet her
   
    return $id;
}


hvad udskriver den nu ??
Avatar billede rubaek Mester
22. marts 2020 - 21:07 #41
Recoverable fatal error: Object of class mysqli_result could not be converted to string in /var/www/rubaeks.dk/oks/gradingxworking/student/grade.php on line 30

30)    echo $r;// test1
31)    $row = mysqli_fetch_array($r, MYSQLI_BOTH);
32)    $id = $row['id'];
Avatar billede olsensweb.dk Ekspert
22. marts 2020 - 21:16 #42
slet echo $r;// test1
prøv med en
print_r($r); // test1
Avatar billede rubaek Mester
22. marts 2020 - 21:20 #43
mysqli_result Object ( [current_field] => 0 [field_count] => 4 [lengths] => [num_rows] => 0 [type] => 0 )
Avatar billede olsensweb.dk Ekspert
22. marts 2020 - 21:31 #44
vi hiver lige sql'en ud for sig selv

function getid($conn){
    $studid = $_SESSION['id'];
    $sql = "select * from `student` where studid='$studid'";
    echo $sql;// test1

    $r = mysqli_query($conn,$sql)or die(mysqli_error($conn) );   
    $row = mysqli_fetch_array($r, MYSQLI_BOTH);
    print_r($row);
    $id = $row['id']; 
    echo $id; // test2
    exit(0);// stopper programmet her

 
    return $id;
}
Avatar billede rubaek Mester
22. marts 2020 - 21:43 #45
select * from `student` where studid='S2'
Avatar billede olsensweb.dk Ekspert
22. marts 2020 - 21:56 #46
skriver den ikke noget ved
print_r($row);
Avatar billede rubaek Mester
22. marts 2020 - 22:02 #47
Nej det gør den ikke.
Jeg har skrevet en tekststreng, som du kan se men intet efter.
Avatar billede olsensweb.dk Ekspert
22. marts 2020 - 22:21 #48
function getid($conn){
    // debug start
    ini_set("display_startup_errors", "on");
    ini_set("display_errors", "on");
    ini_set("html_errors", "false");
    error_reporting(-1); // -1 viser alle slags fejl beskeder
    // debug slut
    print_r($conn); // her bør være et connection object
   


    $studid = $_SESSION['id'];
    $sql = "select * from `student` where studid='$studid'";   
    $r = mysqli_query($conn,$sql)or die("dør her ".mysqli_error($conn) );  // burde skrive en fejl besked
    $row = mysqli_fetch_array($r, MYSQLI_BOTH);
    print_r($row);
    $id = $row['id'];
    echo $id; // test2
    exit(0);// stopper programmet her

    return $id;
}



jeg skal snart have nogle test data fra student tabellen
jeg er ved at være træt
Avatar billede rubaek Mester
22. marts 2020 - 22:31 #49
mysqli Object ( [affected_rows] => 0 [client_info] => mysqlnd 5.0.12-dev - 20150407 - $Id: 3591daad22de08524295e1bd073aceeff11e6579 $ [client_version] => 50012 [connect_errno] => 0 [connect_error] => [errno] => 0 [error] => [error_list] => Array ( ) [field_count] => 0 [host_info] => mysql17.unoeuro.com via TCP/IP [info] => [insert_id] => 0 [server_info] => 5.7.29-32-log [server_version] => 50729 [stat] => Uptime: 3432379 Threads: 29 Questions: 3125437486 Slow queries: 6820 Opens: 362671709 Flush tables: 1 Open tables: 2000 Queries per second avg: 910.574 [sqlstate] => 00000 [protocol_version] => 10 [thread_id] => 33043740 [warning_count] => 0 )

Vi stopper bare for i dag. Du må endelige sige til hvis ikke du har lyst til at hjælpe mere, eller om du vil have tilsendt filerne, hvis det er lettere.
Du skal ihvertfald have mange tak for den stor hjælp du har ydet indtil nu.
Avatar billede olsensweb.dk Ekspert
23. marts 2020 - 10:20 #50
select * from `student` where studid='S2'
giver denne fejl "Notice: Trying to access array offset on value of type null in"
S2 findes ikke


<?php
function getid($conn){
    $studid = $_SESSION['id'];           
    $sql = "select id from `student` where studid='$studid'";     
    $r = mysqli_query($conn,$sql)or die(mysqli_error($conn) );
    if($r){
        $row = mysqli_fetch_array($r, MYSQLI_ASSOC);
        // hvis der ikke er nogle post (forkert studid)
        if($row == null){
            $id=0;           
        }
        else{
            $id = $row['id'];   
        }       
    }   
    return $id;
}



// test af functionen
require("connection.php");
$user_id = getid($conn);
echo $user_id;
if($user_id==0){
    echo "fejl: posten findes ikke ";
    exit();
}
?>


mit forslag til getid(), jeg vil normalt også tage $studid med som parameter, for ikke at bruge super globale i en function
da vi kun skal bruge id har jeg valgt kun at selecte denne, og vi bruger kun den assoative del af arrayet (MYSQLI_ASSOC), så der er ikke grund til også at udlæse det nummeriske (MYSQLI_NUM)  som man gør med MYSQLI_BOTH
Avatar billede rubaek Mester
23. marts 2020 - 22:39 #51
Parse error: syntax error, unexpected 'require' (T_REQUIRE), expecting function (T_FUNCTION) or const (T_CONST) in /var/www/rubaeks.dk/oks/gradingxworking/student/grade.php on line 42

Den kommer med denne fejl

Kode:
34)  <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
35)      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="index.php">Online Grading System22</a>
        </div>
Avatar billede olsensweb.dk Ekspert
23. marts 2020 - 22:51 #52
#50
det er kun det fremhøvet du skal bruge, det andet er bare noget test

vi må til at afslutte denne tråd så andre også kan byde ind
Avatar billede olsensweb.dk Ekspert
23. marts 2020 - 22:52 #53
fremhøvet ->fremhævet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester