Autor Zpráva
Martin02
Profil
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
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="">&nbsp;<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">&nbsp;<input style="padding: 2px;" type="submit" value="Login" name="submit_login">&nbsp; 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
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
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
Martin02:

Spíš bych ověřoval, jestli byl formulář odeslán, tj.

if(isset($_POST['username'])) {
..

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: