webzdarma mysql ukládá jen čísla

Dobrý den,
potřebuji pomoc.
Databáze je v pořádku vytvořená a načítání a ukládání jde dobře.
Komunikace taky.

Ale když na svých stránkách dám registrovat a vyplním údaje tak registrace proběhne v pořádku. Jenže při hlášení nejde.

Když se přihlásím do MYSQL tak v tabulce místo textu jsou čísla.

Vzor:

id_uzivatele mediumint(8) UNSIGNED Ano NULL auto_increment
uzivatelske_jmeno varchar(20) latin2_czech_cs Ano NULL
jmeno varchar(20) latin2_czech_cs Ano NULL
primeni varchar(20) latin2_czech_cs Ano NULL
ulice varchar(20) latin2_czech_cs Ano NULL
mesto varchar(20) latin2_czech_cs Ano NULL
psc char(5) latin2_czech_cs Ano NULL
email varchar(40) latin2_czech_cs Ano NULL
pevna_linka char(15) latin2_czech_cs Ano NULL
mobilni char(15) latin2_czech_cs Ano NULL
heslo char(20) latin2_czech_cs Ano NULL
datum_registrace datetime Ano NULL

id_uzivatele uzivatelske_jmeno jmeno primeni ulice mesto psc email pevna_linka mobilni heslo datum_registrace
10 1 1 1 1 1 1 1 1 606717496665bcba 2013-12-30 19:11:19

místo

id_uzivatele OK
uzivatelske_jmeno VirusPK
jmeno Petr
primeni Kulczycki
ulice xxxxxx
mesto xxxxxx
psc xxxxxx
email kulczycki.petr@centrum.cz
pevna_linka xxxxxx
mobilni xxxxxx
heslo xxxxxx
datum_registrace OK
Ukládání asi nejde dobře, když tam uložilo něco jiného než mělo.
Chtělo by to pořádně si projít proces ukládání do DB. Především zkontrolovat, jaké hodnoty se při ukládání předávají.
Něco mi říká, že je to tímto - předáváš jiné hodnoty než máš. Respektive se jedná o chybné vytažení hodnoty.
Když svuj odkaz mysql_spoj.php se struktůrou :

<?php # Výpis kódu mysql_spoj.php

DEFINE ('DB_UZIVATEL','xxxx');
DEFINE ('DB_HESLO','xxxxxx');
DEFINE ('DB_HOSTITEL','mysql.webzdarma.cz');
DEFINE ('DB_NAZEVDATABAZE','xxxx');

$dbc = @mysql_connect (DB_HOSTITEL, DB_UZIVATEL, DB_HESLO) or die ('Nemohu se připojit k databazi MySQL: '. mysql_error());
mysql_select_db (DB_NAZEVDATABAZE) or die ('Nelze vybrat databázi: '. mysql_error());

?>

otestuju v PC tak vše jde. nastavení mám na localhost v PC.

Ale na nastavení u serveru wz.cz mi to dělá toto.

<?php # Výpis kódu registruj.php

// Nastavte titul stránky a zahrňte záhlaví HTML.
$titul_stranky = 'Registrace';
include ('sablony/zahlavi.inc');

if (isset($_POST['odeslat'])) { // Zpracovat formulář.

$zprava = NULL; // Nová prázdná proměná.

// Ověřit jméno.
if (strlen($_POST['jmeno']) > 0) {
$jmeno = true;
} else {
$jmeno = false;
echo '<p>Zapoměli jste zadat jméno !</p>';
}

// Ověřit přímení.
if (strlen($_POST['primeni']) > 0) {
$primeni = true;
} else {
$primeni = false;
echo '<p>Zapoměli jste zadat přímení !</p>';
}

// Ověřit adresu elektronické pošty.
if (strlen($_POST['email']) > 0) {
$email = true;
} else {
$email = false;
echo '<p>Zapoměli jste zadat adresu elektronické pošty !</p>';
}

// Ověřit uživatelské jméno.
if (strlen($_POST['uzivatelske_jmeno']) > 0) {
$uzivatelske_jmeno = true;
} else {
$uzivatelske_jmeno = false;
echo '<p>Zapoměli jste zadat uživatelské jméno !</p>';
}

// Ověřit heslo a porovnat je s potvrzením hesla.
if (strlen($_POST['heslo1']) > 0) {
if ($_POST['heslo1'] == $_POST['heslo2']) {
$heslo = true;
} else {
$heslo = false;
echo '<p>Vaše heslo nesouhlasí ! Zadejte je znovu.</p>';
}
} else {
$heslo = false;
echo '<p>Nebylo zadáno heslo !</p>';
}

// Ověřit jméno.
if (strlen($_POST['ulice'])) {
$ulice = true;
}

// Ověřit jméno.
if (strlen($_POST['mesto'])) {
$mesto = true;
}

// Ověřit jméno.
if (strlen($_POST['pevna_linka'])) {
$pevna_linka = true;
}

// Ověřit jméno.
if (strlen($_POST['psc'])) {
$psc = true;
}

// Ověřit jméno.
if (strlen($_POST['mobilni'])) {
$mobilni = true;
}

// Ověřit Pravidla registrace.
if (strlen($_POST['pravidla']) > 0) {
$pravidla = true;
} else {
$pravidla = false;
echo '<p>S Pravidli musíte souhlasit !</p>';
}

if ($jmeno && $primeni && $email && $uzivatelske_jmeno && $heslo && $pravidla) { // Je-li vše vpořádku.

// Registrovat uživatele.
require_once ('mysql_spoj.php'); // Připojit se k databázi.

// Vytvořit dotaz.
$dotaz = "INSERT INTO uzivatele (uzivatelske_jmeno, jmeno, primeni, ulice, mesto, email, pevna_linka, mobilni, psc, heslo, datum_registrace) VALUES ('$uzivatelske_jmeno', '$jmeno', '$primeni', '$ulice', '$mesto', '$email', '$pevna_linka', '$mobilni', '$psc', PASSWORD('$heslo'), NOW())";
$vysledek = @mysql_query ($dotaz); // Spustit dotaz.
if ($vysledek) { // Je-li vše OK.

// Můžete odeslat email.

$zprava = "Děkujeme za registraci na mém webovém portálu !nVaše uživatelské
jméno je '{$_POST['uzivatelske_jmeno']}' a vaše heslo je '{$_POST['heslo1']}'.n
nS pozdravem.nKulczycki Petr";
mail ($_POST['email']. 'Děkujeme za registraci !', $zprava, 'Od : kulczycki.petr@centrum.cz');

echo '<p>Děkuji za registraci.<br/ >Na zadaný e-mail Vám byly odeslány přihlašovací údaje.<br/ >Niní se můžete přihlásit.</p>';
include ('sablony/pata.inc'); // Zahrňte patu.
exit(); // Ukončení skriptu.

} else { // Něco není v pořádku.
$zprava .= '<p>Registrace byla přerušena. Omlouvám se.</p><p>'. mysql_error(). '</p>';
}

mysql_close(); //Ukončení databáze.

} else {
$zprava .= '<p>Zkuste to prosím znovu.</p>';
}

}

if (isset($zprava)) {
echo '<font color="red">'. $zprava. '</font>';
}

// Zobrazit formulář.
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<fieldset><legend>Zadejte příslušné údaje do následujícího formuláře :</legend>

<p><font color="#ccff00"><b >ii</b></font>
<b>Jméno :</b> <input type="text" name="jmeno" size="20" maxlength="40" value="<?php if (isset($_POST['jmeno'])) echo $_POST['jmeno']; ?>" />

<font color="#ccff00"><b >ii</b></font>
<b>Přímení :</b> <input type="text" name="primeni" size="20" maxlength="40" value="<?php if (isset($_POST['primeni'])) echo $_POST['primeni']; ?>" /></p>

<p><font color="#ccff00"><b >ii</b></font>
<b>Adresa el. pošty :</b> <input type="text" name="email" size="40" maxlength="60" value="<?php if (isset($_POST['email'])) echo $_POST['email']; ?>" /></p>

<p><font color="#ccff00"><b >ii</b></font>
<b>Adresa : Ulice :</b> <input type="text" name="ulice" size="20" maxlength="50" value="<?php if (isset($_POST['ulice'])) echo $_POST['ulice']; ?>" />

<font color="#ccff00"><b >iiiii</b></font>
<b>Telefon : Pevná linka :</b> <input type="cislo" name="pevna_linka" size="9" maxlength="15" value="<?php if (isset($_POST['pevna_linka'])) echo $_POST['pevna_linka']; ?>" /></p>

<p><font color="#ccff00"><b >iiAdresaiiii</b></font>
<b>Město :</b> <input type="text" name="mesto" size="20" maxlength="50" value="<?php if (isset($_POST['mesto'])) echo $_POST['mesto']; ?>" />

<font color="#ccff00"><b >iiTelefoniiii</b></font>
<b>Mobilní : </b> <input type="cislo" name="mobilni" size="9" maxlength="15" value="<?php if (isset($_POST['mobilni'])) echo $_POST['mobilni']; ?>" /></p>

<p><font color="#ccff00"><b >iiAdresaiiii</b></font>
<b>PSČ :</b> <input type="cislo" name="psc" size="5" maxlength="10" value="<?php if (isset($_POST['psc'])) echo $_POST['psc']; ?>" /></p>

<p><font color="#ccff00"><b >ii</b></font><b>Přihlašovaci údaje :</b></p>

<p><font color="#ccff00"><b >iiiiiii</b></font>
<b>Uživatelské jméno :</b> <input type="text" name="uzivatelske_jmeno" size="20" maxlength="40" value="<?php if (isset($_POST['uzivatelske_jmeno'])) echo $_POST['uzivatelske_jmeno']; ?>" /></p>

<p><font color="#ccff00"><b >iiiiiii</b></font>
<b>Heslo :</b> <input type="password" name="heslo1" size="20" maxlength="40" /></p>

<p><font color="#ccff00"><b >iiiiiii</b></font>
<b>Potvrďte heslo :</b> <input type="password" name="heslo2" size="20" maxlength="40" /></p>

<p><font color="#ccff00"><b >ii</b></font>
<b>Souhlasím s <a href="pravidla.php">Podmínky registrace</a> .</b> <input type="checkbox" name="pravidla"></p><br/ ></fieldset>
</fieldset>
<div align="center"><input type="submit" name="odeslat" value="Registruj" />
</div></form>
<!-- Konec formuláře -->

<?php
echo '<p><p>Zatím nefunguje správné uložení registračních udajů.</p></p>';

// Konec hlavního podmíněného příkazu SUBMIT.
include ('sablony/pata.inc'); // Zahrňte patu HTML
?>
tak jsem zkusil jiní virtuální web s podobnou verzí jako na webu XAMPP a dělá to to samé tak bych potřeboval pomoc.
No jo no. Měl jsem pravdu. Vkládáš tam úplně jiné hodnoty než máš. Do DB ukládáš booleovské hodnoty místo hodnot z formuláře.

if (strlen($_POST['jmeno']) > 0) {
$jmeno = true;
} else {
$jmeno = false;
echo '<p>Zapoměli jste zadat jméno !</p>';
}

$dotaz = "INSERT INTO uzivatele (uzivatelske_jmeno, jmeno, primeni, ulice, mesto, email, pevna_linka, mobilni, psc, heslo, datum_registrace) VALUES ('$uzivatelske_jmeno', '$jmeno', '$primeni', '$ulice', '$mesto', '$email', '$pevna_linka', '$mobilni', '$psc', PASSWORD('$heslo'), NOW())";

Pro vložení do DB používáš třeba proměnu $jmeno, ale ten nabývá pouze hodnoty true nebo false. Tedy 1 nebo 0.


Oprava je jednoduchá. Místo $jmeno = true; použij $jmeno = mysql_real_escape_string($_POST['jmeno']); To samé u ostatních.

Podmínkou to projde, protože jakákoli hodnota je true. False je pak samozřejmě false.
Tak mi už vše ukládá.
Ale nechce mi to přihlašovat.
"
Kombinace uživatelského jména a hesla neodpovídá!
"

Přihlašuji se tak jak jsem zadal při registraci.

V phpMyAdminu je vše vidět.

<?php
if (isset($_POST['odeslat'])) { // Ověřit, zda byla stránka volná z formuláře.
require_once ('mysql_spoj.php'); // Připojit se k databázi.

// Vytvořte funkci pro ošetření problematických znaků
function opravit_chyby ($data) {
global $dbc; // Vyžaduje databázové připojení
if (ini_get('magic_quotes_gpc')) {
$data = stripslashes($data);
}
return mysql_real_escape_string($data, $dbc);
} // Konec funkce.

$zprava = NULL; // Nová prázdná proměnná

// Ověřit uživatelské jméno.
if (empty($_POST['uzivatelske_jmeno'])) {
$u =FAlSE;
$zprava .= '<p>Nebylo zadáno uživatelské jméno!</p>';
} else {
$u = opravit_chyby($_POST['uzivatelske_jmeno']);
}

// Ověřit heslo.
if (empty($_POST['heslo'])) {
$h =FAlSE;
$zprava .= '<p>Nebylo zadáno heslo!</p>';
} else {
$h = opravit_chyby($_POST['heslo']);
}

if ($u && $h) { // Je-li vše v pořádku ...
// Odeslat dotaz do databáze.
$dotaz = "SELECT id_uzivatele, jmeno FROM uzivatele WHERE uzivatelske_jmeno='$u' AND heslo=PASSWORD('$h')";
$vysledek = @mysql_query ($dotaz); // Spustit dotaz.
$radek = @mysql_fetch_array ($vysledek, MYSQL_NUM); // Vrací výsledky jsou-li nalezeny.

if ($radek) { // Nalezen záznam.

// Nastavit soubor cookie a přesměrovat.
setcookie ('jmeno', $radek[1]);
setcookie ('id_uzivatele', $radek[0]);
header ("Location: http://". $_SERVER['HTTP_HOST']. dirname($_SERVER['PHP_SELF']). "/prihlasen.php");
exit(); // Ukončit skript.

} else { // Nenalezen žádný záznam.
$zprava = '<p>Kombinace uživatelského jména a hesla neodpovýdá!</p>';
}

mysql_close(); // Zavřít připojení k databázi.

} else { // Pokud došlo k chybě.
$zprava .= '<p>Zkuste to znovu.</p>';
}
} // Konec zpracování formuláře.

// Nastavte titul stránky a zahrňte záhlaví HTML.
$titul_stranky = 'Přihlásit';
include ('sablony/zahlavi.inc');

// Zobrazit chybovou zprávu.
if (isset($zprava)) {
echo '<font color="red">'. $zprava. '</font>';
}
?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<fieldset><legend><h1>Přihlášení</h1></legend>
<p>Přihlásit se můžete pouze v případě , že Váš prohlížeč umožnuje ukládání souborů cookie.</p><br />

<p><b>Uživatelské jméno :</b> <input type="text" name="uzivatelske_jmeno" size="10" maxlength="20" value="<?php if (isset($_POST['uzivatelske_jmeno'])) echo $_POST['uzivatelske_jmeno']; ?>" /></p>
<p><b>Heslo :</b> <input type="password" name="heslo" size="20" maxlength="20" /></p>
</fieldset>
<div align="center"><input type="submit" name="odeslat" value="Přihlásit" /></div>
</form><!-- End of Form -->

<?php
echo '<p>Zatím nefunguje. Zlobí hlavní server Odpusťte.</p>';

include ('sablony/pata.inc'); // Zahrňte patu HTML
?>
Nechej si vypsat obsah proměnné $dotaz, abys viděl co se tam vytváří a zda má správně hodnoty. A rozhodně bych se vyhnul používáním @. Sice je fajn, že potlačí zobrazení chyby, ale pokud chyba skutečně nastane nebo něco nefunguje, tak zavináč je v tomto pak zlo, protože ti tu chybu skryje a budeš prd vědět. Minimálně aspoň při testování a ladění bych ten zavináč nedával.

Možná bude problém v té doprovodné funkce opravit_chyby(). Raději bych to upravil na:

function opravit_chyby ($data) {
if (@get_magic_quotes_gpc()) {
$data = stripslashes($data);
}
return mysql_real_escape_string($data);
}
"Zatím nefunguje. Zlobí hlavní server Odpusťte."

Ty ty ty. To se nedělá :) Schvalovat to na chybu serveru, když je to pouze tvá chyba. Správně má být "Zatím nefunguje. Jsem hloupý, ale pracuji na tom". ;)