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

Тема в разделе "PHP", создана пользователем imedia, 17 апр 2012.

Модераторы: latteo
  1. imedia

    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. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.065
    Симпатии:
    197
    в

    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 'нет ничего подходящего';} 
     
    вот как то так
     
  3. imedia

    imedia Создатель

    Регистр.:
    22 фев 2012
    Сообщения:
    28
    Симпатии:
    0
    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

    Такой функции нету?
     
  4. imedia

    imedia Создатель

    Регистр.:
    22 фев 2012
    Сообщения:
    28
    Симпатии:
    0
    Кажеться понял! Вы имели ввиду mysql_fetch_array?
     
  5. imedia

    imedia Создатель

    Регистр.:
    22 фев 2012
    Сообщения:
    28
    Симпатии:
    0
    Только вот 1 проблема:
    Если при заказах одинаковый email то возникает ошибка! Как это исправить?
     
  6. AlexMist

    AlexMist Создатель

    Регистр.:
    17 ноя 2009
    Сообщения:
    49
    Симпатии:
    7
    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 
    'Значения пусты';
    }
     
    ?>
    Пожалуйста уважайте людей которые вам помогают , применять телепатию не всегда возможно.
     
  7. imedia

    imedia Создатель

    Регистр.:
    22 фев 2012
    Сообщения:
    28
    Симпатии:
    0
    Хеш заказа это 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 
    'Значения пусты';
    }
     
    ?>
     
  8. Black#FFFFFF

    Black#FFFFFF

    Регистр.:
    19 июл 2007
    Сообщения:
    175
    Симпатии:
    103
    Во первых, неправильно указан плейсхолдер:

    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 -> если там есть юникод, ждите приколов.