| 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: 14 let
|
|||
0