« 1 2 »
Autor Zpráva
Kos112567
Profil
Ahoj,

chtěl bych nějak jednoduše zapisovat registrované uživatelé do databáze.

Vytvořil jsem si php soubor s připojením do databáze:

<?
$db_server    = '127.0.0.1'; 
$db_login     = 'root';
$db_password  = ''; 
$db_name      = 'sokolmilicincz1';
$spojeni      = @MySQL_Connect($db_server ,$db_login, $db_password);
@mysqli_select_db($db_name)or die('<p style="color: red">Nastala chyba v pripojeni k databazi');
mysqli_query("set names utf8");
?>

a pak registrační stránku s formulářem

<?php
include "connect.php";
if(isset($_POST['submit'])) {
    $nick = mysql_real_escape_string($_POST['nick']);
    $heslo = mysql_real_escape_string($_POST['heslo']);
    $over_heslo = mysql_real_escape_string($_POST['over_heslo']);
    $md5_heslo = md5($heslo);
    $email = mysql_real_escape_string($_POST['email']);
    $user_check = mysql_query("SELECT login FROM uzivatele WHERE login='".$nick."'");
    if($nick==""){echo"Nebyl vyplněn nick!";}
    else if(mysql_num_rows($user_check)){echo"Tento nick používá již jiný uživatel.";}
    else if($heslo==""){echo"Nebylo vyplněno heslo";}
    else if($over_heslo==""){echo"Nebylo vyplněno ověřovací heslo";}
    else if($heslo!=$over_heslo){echo"Vyplněná hesla se neshodují";}
    else if($email==""){echo"Nebyl vyplněn email";}
    else{
        $sql= mysql_query("INSERT INTO uzivatele VALUES ('','$nick','$md5_heslo','$email')") or die(mysql_error());
        echo"Registrace byla úspěšně dokončena!";
    }
}
?>

<!DOCTYPE html>
<html lang="cs-cz">

<head>
    <meta charset="utf-8" />
    <link rel="stylesheet" href="styl.css" type="text/css" />
    <title>Web o TJ Sokol Miličín</title>
</head>
<body>
<header>
    <div id="logo"><img src="obrazky/sokolMale.png" alt="logo"></div>
    <nav>
        <ul>
            <li class="aktivni"><a href="index.php">Domů</a></li>
            <li><a href="sport.php">Sport</a></li>
            <li><a href="kultura.php">Kultura</a></li>
            <li><a href="fotogalerie.php">Fotogalerie</a></li>
            <li><a href="dokumenty.php">Dokumenty</a></li>
            <li><a href="historie.php">Historie</a></li>
            <li class="login"><a href="prihlaseni.php">Přihlášení</a></li>

        </ul>
    </nav>
</header>

<article>
    <div id="centrovac">
        <header>
            <h1>Registrace</h1>
        </header>
        <section>
            <form action="#" method="post">
                <table>
                    <tr> <td>Přezdívka: </td> <td><input type="text" name="nick" value="<?php if(isset($_POST["nick"])){echo $_POST["nick"];}?>" size="25" tabindex="1" /></td> </tr>
                    <tr> <td>Heslo: </td> <td><input type="password" name="heslo" value="" size="25" tabindex="2" /></td> </tr>
                    <tr> <td>Ověření hesla: </td> <td><input type="password" name="over_heslo" value="" size="25" tabindex="3" /></td> </tr>
                    <tr> <td>Email: </td> <td><input type="text" name="email" value="<?php if(isset($_POST["email"])){echo $_POST["email"];}?>" size="25" tabindex="4" /></td> </tr>
                    <tr> <td colspan="2"><input type="submit" name="submit" value="Registrovat se" /></td> </tr>
                </table>
            </form>
        </section>
        <div class="cistic"></div>
    </div>
</article>


<footer>
</footer>
</body>
</html>

Nicméně, vždy vždy když otevřu stránku s registrací, tak mi to vypíše že se nepodařilo připojit k databázi (přitom to dělám pouze u sebe, tudíž se domnívám že údaje 127.0.0.1, root a bez hesla je výchozí nastavení phpmyadmin, které jsem si v balíku xampp nainstaloval)

Můžu někoho požádat o radu? :) Díky
Enko
Profil
Existuje ta databáze? Založil jsi uživatele, který má oprávnění k této databázi?
Kos112567
Profil
Ano, existuje, jmenuje se sokolmilicincz1 a tabulku jsem takto vygeneroval

CREATE TABLE `uzivatele` (
 `id` int(5) NOT NULL auto_increment,
 `login` varchar(40) NOT NULL,
 `heslo` varchar(32) NOT NULL,
 `email` varchar(50) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Uživatele, který má opravnění k této databázi? Já jsem tam připojuji jako root, tak se domnívám, že má práva na všechny
Kos112567
Profil
Přitom pokud tam ručně vložím nějaké záznamy, tak mi to v pořádku načte na stránku. Pokud do toho php vložím vyloženě SQL insert s daty, tak mi to do databáze zapíše též..
Lonanek
Profil
Kos112567:
$spojeni      = @MySQL_Connect($db_server ,$db_login, $db_password);
@mysqli_select_db($db_name)or die('<p style="color: red">Nastala chyba v pripojeni k databazi');
mysqli_query("set names utf8");
?>
jednou mysql, podruhé mysqli
používejte všude mysqli nebo PDO. MySQL je v novějších verzí PHP nefunkční.
Kos112567
Profil
Chápu, sice jsem vše přejmenoval na mysqli, nicméně stále mi to hlásí Nastala chyba v připojení-
Davex
Profil
Kos112567:
Nemohlo by to být třeba tím, že funkcím mysqli_*() předáváš jen jeden argument?
Kos112567
Profil
Vyhodí mi to tuto hlášku rovnou, nemusím ani ten formulář odesílat

XAMPP jsem přeinstaloval, nevím ještě, co bych měl dělat... :/
ArdaGamesTV
Profil
Zkus si stáhnout Vertrigoserver používám ho už skoro rok a od xampu se skoro vůbec neliší. Třeba je ta chyba v Xamppu.
Kos112567
Profil
Nevím, pořád mi přijde, že bych měl zadávat špatně login (což všude píší defaultně root) nebo heslo (všude píší, že je vypnnuté) - tohle je můj config.inc.php

<?php
/*
 * This is needed for cookie based authentication to encrypt password in
 * cookie
 */
$cfg['blowfish_secret'] = 'xampp'; /* YOU SHOULD CHANGE THIS FOR A MORE SECURE COOKIE AUTH! */

/*
 * Servers configuration
 */
$i = 0;

/*
 * First server
 */
$i++;

/* Authentication type and info */
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
$cfg['Lang'] = '';

/* Bind to the localhost ipv4 address and tcp */
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['connect_type'] = 'tcp';

/* User for advanced features */
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = '';

/* Advanced phpMyAdmin features */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
$cfg['Servers'][$i]['relation'] = 'pma__relation';
$cfg['Servers'][$i]['table_info'] = 'pma__table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma__column_info';
$cfg['Servers'][$i]['history'] = 'pma__history';
$cfg['Servers'][$i]['designer_coords'] = 'pma__designer_coords';
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['recent'] = 'pma__recent';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
$cfg['Servers'][$i]['users'] = 'pma__users';
$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
$cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
$cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
$cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
$cfg['Servers'][$i]['favorite'] = 'pma__favorite';

/*
 * End of servers configuration
 */

?>



Ok, díky za radu. Vyzkouším :)
Keeehi
Profil
ArdaGamesTV:
Není

Kos112567:
Problém je v tom, že si vypisuješ svojí verzi hlášky a přitom nevíš, co se vlastně stalo. Vypiš si reálnou chybu, co ti databáze vrátí.
$mysqli = new mysqli("127.0.0.1", "root", "", "sokolmilicincz1");

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

...
Davex
Profil
Kos112567:
Vyhodí mi to tuto hlášku rovnou, nemusím ani ten formulář odesílat
To je logické, když ty mysqli_*() funkce, které se spouštějí hned na začátku v connect.php, používáš špatně.

Doporučuji projít příklady v dokumentaci počínaje funkcí mysqli_connect(), kde je i ošetření chyb se zobrazením chybových hlášek.
Kos112567
Profil
Ok, takže už to mám dobře :) Díky!

a když se podíváte na ten registrační formulář, tam žádná chyba není? Stále mi to do té databáze nezapisuje uživatele, nicméně teď již to spojení je navázáno.

Ani mi to nevypisuje to echo, když nevyplním email...
Lonanek
Profil
Jak vypadá upravený kód?
Kos112567
Profil
Takto:

<?php
include "connect.php";
if(isset($_POST['submit'])) {
    $nick = mysqli_real_escape_string($_POST['nick']);
    $heslo = mysqli_real_escape_string($_POST['heslo']);
    $over_heslo = mysqli_real_escape_string($_POST['over_heslo']);
    $md5_heslo = md5($heslo);
    $email = mysqli_real_escape_string($_POST['email']);
    $user_check = mysqli_query("SELECT login FROM uzivatele WHERE login='".$nick."'");
    if($nick==""){echo"Nebyl vyplněn nick!";}
    else if(mysqli_num_rows($user_check)){echo"Tento nick používá již jiný uživatel.";}
    else if($heslo==""){echo"Nebylo vyplněno heslo";}
    else if($over_heslo==""){echo"Nebylo vyplněno ověřovací heslo";}
    else if($heslo!=$over_heslo){echo"Vyplněná hesla se neshodují";}
    else if($email==""){echo"Nebyl vyplněn email";}
    else{
        $sql= mysqli_query("INSERT INTO uzivatele VALUES ('','$nick','$md5_heslo','$email')") or die(mysqli_error());
        echo"Registrace byla úspěšně dokončena!";
    }
}
?>

A ten samotný formulář:

<form action="#" method="post">
                <table>
                    <tr> <td>Login: </td> <td><input type="text" name="nick" value="<?php if(isset($_POST["nick"])){echo $_POST["nick"];}?>" size="25" tabindex="1" /></td> </tr>
                    <tr> <td>Heslo: </td> <td><input type="password" name="heslo" value="" size="25" tabindex="2" /></td> </tr>
                    <tr> <td>Ověření hesla: </td> <td><input type="password" name="over_heslo" value="" size="25" tabindex="3" /></td> </tr>
                    <tr> <td>Email: </td> <td><input type="text" name="email" value="<?php if(isset($_POST["email"])){echo $_POST["email"];}?>" size="25" tabindex="4" /></td> </tr>
                    <tr> <td colspan="2"><input type="submit" name="submit" value="Registrovat se" /></td> </tr>
                </table>
            </form>
Lonanek
Profil
Zkuste upravit takto:
<?php
include "connect.php";
if(isset($_POST['submit'])) {
    $nick = mysqli_real_escape_string($link, $_POST['nick']);
    $heslo = mysqli_real_escape_string($link, $_POST['heslo']);
    $over_heslo = mysqli_real_escape_string($link, $_POST['over_heslo']);
    $md5_heslo = md5($heslo);
    $email = mysqli_real_escape_string($link, $_POST['email']);
    $user_check = mysqli_query($link, "SELECT login FROM uzivatele WHERE login='".$nick."'");
    if($nick=="") {echo "Nebyl vyplněn nick!";}
    elseif (mysqli_num_rows($user_check)) {echo "Tento nick používá již jiný uživatel.";}
    elseif ($heslo=="") {echo "Nebylo vyplněno heslo";}
    elseif ($over_heslo=="") {echo "Nebylo vyplněno ověřovací heslo";}
    elseif ($heslo!=$over_heslo) {echo "Vyplněná hesla se neshodují";}
    elseif ($email=="") {echo "Nebyl vyplněn email";}
    else {
        $sql= mysqli_query($link, "INSERT INTO uzivatele VALUES (NULL,'$nick','$md5_heslo','$email')") or die(mysqli_error());
        echo "Registrace byla úspěšně dokončena!";
    }
}
EDIT: doplněn povinný parametr $link, po upozornění [#21] juriad snad již všude.
Kos112567
Profil
Stále nic... :/
Lonanek
Profil
Nějaká hláška?
V příkazech mysqli Vám chybí povinný parametr $spojení
Kos112567
Profil
Nene, vždycky ty vyplněné textboxy akorát zmizí.

Nehledě na to, když formulář vyplním správně nebo špatně. Úplně bez hlášky.
Lonanek
Profil
mysqli_query ($link, $dotaz);
Již to zmiňoval Davex [#12]
juriad_
Profil *
Skoro všechny myqli_ funkce chtějí jako parametr spojení s databází. Toto se týká i mysqli_real_escape_string.
Kos112567
Profil
Ok, takže ten kód teď vypadá takto

<?php
include "connect.php";
if(isset($_POST['submit'])) {
    $nick = mysqli_real_escape_string($link, $_POST['nick']);
    $heslo = mysqli_real_escape_string($link, $_POST['heslo']);
    $over_heslo = mysqli_real_escape_string($link, $_POST['over_heslo']);
    $md5_heslo = md5($heslo);
    $email = mysqli_real_escape_string($link, $_POST['email']);
    $user_check = mysqli_query($link, "SELECT login FROM uzivatele WHERE login='".$nick."'");
    if($nick=="") {echo "Nebyl vyplněn nick!";}
    elseif (mysqli_num_rows($link, $user_check)) {echo "Tento nick používá již jiný uživatel.";}
    elseif ($heslo=="") {echo "Nebylo vyplněno heslo";}
    elseif ($over_heslo=="") {echo "Nebylo vyplněno ověřovací heslo";}
    elseif ($heslo!=$over_heslo) {echo "Vyplněná hesla se neshodují";}
    elseif ($email=="") {echo "Nebyl vyplněn email";}
    else {
        $sql= mysqli_query($link, "INSERT INTO uzivatele VALUES (NULL,'$nick','$md5_heslo','$email')") or die(mysqli_error());
        echo "Registrace byla úspěšně dokončena!";
    }
}
?>

Nicméně stále to nefunguje, viz ten můj předchozí příspěvek
Lonanek
Profil
A v config.php nastavuje spojení do jaké proměnné?
Podle prvního příspěvku se jmenuje $spojeni
Kos112567
Profil
Myslíš v connect.php? $spojeni se to jmenovalo, nicméně jak jsem to upravoval, tak jsem tam nechal název $link

Viz connect.php kód

<?php
$link = mysqli_connect("127.0.0.1", "root", "", "sokolmilicincz1");

if (!$link) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}

echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL;
echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL;

mysqli_close($link);
?>
Lonanek
Profil
No když se před spuštěním samotného kódu (dotazů) spojení uzavře nemůže to fungovat správně.

Vyhoďte z kódu mysqli_close($link);
Kos112567
Profil
Ajo, já jsem *****:) To je tak, když to tupě kopíruju a ani si to pořádně nečtu.

No, nicméně i bez tohoto řádku se to chová stále stejně...
Lonanek
Profil
Mě to na lokálu v pohodě projde. Včetně chybových hlášek o nevyplnění polí.
Kos112567
Profil
Ale i kdyby bylo spojení zavřené, tak ty moje podmínky (nebylo vyplněno heslo, email, hesla se neshodují), by měly vypsat nějaké echo, nebo ne?

Aha, tak to je opravdu podivné... Jinak používám Phpstorm 2016.3.2 a XAMPP s PHP 7 - nemohl by být v tom nějak problém?


Já si to jinak moc neumím vysvětlit, interpreter mám v IDE nastaven na C:\xampp\php\php.exe

Verzi PHP nastavenou stejnou jako CLI interpreter (tedy tu verzi 7)
Lonanek
Profil
mám to takto:
index.php
<?php
include "connect.php";
if (isset($_POST['submit']))
{
    $nick = mysqli_real_escape_string($link, $_POST['nick']);
    $heslo = mysqli_real_escape_string($link, $_POST['heslo']);
    $over_heslo = mysqli_real_escape_string($link, $_POST['over_heslo']);
    $md5_heslo = md5($heslo);
    $email = mysqli_real_escape_string($link, $_POST['email']);

    $user_check = mysqli_query($link, "SELECT login FROM uzivatele WHERE login='".$nick."'");

    if($nick=="") 
    {
        echo "Nebyl vyplněn nick!";
    } elseif (mysqli_num_rows($user_check)) {
        echo "Tento nick používá již jiný uživatel.";
    } elseif ($heslo=="") {
        echo "Nebylo vyplněno heslo";
    } elseif ($over_heslo=="") {
        echo "Nebylo vyplněno ověřovací heslo";
    } elseif ($heslo!=$over_heslo) {
        echo "Vyplněná hesla se neshodují";
    } elseif ($email=="") {
        echo "Nebyl vyplněn email";
    } else {
        $sql= mysqli_query($link, "INSERT INTO uzivatele VALUES (NULL,'$nick','$md5_heslo','$email')") or die(mysqli_error());
        echo "Registrace byla úspěšně dokončena!";
    }
}

echo '
<form action="#" method="post">
    <table>
        <tr>
            <td>Login: </td>
            <td><input type="text" name="nick" value="'. (isset($_POST["nick"]) ? $_POST["nick"] : '') .'" size="25" tabindex="1" /></td>
        </tr>
        <tr> 
            <td>Heslo: </td>
            <td><input type="password" name="heslo" value="" size="25" tabindex="2" /></td>
        </tr>
        <tr>
            <td>Ověření hesla: </td>
            <td><input type="password" name="over_heslo" value="" size="25" tabindex="3" /></td>
        </tr>
        <tr> 
            <td>Email: </td>
            <td><input type="text" name="email" value="' . (isset($_POST["email"]) ? $_POST["email"] : '') . '" size="25" tabindex="4" /></td> 
        </tr>
        <tr> 
            <td colspan="2"><input type="submit" name="submit" value="Registrovat se" /></td>
        </tr>
    </table>
</form>';

connect.php
<?php
$link = mysqli_connect("127.0.0.1", "root", "", "test");
 
if (!$link) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}
 
echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL;
echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL;
echo "<br /><br />";

A vše funguje jak má.
Kos112567
Profil
Ano, mám to na mezeru naprosto stejné - jediné, co se stane je, že v adresním řádku po stisku tlačítka Registrovat se přibude #.

Jinak používám Google Chrome, teď jsem to zkusil na Firefoxu a ten mi při pokusu o odeslání formuláře hodí 404
« 1 2 »

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:

0