Skocz do zawartości

Dziwny błąd MySql


kt1117

Rekomendowane odpowiedzi

Witam.

Mam bardzo dziwny problem. Piszę stronkę i mam problem. Zleceniodawca znalazł błąd, mówi, że podczas dodawania ogłoszenia wyskakuje mu błąd:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/ogloszen/public_html/kramy.php on line 60

Tak jakbym nie wywołał SELECT, ale z mojego kompa takiego problemu nie mam. Loguje się na dowolne konto i wszystko śmiga a on nie może dodać ogłoszenia. Wiecie czemu tak się dzieje?

Odnośnik do komentarza
Udostępnij na innych stronach

<?php
ob_start();
session_start();

    
    print "
    <head>
    
            <meta name='keywords' content='' />
            <meta name='description' content='' />
            <meta http-equiv='content-type' content='text/html; charset=utf-8' />
            <meta http-equiv='content-language' content='' />
            <link href='style.css' rel='stylesheet' type='text/css' />
            <title>Ogłoszenia zarobkowe</title>
            <script type='text/javascript'>

            var _gaq = _gaq || [];
            _gaq.push(['_setAccount', '**************']);
            _gaq.push(['_trackPageview']);

        (function() {
   var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
   ga.src = ('https:' == document.location.protocol ? 'https://ssl'  : 'http://www') + '.google-analytics.com/ga.js';
   var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

</script>
    </head>";
    $link = mysql_connect('localhost', '*************', '********');
    if (!$link) 
    {
            die('Could not connect: ' . mysql_error());
    }
    mysql_select_db('****************');
    
    if(mysql_real_escape_string($_POST['email']==1))
    {
        print "E-mail został zmieniony na:";
        print mysql_real_escape_string($_POST['mail']);
        $zap="UPDATE user SET mail='". mysql_real_escape_string($_POST['mail']) ."'  WHERE login='" .$_SESSION['login']." ';";
        mysql_query($zap);
        
        mail($_POST['mail'], 'Email twojego konta został zmieniony',
        'Twoje konto jest nieaktywne, nie możesz dodawać jeszcze ogłoszeń. 
        Aby móc dodawać ogłoszenia kliknij na ten link: www.ogloszenia-zarobkowe.pl/loguj.php?aktyw='.$akt,  
          'From: Administracja Portalu Ogłoszenia Zarobkowe <administracja@ogloszenia-zarobkowe.xaa.pl>\r\n');
    }
    else
    {
    $zap="SELECT * FROM ".$_SESSION['login'].";";
    $res=mysql_query($zap);

    
    $num = mysql_num_rows($res);

    
    $m=0;
    
    while($txt=mysql_real_escape_string($_POST['tekst'.$m]))
    {    
        $tyt=mysql_real_escape_string($_POST['nazwa'.$m]);
        $kat=mysql_real_escape_string($_POST['kateg'.$m]);
        $m++;

        $zap="UPDATE ". $_SESSION['login'] ." SET tekst='". $txt ."'  WHERE id='" .$m." ';";
        mysql_query($zap);


        $zap="UPDATE ". $_SESSION['login'] ." SET tytul='". $tyt ."'  WHERE id='" .$m." ';";
        mysql_query($zap);


        $zap="UPDATE ". $_SESSION['login'] ." SET kateg='". $kat ."'  WHERE id='" .$m." ';";
        mysql_query($zap);
            

        if (mysql_real_escape_string($_POST['del'.$m])==1)
        {
            $zap="DELETE FROM `".$_SESSION['login']."` WHERE id='".$m."';";
            mysql_query($zap);
        }
        
    }
    
    if ($_POST['oglosz']==1)
    {
        $tyt=mysql_real_escape_string($_POST['nazwad']);
        $kat=mysql_real_escape_string($_POST['kategd']);
        $teks=mysql_real_escape_string($_POST['tekstd']);
        $dzis=date("Y-m-d-G-i-s");
        $wygasnie=date("Y-m-d",(strtotime($dzis) + (60*60*24*$_POST['ile'])));
        $ilo=$num+1;

        $zap="INSERT INTO `".$_SESSION['login']."` (`tekst`,tytul,kateg,id,wygas,data) VALUE ('".$teks."','".$tyt."','".$kat."',".$ilo.",'".$wygasnie."','".$dzisiaj."');";
        mysql_query($zap);
    }
    
    $i=1;
    while($i<=$num)
    {
        $row = mysql_fetch_array($res, MYSQL_BOTH);
        $nr=$row['id'];
        $zap="UPDATE ". $_SESSION['login'] ." SET id='".$i."' WHERE id='".$nr." ';";
        mysql_query($zap);
        $i++;
    }

    
    print "Teksty zostały zmienione
    </br>
    <a href='index.php'>Wróć</a>";
    }
header("Refresh: 2; URL=index.php");
ob_flush();
?>

Odnośnik do komentarza
Udostępnij na innych stronach

Jest dobra bo u mnie wszystko działa.

E:Chyba mam coś w logowaniu spartolone.

E2:

<?php
ob_start();
session_start();


    print "
    <head>
    
            <meta name='keywords' content='' />
            <meta name='description' content='' />
            <meta http-equiv='content-type' content='text/html; charset=utf-8' />
            <meta http-equiv='content-language' content='' />
            <link href='style.css' rel='stylesheet' type='text/css' />
            <script type='text/javascript'>

            var _gaq = _gaq || [];
            _gaq.push(['_setAccount', 'UA-27455153-1']);
            _gaq.push(['_trackPageview']);

        (function() {
   var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
   ga.src = ('https:' == document.location.protocol ? 'https://ssl'  : 'http://www') + '.google-analytics.com/ga.js';
   var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

</script>
    </head>";


$link = mysql_connect('localhost', 'ogloszen_mamut', '7815597');
if (!$link) 
{
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('ogloszen_mamut2');

$log=mysql_real_escape_string($_POST['login']);
$has=mysql_real_escape_string($_POST['haslo']);
$ip=$_SERVER['REMOTE_ADDR'];


$zap="SELECT * FROM user WHERE login='".$log."';";
$res=mysql_query($zap);
$row = mysql_fetch_array($res, MYSQL_BOTH);

if ($_POST['aktyw']==0)
{
    if ($row['haslo']==$has and $has!='')
    {
        print "<center><img src='images/logow.jpg'/></center>";

        $_SESSION['login']=$log;
    }
    else
    {
        print "<center><img src='images/log.jpg'/></center>";
    }
}
else
{
    if ($row['haslo']==$has)
    {
        if ($row['aktyw']==$_POST['aktyw'])
            {
            print "Konto zostało aktywowane";
            $zap="UPDATE user SET aktyw='1' WHERE login='".$log."';";
            $res=mysql_query($zap);
            }
        else
        {
            if ($_POST['aktyw']==1)
                print "Konto już było aktywowane";
            else
                print "Konto nie zostało aktywowane";
        }
        
    }
    else
        print "Zły login lub hasło";
}
header("Refresh: 2; URL=index.php");
ob_flush();
?>

Czemu ten kod ignoruje wielkość znaków? Ale tylko w loginie.

Odnośnik do komentarza
Udostępnij na innych stronach

Zamiast przy haśle robić mysql_escape_string po prostu shashuj je md5 lub sha1 i porównaj. Lepsze zabezpieczenie i można używać wszystkich znaków.

 

EDIT:

Co do loginu zrób filtr który akceptuje duże i małe litery,liczby i opcjonalnie podkreślenia (_)

Odnośnik do komentarza
Udostępnij na innych stronach

W loginie też można zrobić atak sql injection. Jak go przerobisz przez mysql_real_escape_string i go zaakceptujesz to Ci nikt się nie będzie logował ze slashami. Możesz zrobić np. tak:

$login=$_POST['login'];

if ( $login == mysql_real_escape_string($login) )
{
  // nic sie nie zmieniło więc nie ma próby ataku
}
else
{
   //login ma niedozwolone znaki lub atak
}

 

Chyba powinno działać, choć nie jestem pewien. Musiałbym odkopać source mojego systemu to bym dał ci parę patentów na zabezpieczenia.

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki, wprowadzę na pewno. Ale mi teraz nie chodziło o zabezpieczenie kodu przed atakiem, tylko przed podaniem loginu z innymi wilekościami liter niż podczas rejestracji, nie rozumiem skąd się ten błąd wziął, chyba, że to przez mysql_real_escape_string

E:Nic się nie zmieniło.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...