hy vọng tất cả đều tốt. tôi có một vấn đề với một số php mà không phải là ngẫu nhiên lựa chọn một ip. Tôi sẽ cố gắng để giải thích.ORDER BY RAND không hoạt động
<select name="State">
<option value="0" selected="selected">Select a State</option>
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
<option value="AZ">Arizona</option>
<option value="AR">Arkansas</option>
etc.....
</select>
Bất kỳ lúc nào khách hàng chọn trạng thái và gửi biểu mẫu đến cơ sở dữ liệu của tôi. Đây là cơ sở dữ liệu của tôi trông giống như
+-------+---------------+
| state | ip |
+-------+---------------+
| AL | 67.100.244.74 |
| AK | 68.20.131.135 |
| AZ | 64.134.225.33 |
+-------+---------------+
Cảm ơn mọi người trên diễn đàn này tôi có một số mã php đang thu thập địa chỉ IP khi gửi biểu mẫu và gửi đến email của tôi. Hoàn hảo. đây là mã số
<?php
// visit http://php.net/pdo for more details
// start error handling
try
{
// connect
$pdo = new PDO('mysql:host=localhost;dbname=name', 'dbuser', 'pass');
// enable error handling through exceptions
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// create safe query
$query = $pdo->prepare("SELECT ip FROM vincer WHERE state = ? ORDER BY RAND() LIMIT 1");
// pass data & execute query (since the data are of string type
// and therefore can be passed in this lazy way)
$query->execute(array($_POST['State']));
// get value
$ip = $query->fetchColumn();
// print out the IP address using $ip
}
catch (Exception $e)
{
echo "sorry, there was an error.";
mail("[email protected]", "database error", $e->getMessage(), "From: [email protected]");
}
?><?php
if(isset($_POST['email'])) {
// EDIT THE 2 LINES BELOW AS REQUIRED
$email_to = "[email protected]";
$email_subject = "This is a test";
function died($error) {
// your error code can go here
echo "We are very sorry, but there were error(s) found with the form you submitted. ";
echo "These errors appear below.<br /><br />";
echo $error."<br /><br />";
echo "Please go back and fix these errors.<br /><br />";
die();
}
// validation expected data exists
if(!isset($_POST['first_name']) ||
!isset($_POST['last_name']) ||
!isset($_POST['email']) ||
!isset($_POST['State']) ||
!isset($_POST['comments'])) {
died('We are sorry, but there appears to be a problem with the form you submitted.');
}
$first_name = $_POST['first_name']; // required
$last_name = $_POST['last_name']; // required
$email_from = $_POST['email']; // required
$state = $_POST['State']; // not required
$comments = $_POST['comments']; // required
$error_message = "";
$email_exp = '/^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
if(!preg_match($email_exp,$email_from)) {
$error_message .= 'The Email Address you entered does not appear to be valid.<br />';
}
$string_exp = "/^[A-Za-z .'-]+$/";
if(!preg_match($string_exp,$first_name)) {
$error_message .= 'The First Name you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$last_name)) {
$error_message .= 'The Last Name you entered does not appear to be valid.<br />';
}
if(strlen($comments) < 2) {
$error_message .= 'The Comments you entered do not appear to be valid.<br />';
}
if(strlen($error_message) > 0) {
died($error_message);
}
$email_message = "Form details below.\n\n";
function clean_string($string) {
$bad = array("content-type","bcc:","to:","cc:","href");
return str_replace($bad,"",$string);
}
$email_message .= "First Name: ".clean_string($first_name)."\n";
$email_message .= "Last Name: ".clean_string($last_name)."\n";
$email_message .= "Email: ".clean_string($email_from)."\n";
$email_message .= "State: ".clean_string($ip)."\n";
$email_message .= "Comments: ".clean_string($comments)."\n";
// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
if (!mail($email_to, $email_subject, $email_message, $headers))
{
echo "failed to send message";
}
?>
Điều duy nhất nó không làm là lấy một ip ngẫu nhiên từ tiểu bang. Đối với mỗi tiểu bang tức là AL, AK, AZ vv .. tôi có khoảng 150 địa chỉ IP khác nhau. Vì vậy, cho phép nói ai đó chọn bang Alabama (AL), tôi muốn nó ngẫu nhiên lựa chọn và ip từ cơ sở dữ liệu đó là trong cùng một hàng như AL. Nó được chọn lên địa chỉ ip ok, nhưng nó luôn luôn gửi cho tôi cùng một ip cho AL.
Theo mã nó nên làm điều này vì ORDER BY RAND là trong đó
$query = $pdo->prepare("SELECT ip FROM vincer WHERE state = ? ORDER BY RAND() LIMIT 1");
Tôi hỏi xung quanh và một số người đề nghị tôi cần một cột trong bảng của tôi với một tên id, vì vậy đây trông giống như thế nào
-------+-------+---------------+
| id | state | ip |
+------+-------+---------------+
| 1 | AL | 67.100.244.74 |
| 2 | AK | 68.20.131.135 |
| 3 | AZ | 64.134.225.33 |
+------+-------+---------------+
Họ nói tôi cần id để tôi có thể kéo ngẫu nhiên vào ip. Có ai biết những gì php code tôi cần phải thêm id này để làm cho tất cả công việc này. Bất kỳ trợ giúp sẽ được nhiều đánh giá cao
Cảm ơn tất cả mọi người
Ali
Nếu bạn chỉ có một kỷ lục đối với một quốc gia, nó sẽ luôn luôn kéo ** mà ** kỷ lục. Cũng lưu ý rằng RAND() sẽ chạy cùng một chuỗi ngẫu nhiên mỗi lần, vì vậy bạn sẽ nhận được cùng một dữ liệu miễn là bảng không thay đổi. – Johan
Nếu bạn chỉ có một hàng với 'state = 'AL'', không có gì lạ khi bạn nhận được cùng một địa chỉ IP. –
"Cũng lưu ý rằng RAND() sẽ chạy cùng một chuỗi ngẫu nhiên mỗi lần, vì vậy bạn sẽ nhận được cùng một dữ liệu miễn là bảng không thay đổi" bạn có từ @John ở đâu? Nếu tôi sử dụng "order by rand() LIMIT 1" trên một bảng, tôi luôn nhận được kết quả khác, ngay cả khi bảng không thay đổi. user1010914 "rand()" cung cấp cho bạn điều gì nếu bạn thực thi nó nhiều lần? có lẽ cấu hình mysql không sử dụng một nguồn giống thích hợp. – Flyingmana