यहाँ कुछ चीज़ें गलत हैं।
आप गलत पहचानकर्ता आपके कॉलम के लिए (और उद्धरण होने के नाते):
('id', 'username', 'password', 'email')
उन्हें हटा दें
(id, username, password, email)
या बैकटिक्स का उपयोग करें
(`id`, `username`, `password`, `email`)
mysql_error()
आपको एक त्रुटि फेंकनी चाहिए थी, लेकिन इसकी वजह से नहीं:
- आप MySQL API को
mysqli_
. के साथ मिला रहे हैं कनेक्ट करने के लिए, फिरmysql_
आपकी क्वेरी में।
वे दो अलग-अलग एपीआई एक दूसरे के साथ इंटरमिक्स नहीं करते हैं।
mysqli_
का उपयोग करें विशेष रूप से और अपनी वर्तमान क्वेरी को इसमें बदलें:
if($query = mysqli_query($connect, "INSERT...
और बदलें mysql_error()
करने के लिए mysqli_error($connect)
उस ब्लॉक के लिए पुनर्लेखन के रूप में:
if(isset($_POST["submit"])){
if($query = mysqli_query($connect,"INSERT INTO users ('id', 'username', 'password', 'email') VALUES('', '".$username."', '".$password."', '".$email."')")){
echo "Success";
}else{
echo "Failure" . mysqli_error($connect);
}
}
बस त्रुटि का परीक्षण करने के लिए, जैसा कि मैंने ऊपर उल्लिखित किया है, वैसे ही अपने कॉलम के चारों ओर उद्धरणों को रखते हुए परिवर्तन करें, जैसा कि अभी आपके पास है। फिर आपको वह त्रुटि दिखाई देगी जो MySQL फेंक देगा। फिर आप ऐसा कर सकते हैं जैसा कि मैंने पहले ही ऊपर उल्लिखित किया है और कॉलम नामों के आसपास के उद्धरणों को हटा दें, या उन्हें बैकटिक्स से बदल दें।
आपने जो ट्यूटोरियल देखा, वह शायद बैकटिक्स का बहुत अच्छी तरह से उपयोग किया गया हो, लेकिन शायद इतना अलग नहीं था कि आप यह बता सकें कि वे वास्तव में बैकटिक्स थे और सिंगल कोट्स नहीं थे।
हालांकि, आपका वर्तमान कोड SQL इंजेक्शन के लिए खुला है।
. mysqli
का उपयोग करें तैयार बयानों के साथ
, या तैयार बयानों के साथ PDO
, वे अधिक सुरक्षित हैं ।
मैंने देखा है कि आप सादे पाठ में पासवर्ड संग्रहीत कर रहे होंगे। अगर ऐसा है, तो यह बेहद हतोत्साहित करने वाला है।
मेरा सुझाव है कि आप CRYPT_BLOWFISH का उपयोग करें
या PHP 5.5 का password_hash()
समारोह। PHP <5.5 के लिए password_hash() compatibility pack
का उपयोग करें
.
इसके अलावा, करने के बजाय:
$connect = mysqli_connect("localhost", "root", "") or die("Could not connect to server!");
mysqli_select_db($connect, "php_forum") or die("Could not connect to database!");
आपको इसके बजाय त्रुटियों की जांच करनी चाहिए, जैसा कि मैनुअल बताता है
$link = mysqli_connect("myhost","myuser","mypassw","mybd")
or die("Error " . mysqli_error($link));
तो आपके मामले में:
$connect = mysqli_connect("localhost", "root", "","php_forum")
or die("Error " . mysqli_error($connect));
संपादित करें: और मैंने action="register.php"
. को बदल दिया करने के लिए action=""
चूंकि आप एक ही पेज के अंदर पूरे कोड का उपयोग कर रहे हैं।
<!DOCTYPE HTML>
<html>
<head>
<title>Register</title>
</head>
<body>
<form action="" method="POST">
Username: <input type="text" name="username">
<br/>
Password: <input type="password" name="password">
<br/>
Confirm Password: <input type="password" name="confirmPassword">
<br/>
Email: <input type="text" name="email">
<br/>
<input type="submit" name="submit" value="Register"> or <a href="login.php">Log in</a>
</form>
</body>
</html>
<?php
require('connect.php');
$username = $_POST['username'];
$password = $_POST['password'];
$confirmPassword = $_POST['confirmPassword'];
$email = $_POST['email'];
if(isset($_POST["submit"])){
if($query = mysqli_query($connect,"INSERT INTO users (`id`, `username`, `password`, `email`) VALUES ('', '".$username."', '".$password."', '".$email."')")){
echo "Success";
}else{
echo "Failure" . mysqli_error($connect);
}
}
?>