Реализация...

imedia

Создатель
Регистрация
22 Фев 2012
Сообщения
28
Реакции
0
Есть сайт на localhost (SimplaCMS) требуется выдача определенного текста, если url в бд = email в БД.
Я Сделал:
PHP:
<?php
 
//подключение к mysql
$u = "root";
$p = "";
$db = "shop";
 
mysql_connect("localhost", $u, $p) or die("Could not connect: ".mysql_error());
mysql_select_db($db) or die ("Could not select db: ".mysql_error());
 
$email = $_POST['email'];
$hash = $_POST['orderHash'];
$orderInfo = mysql_query("SELECT url FROM s_orders WHERE email='$email'") or die ("db: ".mysql_error());
 
if($hash == $orderInfo) {echo'else';} else {echo $hash;}
 
 
?>

Но это не работает. Чую, что в IF беда. Как исправить?
 
  • Заблокирован
  • #2
в
Есть сайт на localhost (SimplaCMS) требуется выдача определенного текста, если url в бд = email в БД.
Я Сделал:
PHP:
<?php
 
//подключение к mysql
$u = "root";
$p = "";
$db = "shop";
 
mysql_connect("localhost", $u, $p) or die("Could not connect: ".mysql_error());
mysql_select_db($db) or die ("Could not select db: ".mysql_error());
 
$email = $_POST['email'];
$hash = $_POST['orderHash'];
$orderInfo = mysql_query("SELECT url FROM s_orders WHERE email='$email'") or die ("db: ".mysql_error());
 
if($hash == $orderInfo) {echo'else';} else {echo $hash;}
 
 
?>

Но это не работает. Чую, что в IF беда. Как исправить?


email скрипту точно отдается через POST ? Пишите лучше REQUEST.

к тому же вы только сделали запрос в базу mysql_query
а где же получение данных?
PHP:
 $orderInfo = mysql_query("SELECT url FROM s_orders WHERE email='$email' LIMIT 1") or die ("db: ".mysql_error());
$orderData = mysql_get_row($orderInfo);
if($hash ==  $orderData[url]) {echo'Да все сходится';} else {echo 'нет ничего подходящего';}
вот как то так
 
PHP:
<?php
 
//подключение к mysql
$u = "root";
$p = "";
$db = "shop";
 
mysql_connect("localhost", $u, $p) or die("Could not connect: ".mysql_error());
mysql_select_db($db) or die ("Could not select db: ".mysql_error());
 
$email = $_REQUEST['email'];
$hash = $_REQUEST['orderHash'];
 
$orderInfo = mysql_query("SELECT url FROM s_orders WHERE email='$email' LIMIT 1") or die ("db: ".mysql_error());
$orderData = mysql_get_row($orderInfo);
if($hash ==  $orderData[url]) {echo'Да все сходится';} else {echo 'нет ничего подходящего';}
 
 
?>


А результат: Fatal error: Call to undefined function mysql_get_row() in S:\home\rusearch.org\store\licenseGet.php on line 15

Такой функции нету?
 
Кажеться понял! Вы имели ввиду mysql_fetch_array?
 
Только вот 1 проблема:
Если при заказах одинаковый email то возникает ошибка! Как это исправить?
 
1) Вы бы задачу поконкретнее описали, может и самим станет понятно что делать. Что за хешь заказа, откуда и зачем он передается.
Лепить в скрипт данные БД очень не безопасно, тем более таким методом, у вас сразу появляется уязвимость.

2) У симплы , как у всех CMS есть api для работы с БД. Смотря где вы размещаете свой код можно к нему обратиться!
Например создав экземпляр класса DB api/*.php.

PHP:
<?php
require_once('path_to_api/Simpla.php');
 
$test = new Simpla;
$email = $test->request->post('email');
$orderHash = $test->request->post('orderHash');
 
if (!( empty($email) || empty($orderHash) )) {
    $query = $test->db->placehold('SELECT id, url FROM s_orders WHERE email= :email', $email);
    $test->db->query($query);
    $orders = array();
    foreach($test->db->results() as $order) {
        if ( trim($order->url)  == $orderHash ) {
            echo 'Есть совпадения!!!';
        }
    }
}
else {
    echo 'Значения пусты';
}
 
?>

Пожалуйста уважайте людей которые вам помогают , применять телепатию не всегда возможно.
 
Хеш заказа это URL (order/xxxxxxxxxxxxxxxxxxxxxxxxxxx) надо проверку если хыш совпадает с email и статус заказа: Оплачен то выдать ок иначе error.

В результате кода выдает:
Warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':email' at line 1 [SELECT id, url FROM s_orders WHERE email= :email] in S:\home\rusearch.org\store\api\Database.php on line 116

Warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':email' at line 1 in S:\home\rusearch.org\store\api\Database.php on line 161

Warning: Invalid argument supplied for foreach() in S:\home\rusearch.org\store\licenseGet.php on line 29

Код:
PHP:
<?php
/*
//подключение к mysql
$u = "root";
$p = "";
$db = "shop";
 
mysql_connect("localhost", $u, $p) or die("Could not connect: ".mysql_error());
mysql_select_db($db) or die ("Could not select db: ".mysql_error());
 
$email = $_REQUEST['email'];
$hash = $_REQUEST['orderHash'];
 
$orderInfo = mysql_query("SELECT url FROM s_orders WHERE email='$email'") or die ("db: ".mysql_error());
$orderData = mysql_fetch_array($orderInfo);
if($hash ==  $orderData[url]) {echo'ok';} else {echo 'error';}
 
*/
require_once('api/Simpla.php');
 
$test = new Simpla;
$email = $test->request->post('email');
$orderHash = $test->request->post('orderHash');
 
if (!( empty($email) || empty($orderHash) )) {
    $query = $test->db->placehold('SELECT id, url FROM s_orders WHERE email= :email', $email);
    $test->db->query($query);
    $orders = array();
    foreach($test->db->results() as $order) {
        if ( trim($order->url)  == $orderHash ) {
            echo 'Есть совпадения!!!';
        }
    }
}
else {
    echo 'Значения пусты';
}
 
?>
 
Во первых, неправильно указан плейсхолдер:

PHP:
$query = $test->db->placehold('SELECT id, url FROM s_orders WHERE email=?', $email);

И во вторых проверяем, а действительно ли данные были выбраны? Перед foreach:

PHP:
$result =$test->db->results();
 
if($result && is_array($result) && sizeof($result)){
 
  foreach($result as $order) {
 
        if ( trim($order->url)  == $orderHash ) {
 
            echo 'Есть совпадения!!!';
 
        }
 
    }
 
} else {
 
  echo 'ничего не найдено';
 
}

Ну я бы еще и не баловался с trim -> если там есть юникод, ждите приколов.
 
Назад
Сверху