Wysyłanie danych do MySQL nie działa


(jacko1998) #1

Mam taki oto kod:

if(isset($_POST['regUser'])) {
    $username = $_POST['regUsername'];
    $pass1 = $_POST['regPassword1'];
    $pass2 = $_POST['regPassword2'];
    $email = $_POST['regEmail'];
    $date = date("Y-m-d G:i:s");
    $q = "INSERT INTO users(username, password, email, data, logged, admin) VALUES ('$username', '$pass1', '$email', '$date', '0', '0')";
    mysql_query($q);
    header('Location: index.php');
}

, który w ogóle nie wysyła danych do MySQL'a. Kod jest naprawdę prosty, więc małe prawdopodobieństwo, abym się pomylił, choć i takiej okoliczności nie wykluczam. Połączenie do bazy wykonuje się ok i te pola tabeli users  też dokładnie sprawdziłem. Wie ktoś, gdzie tu jest jakiś błąd ?

 

Pozdrawiam


(kostek135) #2

Daj coś więcej.


(jacko1998) #3

Nie mam nic więcej, format daty poprawiony(czyli w książce źle jest napisane). Nie umiem zautomatyzować.


(kostek135) #4

Nie rozumiem. Czy rozwiązaliśmy twój problem, czy nie?


(jacko1998) #5

Nie. Problem nadal istnieje i w ogóle nie wiem dlaczego. Pierwszy raz się z czymś takim spotykam.


(kostek135) #6

Cóż jeżeli to cały kod (od góry i dołu tylko tagi php), to proponuje


(jacko1998) #7

Chyba tylko pozostało mi przeinstalować serwer lokalny.


(kostek135) #8

To nic nie da. Możesz podać treść błędu (pkt. 3)?


(jacko1998) #9

Już rozwiązałem, problem(chociaż nie wiem nadal dlaczego powstał). Otóż ten kod miałem w innym pliku i w atrybucie action podlinkowałem formularz do tego kodu i powinno działać. Teraz do pliku index.php dodałem plik poprzez require i działa jak należy.


(kostek135) #10

Prawdopodobnie chodzi o błąd w ścieżce relatywnej. Musiałbyś przedstawić strukturę katalogów + atrybuty z tamtego momentu, to może bym odpowiedział.


(jacko1998) #11

To jest struktura:

6613227900_1388839594_thumb.jpg

* Wszystkie foldery są puste, tylko w folderze core są dwa pliki: db_connect.php i registration.php

Atrybuty(nie wiem czy dobrze rozumiem):

HTML

form method="post" action="core/registration.php"
    !-- ZWYKŁE POLA FORMULARZA --
/form

PHP

if(isset($_POST['regUser'])) {
    $username = $_POST['regUsername'];
    $password = $_POST['regPassword'];
    mysql_query("INSERT INTO users(username, password) VALUES ('$username', '$password')");
    header("Location: ../index.php");
}

To pisałem tak szybko, ale błędu tu nie widzę(jeżeli chodzi o ścieżki).


(Jim1961) #12

Jak już się tak bawisz bez PDO polecam takie coś:

$sql = 'INSERT ....';
mysql_query($sql) or die(mysql_error());

przynajmniej będziesz wiedział czy to w zapytaniu masz błąd, czy całkowicie gdzie indziej


(jacko1998) #13

Co to PDO ?


(GioWDS) #14

PHP Data Object. Interface do połączeń z bazami danych.


(jacko1998) #15

A w czym to miało by pomóc ?


(kostek135) #16

W tym problemie ni jak. Ale PDO pozwala bezstresowo zmienić database vendor oraz jest o wiele wydajniejsze (o ile w PHP w ogóle możemy o czymś takim jak wydajność mówić) niż mysql_, z którego w wersji 6 wycofają się w ogóle. W sumie się nie dziwie mysql_ to piękny przykład tego jak nie pisać obsługi połączeń do bazy danych. IMHO jeśli ktoś zrobi tutorial: "How to write database driver" w sekcji bad example można przekleić wszystko z tej biblioteki.


(jacko1998) #17

Tu był pies pogrzebany. Dodałem slesha i śmiga, ale zainteresowałem się tym PDO(z racji tego, że uczę się PHP OOP) i coś znów nie działa. Oto kod:

Klasa

<?php
/*
 *=======================
 * REGISTRATION CLASS !
 * ======================
 */
include_once '/../core/registration.php';
include_once '/../core/db_connect.php';

class registration {

    private $db;
    
    function __construct() { /* Połączenie z bazą */
        $this->db = new db_connect();
        $this->db = $this->db->db_connect();  
    } /* Koniec połączenia */
    
    function registration($username, $password1, $password2, $email, $date) {
        if(!empty($username) && !empty($password1) && !empty($password2) && !empty($email)) {
            
            $q = $this->db->prepare("INSERT INTO users(username, password, email, date, logged, admin) VALUES (?, ?, ?, ?, ?, ?)");
            $q->bindParam(1, $username);
            $q->bindParam(2, $password1);
            $q->bindParam(3, $email);
            $q->bindParam(4, $date);
            $q->bindParam(5, '0');
            $q->bindParam(6, '0');
            $q->execute();
            
        }
    }

}
?>

Kod wywoływany po kliknięciu "zarejestruj":

<?php
/*
 *======================
 * REGISTRATION CORE !
 * =====================
 */
include_once '/../classes/registration.php';

if(isset($_POST['regUser'])) {
    $username = $_POST['regUsername'];
    $pass1 = $_POST['regPassword1'];
    $pass2 = $_POST['regPassword2'];
    $email = $_POST['regEmail'];
    $date = date("Y-m-d H:i:s");
    
    $obj = new registration();
    $obj->registration($username, $password1, $password2, $email, $date);
}
?>

i połączenie(tak dla pewności):

<?php
class db_connect {

    function db_connect() {
        return new PDO("mysql:host=127.0.0.1; dbname=oop", "root", "");
    }

}
?>

No i to w ogóle nie działa, ale to może spowodowane jakimś błędem, ponieważ teraz to eksperymentuje. Tak poza tym to nic w przeglądarce nie wyświetla tzn. żadnych błędów.


(kostek135) #18

Bez jakiś konkretnych błędów trudno coś powiedzieć. Jedyne co widzę, to: