21. marts 2020 - 09:24Der 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.
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.
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);
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
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
>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);
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
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));
$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
$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->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');
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);
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
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]; }
$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) );
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
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) );
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
<?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
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); ?>
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; }
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
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
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.
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
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
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.