Peršokti į turinį
newyorkas

Registracija PHP/MySQL

Recommended Posts

Sveiki. Reiktų pagalbos su PHP ir duomenų baze. Viską kaip ir ganėtinai normaliai surašiau, bet dėl kažkokios priežasties, PHP neperduoda duomenų į duomenų bazę, o tiesiog išmeta "This page isn't working". Duomenų bazė, mano galva, sukurta gerai, duomenų bazę php faile taip pat nurodau kaip ir gerai, SELECT'as mano galva taip pat yra parašytas gerai. Gal galėtumėte šiek tiek pagelbėt?

db.PNG.0e0db6a948751f7602bc61713ff07c0d.PNG

Ačiū Jums.

Kodus įkėliau į spoiler'ius.

registracija.html

 
<!DOCTYPE HTML>
<html>
<head>
  <title>Register Form</title>
</head>
<body>
 <form action="insert.php" method="POST">
  <table>
   <tr>
    <td>Name :</td>
    <td><input type="text" name="username" required></td>
   </tr>
   <tr>
    <td>Password :</td>
    <td><input type="password" name="password" required></td>
   </tr>
   <tr>
    <td>Gender :</td>
    <td>
     <input type="radio" name="gender" value="m" required>Male
     <input type="radio" name="gender" value="f" required>Female
    </td>
   </tr>
   <tr>
    <td>Email :</td>
    <td><input type="email" name="email" required></td>
   </tr> 
   <tr>
    <td>Phone no :</td>
    <td>
     <select name="phoneCode" required>
      <option selected hidden value="">Select Code</option>
      <option value="370">370</option>
     </select>
     <input type="phone" name="phone" required>
    </td>
   </tr>
   <tr>
    <td><input type="submit" value="Submit"></td>
   </tr>
  </table>
 </form>
</body>
</html>

insert.php

 

 
<?php
$username = $_POST['username'];
$password = $_POST['password'];
$gender = $_POST['gender'];
$email = $_POST['email'];
$phoneCode = $_POST['phoneCode'];
$phone = $_POST['phone'];
if (!empty($username) || !empty($password) || !empty($gender) || !empty($email) || !empty($phoneCode) || !empty($phone)) {
 $host = "localhost";
    $dbUsername = "root";
    $dbPassword = "";
    $dbname = "register";
    //create connection
    $conn = new mysqli($host, $dbUsername, $dbPassword, $dbname);
    if (mysqli_connect_error()) {
     die('Connect Error('. mysqli_connect_errno().')'. mysqli_connect_error());
    } else {
     $SELECT = "SELECT email From vartotojai Where email = ? Limit 1";
     $INSERT = "INSERT Into vartotojai (username, password, gender, email, phoneCode, phone) values(?, ?, ?, ?, ?, ?)";
     //Prepare statement
     $stmt = $conn->prepare($SELECT);
     $stmt->bind_param("s", $email);
     $stmt->execute();
     $stmt->bind_result($email);
     $stmt->store_result();
     $rnum = $stmt->num_rows;
     if ($rnum==0) {
      $stmt->close();
      $stmt = $conn->prepare($INSERT);
      $stmt->bind_param("ssssii", $username, $password, $gender, $email, $phoneCode, $phone);
      $stmt->execute();
      echo "New record inserted sucessfully";
     } else {
      echo "Someone already register using this email";
     }
     $stmt->close();
     $conn->close();
    }
} else {
 echo "All field are required";
 die();
}
?>

 

Redaguota , nario newyorkas

Dalintis šį pranešimą


Nuoroda iki šio pranešimo
Dalintis per kitą puslapį

Čia pas tave hibridas. Nežinau nuo kurios vietos net taisyti :D

Prepare statementų absoliučiai nereikia naudoti, nes nesikreipi į duomenų bazę du kartus. O kad išvengti SQL injekcijos labai prasta mintis.

Turi visada filtruoti su griežtais filtrais, nes dabar gali HTML/JS kodo prirašyti, kas iš to, kad apsaugo nuo SQL?

Jeigu nori patikrinti ar toks vartotojas egzistuoja, paprasčiausiai rašai:

if ($conn->query("SELECT COUNT(`id`) FROM `vartotojai` WHERE `email` = '$email';") > 0) {

echo 'Toks naudotojas jau yra užregistruotas.';

}

Insertinimas:

if ($conn->query("INSERT INTO `vartotojai` (`username`, `password`, `gender`, `email`, `phoneCode`, `phone`) VALUES ('$username', '$password', '$gender', '$email', '$phoneCode', '$phone');")) {

echo 'Naudotojas buvo sėkmingai užregistruotas.';

}

empty spaminti daug kartų nėra gerai.

Geriau taip:

if (isset($_POST['username'], $_POST['password'])) { // daugiau POST žinoma per kablelį padėk.

čia jau gali gauti visus POST, nes jie buvo submitinti.

} else {

header('Location: registracija.html');

exit;

}

Ir siūlau rašyti viską viename faile, nebent planuoji siųsti ajax užklausą. Kitaip vartotojas suklys ir turės viską iš naujo įvesti visus duomenis, kai gali viename faile kai rašai atkurti visus POST, sudėti atgal į laukus.

  • Teigiamai 2

Dalintis šį pranešimą


Nuoroda iki šio pranešimo
Dalintis per kitą puslapį

prieš 14 valandas(-ų), NTQ parašė:

Čia pas tave hibridas. Nežinau nuo kurios vietos net taisyti :D

Prepare statementų absoliučiai nereikia naudoti, nes nesikreipi į duomenų bazę du kartus. O kad išvengti SQL injekcijos labai prasta mintis.

Turi visada filtruoti su griežtais filtrais, nes dabar gali HTML/JS kodo prirašyti, kas iš to, kad apsaugo nuo SQL?

Jeigu nori patikrinti ar toks vartotojas egzistuoja, paprasčiausiai rašai:

if ($conn->query("SELECT COUNT(`id`) FROM `vartotojai` WHERE `email` = '$email';") > 0) {

echo 'Toks naudotojas jau yra užregistruotas.';

}

Insertinimas:

if ($conn->query("INSERT INTO `vartotojai` (`username`, `password`, `gender`, `email`, `phoneCode`, `phone`) VALUES ('$username', '$password', '$gender', '$email', '$phoneCode', '$phone');")) {

echo 'Naudotojas buvo sėkmingai užregistruotas.';

}

empty spaminti daug kartų nėra gerai.

Geriau taip:

if (isset($_POST['username'], $_POST['password'])) { // daugiau POST žinoma per kablelį padėk.

čia jau gali gauti visus POST, nes jie buvo submitinti.

} else {

header('Location: registracija.html');

exit;

}

Ir siūlau rašyti viską viename faile, nebent planuoji siųsti ajax užklausą. Kitaip vartotojas suklys ir turės viską iš naujo įvesti visus duomenis, kai gali viename faile kai rašai atkurti visus POST, sudėti atgal į laukus.

Ačiū už pagalbą, persirašiau savarankiškai aš tą registraciją, dabar kaip ir viskas normaliai veikia. :)

Dalintis šį pranešimą


Nuoroda iki šio pranešimo
Dalintis per kitą puslapį

Svečias
Ši tema yra užrakinta.

  • Narių peržiūri šį forumą:   0 nariai

    Nėra registruotų narių peržiūrinčių šį forumą.


  • SuperGames programele
  • SuperGames programele


×