Autor | Zpráva | ||
---|---|---|---|
Martin02 Profil |
#1 · Zasláno: 5. 5. 2012, 14:57:05
Ahoj,
mám script, který si má vzít data z formuláře a odeslat je do db, ovšem, nedaří se mi to. <?php require 'mysql.php'; // určení proměnných do db $text = $_POST['text']; $user = $_SESSION['username']; $date_time = StrFTime("%H:%M:%S %d.%m.%Y", Time()); // zápis textu do db $query = "INSERT INTO chat (user, text, date_time, delete) VALUES ('$user', '$text', '$date_time', 0)"; mysql_query($query) or die(mysql_error()); ?> A pak bych se chtěl ještě na něco zeptat. Mám tu stránku, když na ní někdo vleze, má tam formulář na jméno. Když ho vyplní, buďto se ten uživatel v databázi vytvoří, nebo se jen do $_SESSION['username'] vloží to jméno (to se tam vloží, i když se musí registrovat do db). Ovšem, když třeba v tom scriptu, co píšu nahoře dávám do databáze to jméno z $_SESSION['username'], tak se tam nevloží. Když jsem testoval, co v tý proměnný je, tak je prázdná. Nevíte někdo proč? Děkuji |
||
Sir Tom Profil |
#2 · Zasláno: 5. 5. 2012, 15:03:09
Martin02:
Také ahoj, „ovšem, nedaří se mi to“ vypiš si proměnnou $query (echo $query). Možná, že tam uvidíš, kde je problém. Pokud to nepomůže, tak dotaz použij v phpMyAdmin - ten by ti měl zahlásit, kde je chyba. Odpověď na druhou otázku: Použil jsi session_start();? Sám píšeš, že $_SESSION["username"] je prázdné a tím pádem, že ji $user je prázdné. V tomto případě sql dotaz není úplný -> možná příčina problému č. 1. |
||
Martin02 Profil |
Tak první problém jsem vyřešil. Zkoušel jsem to přes dotazy v phpmyadmin a chyba byla v apostrofu :) Když jsem dal ('user', 'text', 'date_time', 'delete'), nefungovalo to, ale když jsem tam dal ty apostrofy, které mi vyhodilo phpmyadmin - (`user`, `text`, `date_time`, `delete`), tak to funguje.
Problém se session ale pořád trvá. I když jsem do každého souboru narval session_start(), tak to nejde. Kdyžtak, dám sem celý kód všech stránek: index.php: <?php session_start(); include 'mysql.php'; // přihlášení do MySQL + session_start() ?> /* <html><head>...... pro řešení tohoto problému nepodstatné */ <?php if($_SESSION['login'] == 1) { echo ' <form action="send.php" method="post"> <input style="height: 20px;" type="text" size="100" name="text" value=""> <input style="padding: 2px;" type="submit" value="Odeslat" name="submit_send">'; } else { echo ' <form action="#" method="post"> Přihlaste se prosím: <input type="text" name="username"> <input style="padding: 2px;" type="submit" value="Login" name="submit_login"> Maximální počet znaků je 20'; } ?> </form> <?php include 'shoutbox.php'; // zobrazování shoutů - ještě nedodělaný soubor --> nic v něm není ?> <?php include 'form.php'; // ověření uživatele if(isset($_SESSION['error_send'])) { echo $_SESSION['error_send']; $_SESSION['error_send'] = ""; } ?> mysql.php: <?php mysql_connect('127.0.0.1', 'root', '') or die('Nemohu se připojit k MySQL!'); mysql_select_db('shoutbox') or die('Nemohu nalézt databázi!'); ?> form.php: <?php session_start(); // určení proměnných z formuláře $_SESSION['username'] = $_POST['username']; $username = $_POST['username']; // určení datumu do databáze $datetime = StrFTime("%Y-%m-%d %H:%M:%S", Time()); // kód pro přihlášení se if(isset($_POST['submit_login'])) { // ověření uživatele $query = "SELECT * FROM users WHERE username = '$username'"; $result = mysql_query($query); $count = mysql_num_rows($result); // pokud uživatel neexistuje, vytvoř ho a přihlaš jej if($count == 0) { $query = "INSERT INTO users (username, moderator, ban, review) VALUES ('$username', 1, 0, 0)"; if(mysql_query($query)) { $_SESSION['login'] = 1; header('Location: index.php'); } } // pokud uživatel existuje, přihlaš jej if($count == 1) { $_SESSION['login'] = 1; header('Location: index.php'); } } // vypsání 'logout' echo ($_SESSION['login'] == 1) ? '<a style="padding: 5px;" href="./logout.php">Logout</a>' : ""; ?> send.php: <?php session_start(); include 'mysql.php'; // určení proměnných do db $text = $_POST['text']; $user = $_SESSION['username']; $date_time = StrFTime("%H:%M:%S %d.%m.%Y", Time()); // zápis shoutu do db $query = "INSERT INTO chat (`ID`, `user`, `text`, `date_time`, `delete`) VALUES ('', '$user', '$text', '$date_time', '0')"; mysql_query($query); ?> |
||
mimochodec Profil |
#4 · Zasláno: 5. 5. 2012, 16:14:15
Zdá se, že ve form.php vždycky $_SESSION['username'] naplníš hodnotou z $_POST['username'], ať se děje, co se děje. Myslím tím i když formulář nebyl zrovna odeslán.
$_SESSION['username'] = $_POST['username']; |
||
Martin02 Profil |
#5 · Zasláno: 5. 5. 2012, 16:19:50 · Upravil/a: Martin02
Jj, tím to nejspíš bude. Nevíte, jak mám tedy udělat, aby se jen jednou naplnila a pak, když bude existovat, tak už ne?
Problém vyřešen. Všem díky moc. |
||
mimochodec Profil |
#6 · Zasláno: 5. 5. 2012, 16:29:49
Martin02:
Spíš bych ověřoval, jestli byl formulář odeslán, tj. if(isset($_POST['username'])) { .. |
||
Časová prodleva: 11 let
|
0