• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

"Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in" Nadpisanie?

Object Storage Arubacloud
0 głosów
991 wizyt
pytanie zadane 24 maja 2015 w PHP przez smarek Nowicjusz (190 p.)
edycja 24 maja 2015 przez smarek

Witam serdecznie!

Występuję u mnei taki błąd, czy ktoś wie jak go wyeliminować? I co dokładnie oznacza.

Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in 

 

W internecie było coś napsiane o nadpisywaniu zmiennych, ale pozmienialem i błąd nadal występuje.

@edit Podrzucam kod, postaram się go skrócić do wystarczającego minimum :P 

To może od początku, przy rejestracji użytkownika, powinna się tworzyć baza danych jego firmy i się tworzyła, jednak teraz już się nie tworzy. Zmiana nastąpiła jak zacząłem zmieniać inne podstrony związane.

Może pierwsze pytanie, to czy zapytanie sql CREATE jest dobre: 

<?php

include '/strony/configure.php';
@db_connect();
if(!$_SESSION['logged'] ) {
echo<<<END
  
<form method="post" action="index.php?page=rejestracja">
    <center>
    <fieldset class="ramka2">
      <legend><h2>Rejestracja pracowników</h2></legend>
        <p><center>
            <z>Login:<z><br>
            <input  class="ramkamała" type="text" value="" name="name">
        </p>
        <p>
            <z>Hasło:<z>
            <input class="ramkamała" type="password" value="" name="password">
        </p>
        <p>
            <z>Powtórz hasło:<z>
            <input class="ramkamała" type="password" value="" name="password2">
        </p>
        <p>
            <z>E-mail:<z>
            <input class="ramkamała" type="text" value="" name="email">
            <z>Firma:<z>
            <input class="ramkamała" type="text" value="" name="firma">
        </p>
    </fieldset >
        <p>
            <input type="submit" value="Zarejestruj" >
        </p>
        
    </form>
END;
    // jeśli zostanie naciśnięty przycisk "Zarejestruj"
    if(isset($_POST['name'])) {
        // filtrujemy dane
        $_POST['name'] = clear($_POST['name']);
        $_POST['password'] = clear($_POST['password']);
        $_POST['password2'] = clear($_POST['password2']);
        $_POST['email'] = clear($_POST['email']);
        $_POST['firma'] = clear($_POST['firma']);
        $firma = $_POST['firma'];
 
        // sprawdzamy czy wszystkie pola zostały wypełnione
        if(empty($_POST['name']) || empty($_POST['password']) || empty($_POST['password2']) || empty($_POST['email']) || empty($_POST['firma'])) {
            echo '<err>Musisz wypełnić wszystkie pola.</err>';
        // sprawdzamy czy podane dwa hasła są takie same
        } elseif($_POST['password'] != $_POST['password2']) {
            echo '<b><p style="color:red;">Podane hasła różnią się od siebie.</err>';
        // sprawdzamy poprawność emaila
        } elseif(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) {
            echo '<err>Podany email jest nieprawidłowy.</err>';
        } else {
            // sprawdzamy czy są jacyś uzytkownicy z takim loginem lub adresem email
            $result = mysql_query("SELECT Count(user_id) FROM `users` WHERE `user_name` = '{$_POST['name']}' OR `user_email` = '{$_POST['email']}' OR `user_from` = '{$_POST['firma']}'");
            $row = mysql_fetch_row($result);
            if($row[0] > 0) {
                echo '<err>Już istnieje użytkownik z takim loginem, adresem e-mail lub pochodzi z tej samej firmy.</err>';
            } else {
                // jeśli nie istnieje to kodujemy haslo...
                $_POST['password'] = codepass($_POST['password']);
                // i wykonujemy zapytanie na dodanie usera
                mysql_query("INSERT INTO `users` (`user_name`, `user_password`, `user_email`, `user_regdate`, `user_from`) VALUES ('{$_POST['name']}', '{$_POST['password']}', '{$_POST['email']}', '".time()."', '{$_POST['firma']}')");
                echo '<z>Zostałeś poprawnie zarejestrowany! Możesz się teraz <a href="index.php?page=logowanie">zalogować</a>.</z>';
                //tworzenie tabeli firmy
                $result_mc = mysql_query("CREATE TABLE `$firma` (
                    `id_thing` int NOT NULL auto_increment,
                    `name_thing` varchar(255),
                    `thing_stan` boolean,
                    `desc_thing` text,
                    `amount_thing` int,
                    PRIMARY KEY  (`id_thing`)
                )" or die("BŁĄD: nie można utworzyć tabeli"));
                
            }
        }
    }
} else { 
} 
db_close();
?>

 

Jeśli chodzi orejestrację, to nie wywala tutaj żadnego błędu.

Bład wywala dopiero dla nowo zarejestrowanego użytkownika, który jeszcze nie ma rekordów wpisanych w baze(dla użytkownika zarejestrowanego i mającego już jakieś rekordy jest ok), no i w sumie baza dancyh się nie tworzy(w phpmyadmin jej nie ma).  Błędy wywala przy podstronie gdzie się wyświetlają wyniki pobierania z bazy danych.
 

 

 

1 odpowiedź

+2 głosów
odpowiedź 24 maja 2015 przez Comandeer Guru (600,730 p.)

Dobry zwyczaj: do każdego błedu podawaj kod, który go wywołuje

Dobry zwyczaj 2: używaj mysql_error

Dobry zwyczaj 3: poczytaj o PDO i się na nie przerzuć ;)

 

Tak na oko to zapytanie się nie wykonuje, bo rzuca błąd. Jaki, to powie Ci mysql_error

komentarz 24 maja 2015 przez smarek Nowicjusz (190 p.)

Dziękuję za wskazówki, następnym razem się do nich zastosuje ;)

Kod do błedu(tutaj tylko wyświetlam wyniki, w drugiej podstronie nastepuje edycja, ale tu i tam wysteuje ten sam błąd): 

<?php
include 'configure.php';
db_connect();//połączenie z bazą danych

if($_SESSION['logged']) { //  zalogowany
    echo '<h3>Witamy serdecznie '.$_SESSION['user_name'].' z '.$_SESSION['firma'].'!</h3>';
    echo "<br/><br/>";
    
}else{ // niezalogowany
   
    echo '<h3>Witamy serdecznie Nieznajomy!</h3> <br/><br/>';
}    
    $firma1 = $_SESSION['firma'];

    echo '<h2>Lista :</h2><br/>
        <center>
        <table class="ramka" >
                <tr >
                    <th class="ramka">Id</th>
                    <th class="ramka">Nazwa</th>
                    <th class="ramka">Stan(0/1)</th>
                    <th class="ramka">Opis</th>
                    <th class="ramka">Ilość</th>
                </tr>';

            $result = mysql_query("SELECT Count(id_thing) FROM `$firma1`");
            $row = mysql_fetch_row($result);
            $count_thing = $row[0];
            // ustawiamy ile ma być wyników na 1 strone
            $per_page = 10;
            // obliczamy ilość stron
            $pages = ceil($count_thing / $per_page);
            // jeśli została podana to filtrujemy ją i rzutujemy na int
            $current_page = !isset($_GET['page']) ? 1 : (int)clear($_GET['page']);

            if($current_page < 1 || $current_page > $pages) {
                $current_page = 1;
            }

            // jeśli jest chociaż jedna rzecz
            if($count_thing > 0) {
                $result = mysql_query("SELECT * FROM `$firma1` ORDER BY `id_thing` ASC LIMIT ".($per_page*($current_page-1)).", ".$per_page);
                while($row = mysql_fetch_assoc($result)) {
                    echo '<tr>
                       <th class="ramka1">'.$row['id_thing'].'</td><th class="ramka1">'.$row['name_thing'].'</a></td>
                       <th class="ramka1">'.$row['thing_stan'].'</td><th class="ramka1">'.$row['desc_thing'].'</td>
                       <th class="ramka1">'.$row['amount_thing'].'</td>
                    </tr>';
                }
            } else {
                // jeśli nie ma w ogóle to wyświetlamy komunikat
                echo '<tr>
                    <td colspan="5" style="text-align:center">Lista inwentaryzacyjna jest pusta.</td>
                </tr>';
            }
        echo '</table>';
        
        

    if($pages > 0) { 
        echo '<p>';
        if($pages < 11) {
            for($i = 1; $i <= $pages; $i++) {
                if($i == $current_page) {
                    echo '<c>['.$current_page.']</c> ';
                } else {
                    echo '<p href="userlist.php?page='.$i.'">['.$i.']</p> ';
                }
            }
        } elseif($current_page > 10) {
            echo '<p href="magazyn.php?page=1">[1]</p> ';
            echo '<p href="magazyn.php?page=2">[2]</p> ';
            echo '[...] ';
            for($i = ($current_page-3); $i <= $current_page; $i++) {
                if($i == $current_page) {
                    echo '<c>['.$current_page.']</c> ';
                } else {
                    echo '<p href="magazyn.php?page='.$i.'">['.$i.']</p> ';
                }
            }
            for($i = ($current_page+1); $i <= ($current_page+3); $i++) {
                if($i > ($pages)) break;
                if($i == $current_page) {
                    echo '<b>['.$current_page.']</b> ';
                } else {
                    echo '<p href="magazyn.php?page='.$i.'">['.$i.']</p> ';
                }
            }
            if($current_page < ($pages-4)) {
                echo '[...] ';
                echo '<p href="magazyn.php?page='.($pages-1).'">['.($pages-1).']</p> ';
                echo '<p href="magazyn.php?page='.$pages.'">['.$pages.']</p> ';
            } elseif($current_page == ($pages-4)) {
                echo '[...] ';
                echo '<p href="magazyn.php?page='.$pages.'">['.$pages.']</p> ';
            }
        } else {
            for($i = 1; $i <= 11; $i++) {
                if($i == $current_page) {
                    if($i > ($pages)) break;
                    echo '<b>['.$current_page.']</b> ';
                } else {
                    echo '<p href="magazyn.php?page='.$i.'">['.$i.']</p> ';
                }
            }
            if($pages > 12) {
                echo '[...] ';
                echo '<p href="magazyn.php?page='.($pages-1).'">['.($pages-1).']</p> ';
                echo '<p href="magazyn.php?page='.$pages.'">['.$pages.']</p> ';
            } elseif($pages == 12) {
                echo '[...] ';
                echo '<p href="magazyn.php?page=12">[12]</p> ';
            }
        }
        echo '</p>';
    }
 
db_close();

?>

 

komentarz 24 maja 2015 przez Comandeer Guru (600,730 p.)

Błąd ten sam, ale pewnie zapytania inne - a o to tu głównie chodzi!

Zrób sobie 

$result = mysql_query("SELECT Count(user_id) FROM `users` WHERE `user_name` = '{$_POST['name']}' OR `user_email` = '{$_POST['email']}' OR `user_from` = '{$_POST['firma']}'") or die(mysql_error());

Wówczas otrzymamy konkretny komunikat błędu odnośnie zapytania.

Od razu radzę poczytać o SQL Injection, bo Twój kod aż się prosi o wykorzystanie tej podatności

komentarz 24 maja 2015 przez smarek Nowicjusz (190 p.)
edycja 24 maja 2015 przez smarek

@edit

Ok, była literówka były nawiasy ' ' zamiast ``, dziękuję za pomoc :)

 

Mam do Ciebie jescze jedno pytanie, zauważyłem, że przy usunięciu rekordu ze środku przedziału( czyli mam 4 rekordy, a usuwam 3) to przy funkcji dodawanie nie odświeża mi się id_thing, i mogę dodać rekord ale z id_thing=5. Masz jakiś pomysł ? :P 
W sumie móglbym wyłączyć blokowanie pola i ręcznie wpisać id_thing, ale wolalbym, żeby to pole automatycznie się wypełniało. 

aktualizacja.php

if($count_thing > 0) {
                $result = mysql_query("SELECT * FROM `$firma2` ORDER BY `id_thing` ASC LIMIT ".($per_page*($current_page-1)).", ".$per_page) or die(mysql_error());
                while($row = mysql_fetch_assoc($result)) {
                    
                echo '<tr >
                        <td>'.$row['id_thing'].'</td><td>'.$row['name_thing'].'</td>
                        <td>'.$row['thing_stan'].'</td><td>'.$row['desc_thing'].'</td>
                        <td>'.$row['amount_thing'].'</td>';                     
                        echo  '<td ><a href="index.php?page=usun&id_thing=';echo $row['id_thing'];echo '">Usuń</a></td>          
                               <td ><a href="index.php?page=edycja&id_thing=';echo $row['id_thing'];echo '">Edytuj</a></td>';                                 
                     '</tr>';    
                        
                            $_SESSION['id_max'] = (int)$row['id_thing'];//tutaj przypisuje id             
                }
                


A w pliku dodaj.php, następuje odczytanie zmiennej i przypisanie. 

 

Masz pomysł? :) 

 

komentarz 24 maja 2015 przez Comandeer Guru (600,730 p.)
No to już wiesz jaki błąd należy naprawić ;)
komentarz 24 maja 2015 przez smarek Nowicjusz (190 p.)

Mam jescze jedno pytanie, zauważyłem, że przy usunięciu rekordu ze środku przedziału( czyli mam 4 rekordy, a usuwam 3) to przy funkcji dodawanie nie odświeża mi się id_thing, i mogę dodać rekord ale z id_thing=5. Masz ktoś pomysł ? :P  
W sumie móglbym wyłączyć blokowanie pola i ręcznie wpisać id_thing, ale wolalbym, żeby to pole automatycznie się wypełniało. 

aktualizacja.php

if($count_thing > 0) {

                $result = mysql_query("SELECT * FROM `$firma2` ORDER BY `id_thing` ASC LIMIT ".($per_page*($current_page-1)).", ".$per_page) or die(mysql_error());

                while($row = mysql_fetch_assoc($result)) {

                     

                echo '<tr >

                        <td>'.$row['id_thing'].'</td><td>'.$row['name_thing'].'</td>

                        <td>'.$row['thing_stan'].'</td><td>'.$row['desc_thing'].'</td>

                        <td>'.$row['amount_thing'].'</td>';                    

                        echo  '<td ><a href="index.php?page=usun&id_thing=';echo $row['id_thing'];echo '">Usuń</a></td>         

                               <td ><a href="index.php?page=edycja&id_thing=';echo $row['id_thing'];echo '">Edytuj</a></td>';                                

                     '</tr>';   

                         

                            $_SESSION['id_max'] = (int)$row['id_thing'];//tutaj przypisuje id            

                }

 


A w pliku dodaj.php, następuje odczytanie zmiennej i przypisanie. 

 

Masz pomysł? :) 

komentarz 24 maja 2015 przez Comandeer Guru (600,730 p.)
W takim razie lepiej zostawić tutaj 5 i tyle

Podobne pytania

–4 głosów
2 odpowiedzi 503 wizyt
0 głosów
0 odpowiedzi 1,009 wizyt
0 głosów
1 odpowiedź 459 wizyt

92,547 zapytań

141,387 odpowiedzi

319,504 komentarzy

61,931 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...