Problem przy połączeniu Z PHP do MySQL

Problemy związane ze stronami PHP

Problem przy połączeniu Z PHP do MySQL

Postprzez bono21 » Pt maja 11, 12 14:01

W kodzie:
Kod: Zaznacz cały
<?php

/**
 * @author bono
 * @copyright 2012
 */
include ('../scieżka/[b]manage.php[/b]');[b]//lub tu[/b]
baza();

 // sprawdza wymagane pola
 if ((!$_POST["autor_tematu"]) || (!$_POST["nazwa_tematu"]) || (!$_POST["tresc_postu"])) {
    header("Location: newtopic.html");
    exit();
 }
    //tworzy zapytanie
    $dodaj_temat_sql = "INSERT INTO forum_tematy (nazwa_tematu, data_utworzenia_tematu, autor_tematu) VALUES ('".$_POST["nazwa_tematu"]."',
    now(), '".$_POST["autor_tematu"]."')";
    $dodaj_temat_rez = mysqli_query($mysqli, $dodaj_temat_sql)
        or die(mysqli_error($mysqli));
   
    //pobieranie id ostatniego zapytania
    $id_temayu = mysqli_insert_id($mysqli);
   
    //tworzy i wysyła drugie zapytanie
    $dodaj_post_sql = "INSERT INTO forum_posty (id_tematu,tresc_postu,data_utworzenia_postu} VALUE ('".$id_tematu."',
    '".$_POST["tresc_postu"]."', now(), '".$_POST["autor_tematu"]."')";
    $dodaj_post_rez = mysqli_query($mysqli, $dodaj_post_sql)
    or die(mysqli_error($mysqli));
   
    //zamyka baze
    mysqli_close($mysqli);
    //tworzy komunikat dla uzydkownika
    $wyswietl_blok = "<p>Temat <strong>".$_POST["nazwa_tematu"]."</strong> został utworzony.</p>";
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Dodano nowy temat</title>
<meta http-equiv="content-type" content="text/html; cherset=utf-8">
</head>
<body>
<div id="Head">
 <div class="Transparent"><img src="../image/głowa.png" alt="Muzyka" width="1215" height="342" /></div>
    <h1>Dodano nowy Temat</h1>
    </div>
<div id="ciało">
    <div class="temat">
    <?php echo $wyswietl_blok; ?>
    </div>
</div>
</body>

</html>

Jest albo błąd którego nie wyłapuję albo naprawdę nie wiem o co biega. Początki zawsze są trudne!
kod manage.php
Kod: Zaznacz cały
?php

/**
 * @author bono
 * @copyright 2012
 */
 function baza() {
 
    $mysqli = @mysquli_connect('mysql3.ugu.pl', 'db603762', 'jakieś tam hasło', 'db603762');
   
    if (mysqli_connect_errno()) {
        printf("Nie można połączyć: %s\n", mysqli_connect_error());
        exit();
    }

}
?>

Problem polega na tym że: wpisuję w formularz test, test, po przeładowaniu jest pusta strona zamiast treści!. W bazie danych też nie ma nowych rekordów. Więc manage albo
bono21
 
Posty: 4
Dołączył(a): Pt maja 11, 12 13:53

Re: Problem przy połączeniu Z PHP do MySQL

Postprzez parox » Pt maja 11, 12 18:54

Pozwól że zwrócę na coś uwagę.

Kod: Zaznacz cały
include ('../scieżka/[b]manage.php[/b]');[b]//lub tu[/b]


W pierwszym pliku, podajże 3 linijka.
Po pierwsze: usuń oraz ... Jeśli masz tak w prawdziwym pliku, nic dziwnego że nie działa.
Po drugie: czy plik manage.php znajduje się w folderze "scieżka"? Upewnij się dokładnie gdzie leży i naprostuj linijkę.
Po trzecie: Sprawdź czy aby na pewno w bazie danych istnieje tabela "forum_tematy". Co prawda gdyby nie istniała, wywalał by błąd.
Po czwarte: Kod ogółem wygląda na dość stary... Znaczy styl pisania ogólnie taki mało spotykany. Może powinieneś trochę udoskonalić swą wiedzę?

bono21 napisał(a):Początki zawsze są trudne!


W sumie nie zgodzę się... Ale cię rozumiem. Mogę Ci polecić bardzo dobrą książkę/podręcznik który przeniesie Cię do świata PHP/MySQL. Jest w niej bardzo dużo przykładów i opisów, które ułatwią Ci zrozumienie pisania kodu.

"PHP6 i MySQL 5. Dynamiczne strony WWW. Szybki start" - Larry Ullman
Kod: Zaznacz cały
http://helion.pl/ksiazki/php6-i-mysql-5-dynamiczne-strony-www-szybki-start-larry-ullman,ph6ms5.htm
Avatar użytkownika
parox
 
Posty: 598
Dołączył(a): Śr maja 23, 07 23:17
Lokalizacja: Prudhoe

Re: Problem przy połączeniu Z PHP do MySQL

Postprzez bono21 » Pt maja 11, 12 22:10

Znaczników pogrubienia nie ma w prawidłowym kodzie, oraz "ścieżka" to po prostu skrót bo prawidłowego miejsca nie chciałem podać.
B[W KLAMRACH KWADRATOWYCH] miały zwrócić uwagę na miejsca prze ze mnie podejrzane o jakiś błąd.
Aktualnie czytam "PHP, MySQL, APACHE Julie C. Meloni(2008)" oraz "PHP i MySQL tworzenie stron www"(wyd.2 2003r.?), masz rację, stary kod ale do nowych kodów potrzeba ogólnego zrozumienia PHP potem dopiero poszukam coś nowego. Uczę się na starych KSĘGACH PHP.
Nie stać mnie na nowe książki a w bibliotece mieli tylko tę. Uczę się z własnej woli. Mój upór nie zna granic. Proszę cię o sprawdzenie tego kodu, jakiś błąd jest ale jaki? Tabele w MySQL są, nazwy się zgadzają, np: ["autor_tematu"] oraz reszta poprawnie, ale specjalne błędy w np. hasło dałem nie poprawne to tak samo się zachowuje.

ps.Zaglądam tutaj! http://webmaster.helion.pl/
bono21
 
Posty: 4
Dołączył(a): Pt maja 11, 12 13:53

Re: Problem przy połączeniu Z PHP do MySQL

Postprzez parox » Pt maja 11, 12 23:00

Ok, co mogę zaproponować, to zrezygnowanie z "funkcji" podczas łączenia się z bazą, albo przynajmniej je zmodyfikuj. Bo:

Prawda, funkcja jest, ale nie ma żadnego "return" co znaczy iż nic się nie dzieje. Poza tym, chcesz używać zmiennej $mysqli w dalszym kodzie. Ta zmienna została zadeklarowana w funkcji, zatem jest na jej wyłączność.
Plik manage.php bez funkcji, mógłby wyglądać tak:

Kod: Zaznacz cały
<?php

/**
 * @author bono
 * @copyright 2012
 */
 
    $mysqli = @mysquli_connect('mysql3.ugu.pl', 'db603762', 'jakieś tam hasło', 'db603762');
   
    if (!$mysqli) {
        printf("Nie można połączyć: %s\n", mysqli_connect_error());
        exit();
    }

?>


Z funkcją zaś coś bardziej skupionego:

Kod: Zaznacz cały
<?php

function baza() {
     $mysqli= @mysqli_connect ('mysql3.ugu.pl', 'db603762', 'jakieś tam hasło', 'db603762')
OR die ('Nie można połączyć: <br> ' . mysqli_connect_error() );

return $mysqli;
}

?>


I w dalszej części kodu nie musisz wywoływać funkcji na samym początku ale lekko później. Np.

Kod: Zaznacz cały
$dodaj_temat_rez = mysqli_query(baza(), $dodaj_temat_sql);


To na tyle z pliku manage.php

Dalej, w pliku samego skryptu dodawania postów/tematów, zamiast używać linijek:
Kod: Zaznacz cały
or die(mysqli_error($mysqli));

Lepiej użyć if'ów.
Kod: Zaznacz cały
if (mysqli_affected_rows($mysqli/baza()) != 1) {
     // Jeśli $dodaj_temat_rez nie powiodła się
}


Możesz w ten sposób np. zbierać błędy do array'a, by potem je wszystkie wyświetlić. Możesz też po prostu wyświetlić błąd, stopując działanie dalszego skryptu.

Myślę że powinieneś dać radę. Poruszę jeszcze kwestię bezpieczeństwa...

Kod: Zaznacz cały
INSERT INTO forum_tematy (nazwa_tematu, data_utworzenia_tematu, autor_tematu) VALUES ('".$_POST["nazwa_tematu"]."',
    now(), '".$_POST["autor_tematu"]."')


Opiszę to na chłopski rozum. Powiedz, co by było, gdybym jako autora albo w nazwie tematu, wpisał coś w tym stylu:

Kod: Zaznacz cały
zakończ popszednie zapytanie, wybierz wszystko z tabeli uzytkownicy


Oczywiście, jest to przykład, i co prawda nie zgodny z prawdą i realiami. Aczkolwiek w bardzo podobny sposób, można się łatwo dobrać do kodu... Polecam jednak zabezpieczanie swoich formularzy czy zmiennych, na które wpływ ma użytkownik. Mianowice np.

Kod: Zaznacz cały
$temat = mysqli_real_escape_string($mysqli, trim($_POST['nazwa_tematu']));


No więc w zapytaniu, zamiast użyć czystego, podanego przez użytkownika ciągu znaków, podaj zmienną $temat, która zawiera czystą zawartość podaną przez użytkownika, ale sformatowała ów ciąg, w sposoby możliwie zabezpieczające zapytanie.

Mam nadzieję iż coś zrozumiesz z tego całego bałaganu...

Pozdrawiam i życzę Powodzenia!
Avatar użytkownika
parox
 
Posty: 598
Dołączył(a): Śr maja 23, 07 23:17
Lokalizacja: Prudhoe


Powrót do PHP

Copyright © 2007-2011 ugu.pl
Wszelkie prawa zastrzeżone.
Polityka prywatności

cron