Formularz wzorowany na submit.php nie przesyła danych do bazy
|
Szapko |
Dodany dnia 22.07.2009 23:28:52
|
Bywalec
Postów: 888 Pomógł: 66
Data rejestracji: 19.08.2007 19:49
|
Szukałem, ale nie mogłem znaleźć (nie wykluczam, że źle szukałem).
Chciałem zrobić prosty formularz, który przesyłałby mi dane do tabeli.
Plik wygląda tak:
<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright (C) 2002 - 2008 Nick Jones
| http://www.php-fu...
+--------------------------------------------------------+
| Filename: postacie.php
| Author: eDan
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at www.gnu.org/licen... Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/
require_once "maincore.php";
require_once THEMES."templates/header.php";
if (!isset($_GET['add']) || !preg_check("/^[a-z]$/", $_GET['add'])) { redirect("index.php"); }
opentable('Dodaj');
if ($_GET['add'] == "ok") {
if (isset($_POST['submit_postac'])) {
$name = $_POST['name'];
$link = $_POST['link'];
$result = dbquery("INSERT INTO ".DB_PREFIX."postacie (postac_name, postac_link) VALUES ($name, $link)");
echo "<center>Dodano postać</center>";
}
echo "<form action='".FUSION_SELF."?add=ok' method='POST'>
Postać: <input type='text' name='name'/><br/>
Link: <input type='text' name='link'/><br/>
<input type='submit_postac' value='Dodaj'/>";
}
closetable();
opentable('Postacie');
echo "<table cellspacing='0' cellpadding='0' border='0' align='center' width='90%'><tr>";
echo "<td width='10%'><center><b>ID</b></center></td>";
echo "<td width='30%'><center><b>Postać</b></center></td>";
echo "<td width='50%'><center><b>Miniaturka</b></center></td>";
echo "</tr>";
$result = dbquery("SELECT * FROM ".DB_PREFIX."postacie");
while ($data = dbarray($result)) {
echo "<tr>";
echo "<td aling='center'>".$data['postac_id']."</td>";
echo "<td aling='center'>".$data['postac_name']."</td>";
echo "<td aling='center'><img src='".IMAGES."postacie/".$data['postac_link']."' alt='".$data['postac_name']."' title='".$data['postac_name']."' border='0'></td>";
echo "</tr>";
}
echo "</table>";
closetable();
require_once THEMES."templates/footer.php";
?>
Kliknij i zaczekaj na załadowanie kodu ...
Jak wchodzę w plik.php to przenosi mnie do strony głównej. Wzorowałem się na submit.php, ale nie mogę dojść gdzie mam błąd.
Edytowane przez Pieka dnia 22.07.2009 23:31:37
|
|
|
|
Wścibski Gość |
Dodany dnia 25.11.2024 14:29:44
|
Pan Kontekstualny
Postów: n^x
Data rejestracji: Zawsze
|
|
IP: localhost |
|
|
slawekneo |
Dodany dnia 23.07.2009 00:36:21
|
Bywalec
Postów: 915 Pomógł: 41
Data rejestracji: 12.03.2006 07:28
|
Chodzi o ten warunek if (!isset($_GET['add']) || !preg_check("/^[a-z]$/", $_GET['add'])) { redirect("index.php"); } skasuj go.
Tak odemnie - Ja nie widze sensu by sprawdzac klucz "add" z tablicy _get bo jest to bezcelowe gdyz nie jest ani wyswietlany ani uzywany nigdzie indziej jak w warunku.
Pozdro!!
Ps.
Polecam dodac zabezpieczenie typu stripinput() na zmienne $name i $link jak i sprawdzenie czy wartosci nie sa puste przed dodaniem rekordu do bazy.
Edytowane przez slawekneo dnia 23.07.2009 01:42:47
|
|
|
|
Szapko |
Dodany dnia 23.07.2009 03:39:29
|
Bywalec
Postów: 888 Pomógł: 66
Data rejestracji: 19.08.2007 19:49
|
Zabezpieczenie nałożyłem i usunąłem tamtą linijkę, ale nie wiem co zrobić z:
if ($_GET['add'] == "ok") {
Kliknij i zaczekaj na załadowanie kodu ...
Na co to zmienić? |
|
|
|
zezol |
Dodany dnia 23.07.2009 06:57:41
|
Bywalec
Postów: 593 Pomógł: 34
Data rejestracji: 09.12.2006 22:16
|
if (isset($_GET['add']) && $_GET['add'] == "ok") {
Kliknij i zaczekaj na załadowanie kodu ...
|
|
|
|
Szapko |
Dodany dnia 23.07.2009 11:22:51
|
Bywalec
Postów: 888 Pomógł: 66
Data rejestracji: 19.08.2007 19:49
|
Obecnie plik wygląda tak:
<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright (C) 2002 - 2008 Nick Jones
| http://www.php-fu...
+--------------------------------------------------------+
| Filename: postacie.php
| Author: eDan
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at www.gnu.org/licen... Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/
require_once "maincore.php";
require_once THEMES."templates/header.php";
opentable('Dodaj');
if (isset($_GET['add']) && $_GET['add'] == "ok") {
if (isset($_POST['submit_postac'])) {
$name = stripinput($_POST['name']);
$link = stripinput($_POST['link']);
$result = dbquery("INSERT INTO ".DB_PREFIX."postacie (postac_name, postac_link) VALUES ($name, $link)");
echo "<center>Dodano postać</center>";
}
echo "<form method='post'>
Postać: <input type='text' name='name'><br/>
Link: <input type='text' name='link'><br/>
<input type='submit_postac' value='Dodaj'>";
}
closetable();
opentable('Postacie');
echo "<table cellspacing='0' cellpadding='0' border='0' align='center' width='90%'><tr>";
echo "<td width='10%'><center><b>ID</b></center></td>";
echo "<td width='30%'><center><b>Postać</b></center></td>";
echo "<td width='50%'><center><b>Miniaturka</b></center></td>";
echo "</tr>";
$result = dbquery("SELECT * FROM ".DB_PREFIX."postacie");
while ($data = dbarray($result)) {
echo "<tr>";
echo "<td aling='center'><center>".$data['postac_id']."</center></td>";
echo "<td aling='center'><center>".$data['postac_name']."</center></td>";
echo "<td aling='center' height='72'><center><img src='".IMAGES."postacie/".$data['postac_link']."' alt='".$data['postac_name']."' title='".$data['postac_name']."' border='0'></center></td>";
echo "</tr>";
}
echo "</table>";
closetable();
require_once THEMES."templates/footer.php";
?>
Kliknij i zaczekaj na załadowanie kodu ...
I niestety nie wyświetlają się pola w formularzu. Nie mogę dojść co jest źle.
Edytowane przez Szapko dnia 23.07.2009 11:59:07
|
|
|
|
Chemikpil |
Dodany dnia 23.07.2009 12:13:25
|
Bywalec
Postów: 999 Pomógł: 54
Data rejestracji: 04.05.2008 21:46
|
Po co jest w ogóle ten warunek:
if (isset($_GET['add']) && $_GET['add'] == "ok") {
Po jegu usunięciu powinno działać z kilkoma poprawkami. To kod:
<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright (C) 2002 - 2008 Nick Jones
| http://www.php-fu...
+--------------------------------------------------------+
| Filename: postacie.php
| Author: eDan
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at www.gnu.org/licen... Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/
require_once "maincore.php";
require_once THEMES."templates/header.php";
opentable('Dodaj');
//if (isset($_GET['add']) && $_GET['add'] == "ok") {
if (isset($_POST['dodaj'])) {
$name = stripinput($_POST['name']);
$link = stripinput($_POST['link']);
$result = dbquery("INSERT INTO ".DB_PREFIX."postacie (postac_name, postac_link) VALUES ($name, $link)");
echo "<center>Dodano postać</center>";
}
//}
else
{
echo "<form method='post'>
<label>Postać:<input type='text' name='name' /></label><br />
<label>Link: <input type='text' name='link' /></label><br />
<input type='submit' value='Dodaj' name='dodaj' />
</form>";
}
closetable();
opentable('Postacie');
echo "<table cellspacing='0' cellpadding='0' border='0' align='center' width='90%'><tr>";
echo "<td width='10%'><center><b>ID</b></center></td>";
echo "<td width='30%'><center><b>Postać</b></center></td>";
echo "<td width='50%'><center><b>Miniaturka</b></center></td>";
echo "</tr>";
$result = dbquery("SELECT * FROM ".DB_PREFIX."postacie");
while ($data = dbarray($result)) {
echo "<tr>";
echo "<td aling='center'><center>".$data['postac_id']."</center></td>";
echo "<td aling='center'><center>".$data['postac_name']."</center></td>";
echo "<td aling='center' height='72'><center><img src='".IMAGES."postacie/".$data['postac_link']."' alt='".$data['postac_name']."' title='".$data['postac_name']."' border='0'></center></td>";
echo "</tr>";
}
echo "</table>";
closetable();
require_once THEMES."templates/footer.php";
?>
Kliknij i zaczekaj na załadowanie kodu ...
Po pierwsze brakowało zamknięcia form, jeżeli coś ma się wysyłać po dodaniu danych to daj else, że jak nie dałeś danych to wyświetla się formularz. Trochę poprawiłem na szybko kilka błędów składniowych, które akurat wpadły mi w oko :).
|
|
|
|
Szapko |
Dodany dnia 23.07.2009 12:26:18
|
Bywalec
Postów: 888 Pomógł: 66
Data rejestracji: 19.08.2007 19:49
|
Gdy wysyłam formularz wyskakuje mi błąd:
Nieznana kolumna 'Daniel' w field list
Kliknij i zaczekaj na załadowanie kodu ...
Pierwszy raz się z takim czymś spotykam.
Edytowane przez Szapko dnia 23.07.2009 12:30:42
|
|
|
|
Chemikpil |
Dodany dnia 23.07.2009 12:51:02
|
Bywalec
Postów: 999 Pomógł: 54
Data rejestracji: 04.05.2008 21:46
|
A jak ta tabela wygląda?
|
|
|
|
Szapko |
Dodany dnia 23.07.2009 13:06:22
|
Bywalec
Postów: 888 Pomógł: 66
Data rejestracji: 19.08.2007 19:49
|
<?php
$result = dbquery("DROP TABLE IF EXISTS ".$db_prefix."postacie");
$result = dbquery("CREATE TABLE ".$db_prefix."postacie (
postac_id MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
postac_name varchar(200) NOT NULL,
postac_link varchar(200) NOT NULL,
PRIMARY KEY (postac_id)
) TYPE=MyISAM;");
if($result) {
echo "<div style='text-align:center'><br />Baza danych została utworzona.</div><br />n";
}
?>
Kliknij i zaczekaj na załadowanie kodu ... |
|
|
|
Chemikpil |
Dodany dnia 23.07.2009 14:52:51
|
Bywalec
Postów: 999 Pomógł: 54
Data rejestracji: 04.05.2008 21:46
|
Spróbuj tego:
<?php
require_once "maincore.php";
require_once THEMES."templates/header.php";
opentable('Dodaj postać');
if(isset($_POST['ok']))
{
$postac = $_POST['postac'];
$link = $_POST['link'];
$db = dbquery("INSERT INTO ".DB_PREFIX."postacie VALUES ('', '".$postac."', '".$link."')");
if($db)
echo "Dane zostały dodane";
}
else
{
echo "<form method='post'>
<label>Postać:<input type='text' name='postac' /></label><br />
<label>Link:<input type='link' name='link' /></label><br />
<input type='submit' name='ok'/>
</form>";
}
closetable();
opentable('Postacie');
$dbr = dbquery("SELECT * FROM ".DB_PREFIX."postacie ");
while($d = dbarray($dbr))
{
echo "Postać: ".$d['postac_name'].", link: ".$d['postac_link']."<br />";
}
closetable();
require_once THEMES."templates/footer.php";
?>
Co prawda sprawdzałem u mnie ale różnie to bywa :P. Jeżeli działa to super, formatować wygląd już musisz sam według uznania.
|
|
|
|
slawekneo |
Dodany dnia 23.07.2009 17:39:25
|
Bywalec
Postów: 915 Pomógł: 41
Data rejestracji: 12.03.2006 07:28
|
Zabezpieczenia na _POST !!!
<?php
require_once "maincore.php";
require_once THEMES."templates/header.php";
if(isset($_POST['ok'])){
opentable('Dodawanie postaci');
$postac = (isset($_POST['postac']) && $_POST['postac'] != "") ? stripinput($_POST['postac']) : "";
$link = (isset($_POST['link']) && $_POST['link'] != "") ? stripinput($_POST['link']) : "";
if($postac && $link)
$db = dbquery("INSERT INTO ".DB_PREFIX."postacie VALUES ('', '".$postac."', '".$link."')");
else
echo "<strong>Blednie wypelniony formularz !</strong><br />";
if(isset($db))
echo "<strong>Dane zostaly dodane !</strong>";
} else {
opentable('Dodaj postać');
echo "<form method='post'>
<label>Postać:<input type='text' name='postac' /></label><br />
<label>Link:<input type='link' name='link' /></label><br />
<input type='submit' name='ok'/>
</form>";
}
closetable();
opentable('Postacie');
$dbr = dbquery("SELECT * FROM ".DB_PREFIX."postacie ");
while($d = dbarray($dbr)){
echo "Postać: ".$d['postac_name'].", link: ".$d['postac_link']."<br />";
}
closetable();
require_once THEMES."templates/footer.php";
?>
|
|
|
|
Szapko |
Dodany dnia 23.07.2009 17:52:50
|
Bywalec
Postów: 888 Pomógł: 66
Data rejestracji: 19.08.2007 19:49
|
Ok, dzięki wszystkim za pomoc, już działa.
P.S. Wzorując się na Twoim formularzu, zauważyłem, że wystarczyło zmienić:
(postac_name, postac_link) VALUES ($name, $link)");
Kliknij i zaczekaj na załadowanie kodu ...
na:
VALUES ('', '".$name."', '".$link."')");
Kliknij i zaczekaj na załadowanie kodu ...
Edytowane przez Szapko dnia 23.07.2009 18:02:21
|
|
|
|
Chemikpil |
Dodany dnia 23.07.2009 19:26:15
|
Bywalec
Postów: 999 Pomógł: 54
Data rejestracji: 04.05.2008 21:46
|
Ta oczywiście plus to co dodał Sławek Miałem to uwzględnić ale z pośpiechu zostawiłem dziurę w kodzie
|
|
|