kt1117 Opublikowano 5 Grudnia 2011 Udostępnij Opublikowano 5 Grudnia 2011 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 Więcej opcji udostępniania...
adam014 Opublikowano 5 Grudnia 2011 Udostępnij Opublikowano 5 Grudnia 2011 Wklej kawałek kodu bo ot tak to ci nikt nie powie. Zakładam w ciemno że nie dałeś\źle użyłeś wskaźnika zapytania. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kt1117 Opublikowano 5 Grudnia 2011 Autor Udostępnij Opublikowano 5 Grudnia 2011 <?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 Więcej opcji udostępniania...
adam014 Opublikowano 5 Grudnia 2011 Udostępnij Opublikowano 5 Grudnia 2011 Sprawdź czy na pewno nazwa tabeli jest dobra. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kt1117 Opublikowano 5 Grudnia 2011 Autor Udostępnij Opublikowano 5 Grudnia 2011 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 Więcej opcji udostępniania...
adam014 Opublikowano 5 Grudnia 2011 Udostępnij Opublikowano 5 Grudnia 2011 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 Więcej opcji udostępniania...
kt1117 Opublikowano 5 Grudnia 2011 Autor Udostępnij Opublikowano 5 Grudnia 2011 A dlaczego ten kod pozwala na użycie dowolnej wielkości liter? Filtr mam taki, że nie pozwala jedynie na kropkę na początku. Trzeba go zmienić? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
adam014 Opublikowano 5 Grudnia 2011 Udostępnij Opublikowano 5 Grudnia 2011 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 Więcej opcji udostępniania...
kt1117 Opublikowano 5 Grudnia 2011 Autor Udostępnij Opublikowano 5 Grudnia 2011 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 Więcej opcji udostępniania...
adam014 Opublikowano 5 Grudnia 2011 Udostępnij Opublikowano 5 Grudnia 2011 Wyświetl sobie wynik z mysql_real_escape_string i będziesz wiedział ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kt1117 Opublikowano 5 Grudnia 2011 Autor Udostępnij Opublikowano 5 Grudnia 2011 Stało się tak jak myślałem. Nie ma wpływu na wilekość liter, czyli dalej jestem w pkt. wyjścia. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 5 Grudnia 2011 Administratorzy Udostępnij Opublikowano 5 Grudnia 2011 jest taka funkcja mysql_error :) Wyświetl jej wynik przed tym rowem i będziesz wiedział - na moje, to po prostu błąd SQLa i dla tego nie zwraca zasobów :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę