2017-12-10 20 views
-1

Also, ich bekomme diesen Fehler.Ich bekomme diesen Uncaught Error: Aufruf zu undefinierter Funktion mysql_num_rows()

Call to undefined function mysql_num_rows() 

Was könnte die Lösung für diesen Fehler sein? Ich bin neu in dieser Umgebung und möchte mehr erfahren.

     $name = $_POST["name"]; 
          $surname = $_POST["surname"]; 
         $address = $_POST["address"]; 

     List item 
     $username = $_POST["username"]; 
       $password = $_POST["password"]; 
    $confirm_password = $_POST["confirm_password"]; 
     if ((empty($username))) { 
     $response = new usr(); 
     $response->success = 0; 
     $response->message = "Kolom username tidak boleh kosong"; 
     die(json_encode($response)); } else if ((empty($password))) { 
     $response = new usr(); 
     $response->success = 0; 
     $response->message = "Kolom password tidak boleh kosong"; 
     die(json_encode($response)); } else if ((empty($confirm_password)) || $password != $confirm_password) { 
     $response = new usr(); 
     $response->success = 0; 
     $response->message = "Konfirmasi password tidak sama"; 
     die(json_encode($response)); 
    } else { 
     if (!empty($username) && $password == $confirm_password){ 
      $num_rows = mysql_num_rows(mysql_query("SELECT * FROM resident WHERE  username='".$username."'")); 

      if ($num_rows == 0){ 
       $query = mysql_query("INSERT INTO resident (id,name, surname, address, contactno, username, password) 
VALUES(0,'".$name."','".$surname."','".$address."','".$contactno."','".$username."','".$password."')"); 

       if ($query){ 
        $response = new usr(); 
        $response->success = 1; 
        $response->message = "Register berhasil, silahkan login."; 
        die(json_encode($response)); 

       } else { 
        $response = new usr(); 
        $response->success = 0; 
        $response->message = "Username sudah ada"; 
        die(json_encode($response)); 
       } 
      } else { 
       $response = new usr(); 
       $response->success = 0; 
       $response->message = "Username sudah ada"; 
       die(json_encode($response)); 
      } 
     } } 
     mysql_close(); ?> 

Vielen Dank!

+0

Können Sie eine Lösung bereitstellen? –

Antwort

-1

PHP 7.x entfernt alle mysql_* Funktionsweise, verwenden Sie stattdessen mysqli.

Source


ich Ihren Code bearbeiten, dann ist dies der Code, der (nicht getestet) funktionieren soll. Ich habe auch ein paar Notizen für dich.

$name = $_POST["name"]; 
$surname = $_POST["surname"]; 
$address = $_POST["address"]; 
$username = $_POST["username"]; 
$password = $_POST["password"]; 
$confirm_password = $_POST["confirm_password"]; 

if(empty($username){ 
    $response = new usr(); 
    $response->success = 0; 
    $response->message = "Kolom username tidak boleh kosong"; 
    die(json_encode($response));  
} 
elseif(empty($password)){ 
    $response = new usr(); 
    $response->success = 0; 
    $response->message = "Kolom password tidak boleh kosong"; 
    die(json_encode($response)); 
} 
elseif(empty($confirm_password) || $password != $confirm_password){ 
    $response = new usr(); 
    $response->success = 0; 
    $response->message = "Konfirmasi password tidak sama"; 
    die(json_encode($response)); 
} 
elseif(!empty($username) && $password == $confirm_password){ 
    // create mysqli object 
    $mysqli = new mysqli("my_server", "my_user", "my_password", "my_database"); 

    // check connection 
    if(mysqli_connect_errno()){ 
     sprintf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    } 

    // escape the user name, have a look at the SQL injection paragraph 
    $username = $mysqli->real_escape_string($username); 

    // speed up the code, it is not necessary to select * because the returned data is not used anyway 
    $query = "SELECT 1 FROM resident WHERE username='".$username."';"; 
    $result = $mysqli->query($query); 

    if($result->num_rows > 0){ 
     // escape all the other values, using the array is not necessary, this is just for (in my opinion) better looking code 
     $values = array(
      'id' => 0, 
      'name' => $mysqli->real_escape_string($name), 
      'surname' => $mysqli->real_escape_string($surname), 
      'address' => $mysqli->real_escape_string($address), 
      'contactno' => $mysqli->real_escape_string($contactno), 
      'password' => $mysqli->real_escape_string($password) 
     ); 

     $query = "INSERT INTO resident (".implode(",", array_keys($values)).") VALUES (".implode(",", $values).");"; 
     $result = $mysqli->query($query); 

     if($result && $result instanceof mysqli_result && $mysqli->affected_rows > 0){ 
      $response = new usr(); 
      $response->success = 1; 
      $response->message = "Register berhasil, silahkan login."; 
      die(json_encode($response)); 
     } 
     else{ 
      $response = new usr(); 
      $response->success = 0; 
      // I think this is a wrong error message, this should say something like "There is an internal error, please contact an administartor" 
      $response->message = "Username sudah ada"; 
      die(json_encode($response)); 
     } 
    } 
    else{ 
     $response = new usr(); 
     $response->success = 0; 
     $response->message = "Username sudah ada"; 
     die(json_encode($response)); 
    } 

    $mysqli->close(); 
} 

Hinweise

  1. nie so etwas wie SELECT * FROM my_table WHERE username='".$_POST['username'] tun! Dies ist sehr unsicher für SQL Injection. immer Flucht alle Werte, die ein Benutzer besser einstellen kann oder sogar prepared statements

  2. prüfen verwenden, wenn die Datenbankverbindung verwendet werden kann, sonst werden Sie Fehlermeldungen erhalten. Diese Fehler können verursacht werden, weil die Datenbank bewegt hat, das Passwort oder Benutzer geändert, der Server nicht online ist ...

  3. In Zeile 68 Sie die gleiche Fehlermeldung geben, wie in Zeile 76, obwohl die Fehlerursache sind anders. Sie sollten einige Fehlermeldungen verwenden, die klarstellen, was der Benutzer zu tun hat (in Zeile 68 Fehler kann er nichts tun) und sollte es Ihnen sagen, wo der Fehler liegt.

  4. Ich schreibe eine Database Klasse, die einmal erstellt wird und die mir die SQL-Funktionen zur Verfügung stellt. Wenn Sie dies tun, müssen Sie die Verbindung nicht jedes Mal öffnen. Wenn Sie also Ihre Datenbank ändern, ist dies nur eine Codezeile (in der Klasse Database). Außerdem wird der Wechsel von mysql_ zu mysqli_ sehr einfach sein, so dass Ihr Problem sehr schnell gelöst werden würde.

+0

Wie kann ich das tun? Können Sie mir helfen, mein Skript zu bearbeiten? –

+0

Ich habe meine Antwort aktualisiert, es tut mir leid, dass ich warten konnte, aber es hat einige Zeit gedauert :) – miile7

Verwandte Themen