Wysyłanie danych do MySQL nie działa

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

Daj coś więcej.

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

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

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

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

Chyba tylko pozostało mi przeinstalować serwer lokalny.

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

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.

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

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).

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

Co to PDO ?

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

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

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.

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.

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