Autor Zpráva
Wayd
Profil
zdravím vás tu...
Mám menší problém s převodem mysql do postgre. Přiznám s potgre se setkávám pořádně poprvé, takže opravdu nemám žádné tušení ...

volání mysql + login form
<?php 
  error_reporting(0); //hlášení chyb php
  session_start();
  if($_GET[action]=="logout"){
    session_destroy();
    header("Location:index.php");
    exit;
  }
  include("connect.php");
                                          
  if($_GET[action]==login){
  if(!empty($_POST[login]) AND !empty($_POST[pwd])){
  $dotaz=mysql_query("SELECT `id`,`user`, `level` FROM `db_users` WHERE `user` = '$_POST[login]' AND `pass` = '$_POST[pwd]' Limit 1");
  $data=mysql_fetch_assoc($dotaz);
  if(mysql_num_rows($dotaz)==1){
    $_SESSION[log]=true;
    $_SESSION[user_id]=$data[id];
    $_SESSION[user]=$data[user];
    $_SESSION[level]=$data[level];
    header("Location: index.php");
    die();
  }
    else{
        $error_log=1;
      }

    }else{
      if(empty($_POST[login]) OR empty($_POST[pwd])){
          $error_log2=1;
        }

      }
    }
?>




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">   
<html xml:lang="cs" xmlns="http://www.w3.org/1999/xhtml">  
  <head>       
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />    
    <link rel="stylesheet" type="text/css" href="style.css" />
    <link rel="stylesheet" href="jquery-ui-1.8.16.custom.css"> 
    <script type="text/javascript" src='jquery-1.7.1.js'></script>
    <script type="text/javascript" src='jquery-1.7.1.min.js'></script>   
    <title>--</title>  
  </head>  
  <body> 
    
  <!-- script na enable/disable tlačítka stahování-->
  <script type="text/javascript">
    $(document).ready(function(){
    $("#check").click(function(){
    if ($('#check').is(':checked')) {
        $('#stahuj').removeAttr('disabled');
        
    } else {
        $('#stahuj').attr('disabled', true);
    }   
   });
    });
  </script>


  <div class="ground">
    <div class="logo"><h1></h1>
  </div><!-- /logo -->
        


  <?php if($_SESSION[log]==false){
          ?>     
         
        <form action="?action=login" method="post">   
          <table>
            <tr><td><b>Login:</b></td><td><input type="text" name="login" size="26" /></td></tr>
            <tr><td><b>Password:</b>  </td><td><input type="password" name="pwd" size="26" /></td></tr>
          </table>

          <br>
          <?php if($error_log==1) echo "Špatně zadané přihlašovací údaje";?>
          <?php if($error_log2==1) echo "Neúplné přihlašovací údaje"; ?>
          <br>
          <br>
          <input type="submit" name="Přihlásit" value="Přihlásit" style="height: 30px; width: 100px ; background: #D00000 ; color:white" /><br />
 
        </form>    
      </center>
<?php
}
else{
?>

      <div class="menu">
        <ul>
          <?php
          if($_SESSION[level]==admin){
          ?>
            <li><a href="index.php?p=main&action=add&amp"><font color="white">Přidání uživatele</font></a></li>
            <li><a href="index.php?p=main&action=sdeleni&amp"><font color="white">Editace sdělení</font></a></li>
             <?
              }
            ?>
            <li><a href=""><font color="white">Login</font></a></li>
            <li><a href="index.php?action=logout"><font color="white">Odhlášení</font></a></li>
        </ul>
      </div> <!-- menu-->
    <br />

      <?php
      if($_GET["p"]==""){$_GET['p']="main";}
      if(isset($_GET["p"])) {                     //budeme inkludovat stranku
        if(file_exists("./".$_GET["p"].".php") &&  //zjistime, jestli stranka existuje (zamezeni RFI)
      (substr_count($_GET["p"], "../") == 0) &&  //omezime vkladani podrazenych slozek (linux)
      (substr_count($_GET["p"], "/") == 0) &&   //Omezení includování podrazených adresáru
      (substr_count($_GET["p"], "..\\") == 0)){   //to same pro win
        include_once "./$_GET[p].php";       //pokud jsme vsim prosli, inkludujeme
      }
      }
      }
      ?>

       
        <br><br><br><div class="paticka">Copyright &copy;&nbsp;2012 <a href=""></a> | e-mail: <a href="mailto:"></a> </div>
    </div><!-- /paticka -->
                         
  </body>
</html>                                                            


  
    
         


tabulka
id serial NOT NULL,
  "user" character varying(100),
  pass character varying(100),
  level character varying(100),
  stazeni time without time zone,

Díky za každou pomoc a radu
Kajman
Profil
Nevolejte mysql funkce, ale jejich obdoby pro zvolenou databázi...
http://cz.php.net/manual/en/book.pgsql.php

Nezapomeňte příslušně upravit i connect.php - případně si udělat jiný soubor, prokud jinde mysql ještě budete používat. Také si doplňte ošetření proti sql injection.
Wayd
Profil
<?php 
  error_reporting(0); //hlášení chyb php
  session_start();
  if($_GET[action]=="logout"){
    session_destroy();
    header("Location:index.php");
    exit;
  }
  include("connect.php");
  if($_GET[action]==login){  
    if(!empty($_POST[login]) AND !empty($_POST[pwd])){

      $dotaz=pg_query("SELECT id, user, level FROM db_users_ete WHERE user = $_POST[login] AND pass = $_POST[pwd] Limit 1");
      if (!$dotaz)   echo "err in pg_query";  ///zde zkončím, resp přihlášení neproběhne vůbec v pořádku . Předpokládám chybu v řádku výše?
      $data = pg_fetch_assoc($dotaz);
      if (pg_num_rows($data) == 1){
        $_SESSION[log]=true;
        $_SESSION[user_id]=$data[id];
        $_SESSION[user]=$data[user];
        $_SESSION[level]=$data[level];
        header("Location: index.php");   
        die();
      }
      else{$error_log=1;}
    }
    else{
      if(empty($_POST[login]) OR empty($_POST[pwd])){
        $error_log2=1;
      }
    }  
      
  }
?>

connect.php
<?php

$dbconn = pg_connect("host=IP dbname=(name) user=(user) password=(pass)")
    or die('Could not connect: ' . pg_last_error());

?> 
shaggy
Profil
Wayd:
Gratulujem k úspešnej zmene mysql funkcií za pgsql funkcie. Som rád, že tento web opäť raz pomohol (ale ten kód si sem nemusel dávať... alebo si sa chcel ešte niečo opýtať?).
Wayd
Profil
Jen bych rád ještě potřeboval "nakopnout" ..

 $dotaz=pg_query("SELECT id, user, level FROM db_users_ete WHERE user = $_POST[login] AND pass = $_POST[pwd] Limit 1");
      if (!$dotaz)   echo "err in pg_query";  

a konečná je :"err in pg_query".
Je tam něco špatně v dotazu pg_query?
Kajman
Profil
Zkuste
$dotaz=pg_query_params('SELECT id, "user", level FROM db_users_ete WHERE "user" = $1  AND pass = $2 LIMIT 1', array($_POST['login'],$_POST['pwd']));
      if (!$dotaz)   echo "err in pg_query - ", pg_last_error() ; 
Wayd
Profil
výborné :).
Ovšem nyní jsem zůstal stát na zbytku přihlašování..
na dvou místech jsou ECHO, která zobrazila :" Resource id #4Array "

viz.
if($_GET[action]==login){  
    if(!empty($_POST[login]) AND !empty($_POST[pwd])){

      $dotaz=pg_query_params('SELECT id, "user", level FROM db_users_ete WHERE "user" = $1  AND pass = $2 LIMIT 1', array($_POST['login'],$_POST['pwd']));
      if (!$dotaz)   echo "err in pg_query - ", 
      pg_last_error() ; 

      echo "$dotaz";

      $data = pg_fetch_assoc($dotaz);

      echo "$data";

      if (pg_num_rows($data) == 1){
        $_SESSION[log]=true;
        $_SESSION[user_id]=$data[id];
        $_SESSION[user]=$data[user];
        $_SESSION[level]=$data[level];
        header("Location: index.php");   
        die();
      }
      else{$error_log=1;}
    }
    else{
      if(empty($_POST[login]) OR empty($_POST[pwd])){
        $error_log2=1;
      }
    }  
      
  }

zde je problém, zacyklil jsem se na tom, že nejsem vpuštěn jelikož nejsem vyhodnocen ani jako uživatel ani jako admin..
Kajman
Profil
Vypisovat si $dotaz je nesmysl. Pokud si chcete vypsat $data, použijte např.
print_r($data);

Dále jako parametr pro pg_num_rows patří proměnná $dotaz, jak to bylo v původní mysql verzi.
Wayd
Profil
Kajman:
Tak tohoto jsem si nevšiml..:D. děkuji


Jinak poslední obsáhlejší dotaz..

Opravil jsem pg_query v souboru "admin.php". Ovšem předpokládám, že takto to není správně?

<?php 
  session_start();
  include("connect.php");

  function newid($db){
    $dotaz=SELECT MAX(id) as `maxid` FROM `$db`;
    $data=pg_fetch_assoc($dotaz);
    return $data[maxid]+1;
  }

  if($_SESSION[level]==admin){
    
    // Přidání nového uživatele
    if($_GET[action]==add && $_GET[sekce]==user){
      pg_query("INSERT INTO `db_users` (`id`,`user`,`pass`,`level`) VALUES ('".newid(db_users)."','$_POST[user]','$_POST[pass]','$_POST[level]')") or die(pg_error());
    }
    // Úprava stávajícího uživatele
    if($_GET[action]==edit && $_GET[sekce]==user){  
      pg_query("UPDATE `db_users` SET `user` = '$_POST[user]', `pass` = '$_POST[pass]' , `level` = '$_POST[level]' WHERE `id` = '$_GET[id]' LIMIT 1") or die(pg_error());
    }
    // Smazani uživatele
    if($_GET[action]==del && $_GET[sekce]==user){
      pg_query("DELETE FROM `db_users` WHERE `id` = '$_GET[id]' LIMIT 1") or die(pg_error());
    }
    //editace_sdeleni
    if($_GET[action]==sdeleni ){  
      pg_query("UPDATE `db_sdeleni` SET `sdeleni` = '$_POST[sdeleni]' WHERE `id` = '1' LIMIT 1") or die(pg_error());
    }
  header ("Location: ".$_SERVER["HTTP_REFERER"]);
  exit;
}
?>          
Kajman
Profil
Všimněte si rozdílů mezi 13. řádkem v [#1] a 1. řádkem v [#6]. Stejným způsobem pak převeďte další dotazy s proměnnými. Pečlivě rozlišujte použité uvozovky, apostrofy a zpětné apostrofy.

Dále na nová id používejte v PostgreSQL sekvence.
Wayd
Profil
všem děkuji za radu a váš čas:).
Klobou před Vámi.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: