insert ค่าเข้ามาในดาต้าเบตแล้วไม่เป็นภาษาไทยค่ะ สอบถามรายละเอียดเล็กๆน้อยๆ
ตามหัวข้อเลยค่ะ
ตั้งค่าใน database แบบนี้
หลังจาก insert
อันนี้หน้าที่ไว้ใช้ insert 2 ตารางใน 1 ฟอร์ม
Code (PHP)
<?php
require 'connectdb.php';
$login_username = $_POST['username'];
$login_password = $_POST['password'];
$login_email = $_POST['email'];
$firstname = $_POST['firstname'];
$last_name = $_POST['lastname'];
$nickname = $_POST['nickname'];
$address = $_POST['address'];
$phone = $_POST['phone'];
//เข้ารหัส รหัสผ่าน
$salt = 'tikde78uj4ujuhlaoikiksakeidke';
$hash_login_password = hash_hmac('sha256', $login_password, $salt);
//เป็นการเซ็ตค่าให้เป็นภาษาไทยในกรณีที่ภายในcollation เป็นประเภทอื่นที่ไม่ใช่ utf8_unicode_ci
mysqli_query("SET character_set_results=utf8");
mysqli_query("SET character_set_client=utf8");
mysqli_query("SET character_set_connection=utf8");
$query = "INSERT INTO tb_login (login_username,login_password,login_email) VALUES ('$login_username','$hash_login_password','$login_email')";
$result = mysqli_query($dbcon,$query);
$query2="INSERT INTO student (firstname_s,lastname_s,nickname_s,address_s,phone_s,email_s) VALUES ('$firstname','$last_name','$nickname','$address','$phone','$login_email')";
$result2 = mysqli_query ($dbcon,$query2);
if ($result&&$result2) {
header("Location: index.php");
} else {
echo "เกิดข้อผิดพลาด ". mysqli_error($dbcon);
}
mysqli_close($dbcon);
หน้าที่ไว้เชื่อมใน database
Code (PHP)
<?php
$dbcon = new mysqli('localhost','root','','enggoal');
if($dbcon->connect_error){
die('Connect Error: ' . $dbcon->connect_error);
}
mysqli_query("SET character_set_results=utf8");
mysqli_query("SET character_set_client=utf8");
mysqli_query("SET character_set_connection=utf8");
?>
Tag : PHP, MySQL
ประวัติการแก้ไข 2017-12-20 21:22:01 2017-12-20 21:23:36 2017-12-20 21:39:12 2017-12-21 02:16:48
Date :
2017-12-20 21:21:05
By :
ny2003
View :
1106
Reply :
13
Code (PHP)
<?php
require 'connectdb.php';
$login_username = $_POST['username'];
$login_password = $_POST['password'];
$login_email = $_POST['email'];
$firstname = $_POST['firstname'];
$last_name = $_POST['lastname'];
$nickname = $_POST['nickname'];
$address = $_POST['address'];
$phone = $_POST['phone'];
//เข้ารหัส รหัสผ่าน
$salt = 'tikde78uj4ujuhlaoikiksakeidke';
$hash_login_password = hash_hmac('sha256', $login_password, $salt);
//เป็นการเซ็ตค่าให้เป็นภาษาไทยในกรณีที่ภายในcollation เป็นประเภทอื่นที่ไม่ใช่ utf8_unicode_ci
//mysqli_query("SET character_set_results=utf8");
//mysqli_query("SET character_set_client=utf8");
//mysqli_query("SET character_set_connection=utf8");
$query = "INSERT INTO tb_login (login_username,login_password,login_email) VALUES ('$login_username','$hash_login_password','$login_email')";
$result = mysqli_query($dbcon,$query);
$query2="INSERT INTO student (firstname_s,lastname_s,nickname_s,address_s,phone_s,email_s) VALUES ('$firstname','$last_name','$nickname','$address','$phone','$email')";
$result2 = mysqli_query ($dbcon,$query2);
if ($result&&$result2) {
header("Location: index.php");
} else {
echo "เกิดข้อผิดพลาด ". mysqli_error($dbcon);
}
mysqli_close($dbcon);
ลองคอมเม้นปิดไว้ครับ แล้วลองเช็คอีกรอบ หรือ เข้าไป ในส่วนของ collection ใน phpmyadmin วา่ เป็น utf8 ไหม
Date :
2017-12-20 22:59:53
By :
menphurk
เป็นนะคะ หมายถึง utf8 ในคอลัมน์ใช่ไหมคะ?
Date :
2017-12-21 02:20:52
By :
ny2003
ตัวอย่างการใช้ mysqli::prepare เพื่อป้องกัน sql injection
Code (PHP)
<?php
// connectdb.php
$dbcon = new mysqli('localhost','root','','enggoal');
if($dbcon->connect_error){
die('Connect Error: ' . $dbcon->connect_error);
}
$dbcon->set_charset("utf-8");
Code (PHP)
<?php
require 'connectdb.php';
$ar=array($_POST['username'], $_POST['password'], $_POST['email'], $_POST['firstname']
, $_POST['lastname', $_POST['nickname'], $_POST['address'], $_POST['phone']
);
//เข้ารหัส รหัสผ่าน
$salt = 'tikde78uj4ujuhlaoikiksakeidke';
$hash_login_password = hash_hmac('sha256', $_POST['password'], $salt);
if ($stmt = $dbcon->prepare('insert into tb_login set login_username=?, login_password=? , login_email=?')) {
$stmt->bind_param("sss", $_POST['username'], $hash_login_password, $_POST['email']);
$rs1=$stmt->execute();
$stmt->close();
}
if (!$rs1) die("เกิดข้อผิดพลาด <br>" . $dbcon->error);
$ins='INSERT INTO student set firstname_s=?, lastname_s=?, nickname_s=?, address_s=?, phone_s=?, email_s=?';
if ($stmt = $dbcon->prepare($ins)) {
$stmt->bind_param("ssssss",
$_POST['firstname'],$_POST['last_name'],$_POST['nickname']
,$_POST['address'],$_POST['phone'],$_POST['email']
);
$rs2=$stmt->execute();
$stmt->close();
}
if ($rs2) {
header("Location: index.php");
} else {
die("เกิดข้อผิดพลาด<br>" . $dbcon->error);
}
ส่วนที่เป็นปัญหาของเจ้าของกระทู้ น่าจะมาจากบันทัดที่ 7 ใน connectdb.php
ตัวคิวรี่ ไม่มี link
หรือจาก html ลองเช็คส่วนหัวของ html ดูว่ามีกำหนดภาษา คล้ายแบบนี้ไหม
Code (PHP)
<!doctype html>
<html>
<head>
<title>test ภาษาไทย</title>
<meta charset="utf-8">
</head>
<body>
<p>สวัสดีครับ รักทุกคนนะครับ</p>
</body>
</html>
ประวัติการแก้ไข 2017-12-21 08:24:59
Date :
2017-12-21 08:20:41
By :
Chaidhanan
ลองทำแล้ว ตอนนี้กลายเป็นว่าในตารางนักเรียนที่อยากให้ข้อมูล insert เข้าไปก็ไม่ insert ให้ แต่ในตาราง user ก็ใช้ได้ ตอนนี้เปลี่ยน collationตารางเป็นแบบ utf8_unicode_ci ในคอลัมน์ก็เปลี่ยนหมดแล้ว ใช้โค้ดเดิมควบกันไปก็ insert ในตารางนักเรียนได้ แต่ภาษาก็ยึกยือเหมือนเดิมเลยค่ะ
Date :
2017-12-21 18:36:54
By :
ny2003
แก้ไขยังไงเอาโค๊ดมาดูหน่อยครับ
Date :
2017-12-21 18:52:27
By :
Chaidhanan
register.php
Code (PHP)
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<?php
require 'connectdb.php';
$ar=array($_POST['username'], $_POST['password'], $_POST['email'], $_POST['firstname']
, $_POST['lastname'], $_POST['nickname'], $_POST['address'], $_POST['phone']
);
//เข้ารหัส รหัสผ่าน
$salt = 'tikde78uj4ujuhlaoikiksakeidke';
$hash_login_password = hash_hmac('sha256', $_POST['password'], $salt);
if ($stmt = $dbcon->prepare('insert into tb_login set login_username=?, login_password=? , login_email=?')) {
$stmt->bind_param("sss", $_POST['username'], $hash_login_password, $_POST['email']);
$rs1=$stmt->execute();
$stmt->close();
}
if (!$rs1) die("เกิดข้อผิดพลาด <br>" . $dbcon->error);
$ins='INSERT INTO student set firstname_s=?, lastname_s=?, nickname_s=?, address_s=?, phone_s=?, email_s=?';
if ($stmt = $dbcon->prepare($ins)) {
$stmt->bind_param("ssssss",
$_POST['firstname'],$_POST['last_name'],$_POST['nickname']
,$_POST['address'],$_POST['phone'],$_POST['email']
);
$rs2=$stmt->execute();
$stmt->close();
}
if ($rs2) {
header("Location: index.php");
} else {
die("เกิดข้อผิดพลาด<br>" . $dbcon->error);
}
?>
</body>
</html>
connectdb.php
Code (PHP)
<?php
$dbcon = new mysqli('localhost','root','','enggoal');
if($dbcon->connect_error){
die('Connect Error: ' . $dbcon->connect_error);
}
$dbcon->set_charset("utf-8");
?>
หรือตรงdocument ต้องใส่
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
แบบนี้คะ?
พอใส่ข้อมูลแล้วมันก็ขึ้นเกิดข้อผิดพลาดให้อ่ะค่ะ แต่ในตาราง tb_login มันขึ้นให้นะคะ แต่ตาราง student มันไม่ขึ้นข้อมูลให้เลย
Date :
2017-12-21 19:17:37
By :
ny2003
register.php ไม่ต้องใส่ <!doctype> ครับ เป็น ส่วนของ server ที่รับ request
ที่ต้องตรวจสอบคือ ไฟล์ ที่เอาข้อมูลเข้า และ ส่ง request มายัง register.php ครับ
ทดสอบข้อมูลใน register.php ว่ามีอะไรส่งมาบ้าง
Code (PHP)
<?php
require 'connectdb.php';
/* อันนี้ลืม ลบ ไม่ได้ใช้
$ar=array($_POST['username'], $_POST['password'], $_POST['email'], $_POST['firstname']
, $_POST['lastname'], $_POST['nickname'], $_POST['address'], $_POST['phone']
);
*/
// เพิ่มบันทัดนี้เพื่อตรวจสอบข้อมูลหน่อยครับ
var_dump($_POST); exit;
//เข้ารหัส รหัสผ่าน
$salt = 'tikde78uj4ujuhlaoikiksakeidke';
$hash_login_password = hash_hmac('sha256', $_POST['password'], $salt);
if ($stmt = $dbcon->prepare('insert into tb_login set login_username=?, login_password=? , login_email=?')) {
$stmt->bind_param("sss", $_POST['username'], $hash_login_password, $_POST['email']);
$rs1=$stmt->execute();
$stmt->close();
}
if (!$rs1) die("เกิดข้อผิดพลาด <br>" . $dbcon->error);
$ins='INSERT INTO student set firstname_s=?, lastname_s=?, nickname_s=?, address_s=?, phone_s=?, email_s=?';
if ($stmt = $dbcon->prepare($ins)) {
$stmt->bind_param("ssssss",
$_POST['firstname'],$_POST['last_name'],$_POST['nickname']
,$_POST['address'],$_POST['phone'],$_POST['email']
);
$rs2=$stmt->execute();
$stmt->close();
}
if ($rs2) {
header("Location: index.php");
} else {
die("เกิดข้อผิดพลาด<br>" . $dbcon->error);
}
Date :
2017-12-21 19:49:08
By :
Chaidhanan
ขึ้นแบบนี้ค่ะ
array(9) { ["firstname"]=> string(12) "ทิตา" ["lastname"]=> string(21) "สุขเสรี" ["nickname"]=> string(6) "ทิ" ["address"]=> string(22) "289 สา่วสา" ["phone"]=> string(11) "09878374629" ["username"]=> string(2) "ti" ["password"]=> string(2) "ti" ["email"]=> string(12) "[email protected] " ["submit"]=> string(15) "สมัคร" }
รับค่ามาจาก frm_register.php ที่มีแค่กล่องที่ใช้ input เฉยๆอ่ะค่ะ ส่วนวิธีการข้างในก็เอามาทำใน register.php
Date :
2017-12-21 20:00:32
By :
ny2003
$_POST['last_name'] สกดผิด
ปล. อย่าลืมเอาบันทัด 9 var_dump ออกด้วยนะครับ 5555
ประวัติการแก้ไข 2017-12-21 21:08:46
Date :
2017-12-21 21:04:26
By :
Chaidhanan
พอกดสมัครแล้วขึ้นว่าเกิดข้อผิดพลาดอ่ะค่ะ
ประวัติการแก้ไข 2017-12-22 11:50:00
Date :
2017-12-22 11:49:37
By :
ny2003
และ เออเร่อร์อื่นๆ ล่ะครับ มันต้องขึ้น อย่างอื่นมาด้วย
อันนี้เอาไปทดลองทำ ก็ไม่เห็นจะมี error อะไรน่ะครับ
Code (PHP)
<?php
//require 'connectdb.php';
$dbcon = new mysqli('localhost','test','test','test');
if($dbcon->connect_error){
die('Connect Error: ' . $dbcon->connect_error);
}
$dbcon->set_charset("utf-8");
$ar=$_POST;
//เข้ารหัส รหัสผ่าน
$salt = 'tikde78uj4ujuhlaoikiksakeidke';
$hash_login_password = hash_hmac('sha256', $ar['password'], $salt);
///////////
$stmt = $dbcon->prepare('insert into tb_login set login_username=?, login_password=? , login_email=?');
$stmt->bind_param("sss", $ar['username'], $hash_login_password, $ar['email']);
///////////
if(!$stmt->execute()) die("เกิดข้อผิดพลาด 1 <br>" . print_r($stmt->error_list,true));
$stmt->close();
$ins='INSERT INTO student set firstname_s=?, lastname_s=?, nickname_s=?, address_s=?, phone_s=?, email_s=?';
$stmt = $dbcon->prepare($ins);
$stmt->bind_param("ssssss", $ar['firstname'],$ar['lastname'],$ar['nickname'],$ar['address'],$ar['phone'],$ar['email']);
//////////
if( !$stmt->execute()) die("เกิดข้อผิดพลาด 2 <br>" . print_r($stmt->error_list,true));
$stmt->close();
echo 'complete';
//header("Location: index.php");
Date :
2017-12-22 15:15:21
By :
Chaidhanan
ได้แล้วค่ะๆ
Date :
2017-12-22 18:27:20
By :
ny2003
Load balance : Server 00