Witam mam problem z tym kodem. Po odświeżeniu strony dodają się do bazy puste rekordy, przycisk działa ale coś się wykonuje samoczynnie i nie wiem gdzie jest bład.
Musisz jakoś (if isset POST) sprawdzić, czy został kliknięty przycisk i dopiero wtedy wewnątrz tej zależności wysyłać zapytanie MySQL.
Też tak myślałem ale to nie działa...
Przecież ty nadal wykonujesz zapytanie niezależnie od tego czy POST poszedł czy nie.... Przeczytaj jeszcze raz UWAŻNIE post Damonsson
A do kodu PHP używaj BBOCODE PHP a nie CODE.
I na przyszłość tytułuj tematy jak człowiek a nie jak dwuletnie dziecko
http://forum.php.pl/Jak_poprawnie_zatytulowac_watek_t182364.html
Prosty if i cieszy
<?php if($_POST['add']) { $add = $_POST['add']; $con = http://www.php.net/mysql_connect("localhost", "user", "pass"); if (!$con) { http://www.php.net/die('Nie mozna połączyć:' . http://www.php.net/mysql_error()); } http://www.php.net/mysql_select_db("baza",$con); $sql = http://www.php.net/nl2br("INSERT INTO tabela SET id='null', arty='$add'"); if(!http://www.php.net/mysql_query($sql,$con)) { http://www.php.net/die('Bład: ' . http://www.php.net/mysql_error()); } http://www.php.net/echo "Dodany"; $_POST['add'] = null; } http://www.php.net/mysql_close($con); ?> <form action="admin.php" method="POST"> <textarea rows="10" cols="30" name="add"></textarea><br> <input type="submit" value="Dodaj"> </form>
Dzięki prz3kus teraz działa.
To że działa nie znaczy że jest dobry. Gdzie sprawdzasz czy POST istnieje, czy został wysłany? Po co chcesz zakończyć połączenie w wypadku jego "braku"? Już nie wspominając że w ogóle tu niczego nie filtrujesz.
<?php if(http://www.php.net/isset($_POST['add'])){ $add = http://www.php.net/addslashes(http://www.php.net/htmlspecialchars($_POST['add'])); } if($_POST['add']){ $add = $_POST['add']; $con = http://www.php.net/mysql_connect("localhost", "user", "root"); if (!$con) { http://www.php.net/die('Nie mozna połączyć:' . http://www.php.net/mysql_error()); } http://www.php.net/mysql_select_db("baza",$con); $sql = http://www.php.net/nl2br("INSERT INTO tabela SET id='null', arty='$add'"); if(!http://www.php.net/mysql_query($sql,$con)) { http://www.php.net/die('Bład: ' . http://www.php.net/mysql_error()); } http://www.php.net/echo "Dodany"; $_POST['add'] = null; } http://www.php.net/mysql_close($con); ?>
To fajnie, że sprawdzasz czy istnieje indeks add w tablict $_POST za pomocą isset($_POST['add']), ale pare linijek dalej nadal korzystasz z zapisu if($_POST['add']), co w Twoim przypadku nie jest prawidłowe.
Poprawione.
<?php if(http://www.php.net/isset($_POST['add'])) { $add = http://www.php.net/addslashes(http://www.php.net/htmlspecialchars($_POST['add'])); $con = http://www.php.net/mysql_connect("localhost", "user", "pass"); if (!$con) { http://www.php.net/die('Nie mozna połączyć:' . http://www.php.net/mysql_error()); } http://www.php.net/mysql_select_db("baza",$con); $sql = http://www.php.net/nl2br("INSERT INTO tabela SET id='null', arty='$add'"); if(!http://www.php.net/mysql_query($sql,$con)) { http://www.php.net/die('Bład: ' . http://www.php.net/mysql_error()); } http://www.php.net/echo "Dodany"; $_POST['add'] = null; } http://www.php.net/mysql_close($con); ?>
1. nl2br - wiesz co robi ta funkcja ?
2. po co robisz to : $_POST['add'] = null; ?
3. zauważ, że gdy warunek
nie jest spełniony, Twój kod wykonuje tą instrukcję :
if(http://www.php.net/isset($_POST['add']))
ale nie wykonuje tej instrukcji :
http://www.php.net/mysql_close($con);
$con = http://www.php.net/mysql_connect("localhost", "user", "pass");
1.
OK, rozumiem już po co dodałeś tą funkcję. Ale lepiej by było jakbyś użył jej na zmiennej add, a nie całym zapytaniu.
3. Jeżeli nic nie dodajesz, to nie ma potrzeby łączyć się z bazą... a jeżeli się nie połączyłeś z bazą to nie ma potrzeby się z nią rozłączać. Błąd polega na tym, że próbujesz zamknąć drzwi których nie otworzyłeś.
za to
http://www.php.net/mysql_close($con);
or http://www.php.net/die(http://www.php.net/mysql_error());
<?php if(http://www.php.net/isset($_POST['add'])){ $add = http://www.php.net/addslashes(http://www.php.net/htmlspecialchars($_POST['add'])); $con = http://www.php.net/mysql_connect("localhost", "user", "pass"); if (!$con) { http://www.php.net/die('Nie mozna połączyć:' . http://www.php.net/mysql_error()); } http://www.php.net/mysql_select_db("baza",$con); $sql = "INSERT INTO tabela SET id='null', arty='$add'"; if(!http://www.php.net/mysql_query($sql,$con)) { http://www.php.net/die('Bład:' . http://www.php.net/mysql_error()); } http://www.php.net/echo "Dodany"; } ?>
Powiedzmy. Sprawdź jeszcze na tej samej zasadzie czy formularz został wysłany, input/button musi mieć name. Zainteresuj się http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO zamiast mysql_* bo za jakiś czas wylecą z PHP. Aha no i teraz nie kończysz połączenia. dodaj też trim()
<?php if(http://www.php.net/isset($_POST['submit'])&& $_POST['add'] or http://www.php.net/mysql_close($con)){ $add = http://www.php.net/trim(http://www.php.net/addslashes(http://www.php.net/htmlspecialchars($_POST['add']))); $con = http://www.php.net/mysql_connect("localhost", "user", "pass"); if (!$con) { http://www.php.net/die('Nie mozna połączyć:' . http://www.php.net/mysql_error()); } http://www.php.net/mysql_select_db("baza",$con); $sql = http://www.php.net/nl2br("INSERT INTO tabela SET id='null', arty='$add'"); if(!http://www.php.net/mysql_query($sql,$con)) { http://www.php.net/die('Bład:' . http://www.php.net/mysql_error()); } http://www.php.net/echo "Dodany"; } ?> <form action="admin.php" method="POST"> <textarea rows="10" cols="30" name="add"></textarea><br> <input type="submit" value="Dodaj" name=""> <input type='hidden' name='submit' /> </form>
W ogóle nie znasz podstaw PHP i zasad działania funkcji.
A ten przykład, zaczerpnąłeś z książki z tutoriala jakiegoś? Jeśli tak to przestań to czytać i sięgnij do innej lektury. W ogóle wiele if'ów jest z będnych w twoim kodzie np.
zamiast:
$con = http://www.php.net/mysql_connect("localhost", "user", "pass"); if (!$con) { http://www.php.net/die('Nie mozna połączyć:' . http://www.php.net/mysql_error()); }
$con = http://www.php.net/mysql_connect("localhost", "user", "pass") or http://www.php.net/die ('Nie mozna połączyć:' . http://www.php.net/mysql_error());
To jest polecenie do bazy danych, przecież tego nie wyświetlasz.Jak już chcesz mieć znaki podziału z textarea to powinno być:
$sql = "INSERT INTO tabela SET id='null', arty=".http://www.php.net/nl2br($_POST['add']);
MSPM5 - niah, bulwersik?
Jeśli już coś robisz, to rób to dobrze, albo wcale. 5 minut na kolanie nie wystarczy. Moja odpowiedź była adekwatna do tego o co pytałeś. Nie poprawiłeś błędów o które już Ci ktoś wyżej wspomniał, zbudowałeś warunki które w ogóle nie mają sensu.
Przeczytaj pierw jakiś kurs (http://pl.wikibooks.org/wiki/PHP), poznaj zasady działania PHP, a następnie przemyśl to jak Twój skrypt powinien działać.
Do czego Ci te pole ukryte i pusta wartość name? Sprwdź też typ danych, utwórz połączenie wtedy gdy warunki zostną spełnione, tak samo z zakończeniem.
Mowilem o Perl6 ,ze jest martwy moim zdaniem nic sie nie dzieje wszyscy dalej siedza w 5.10 ogolnie perl zostal zepchniety z web przez PHP a do aplikacji okienkowych sa lepsze narzedzia. Teraz jest niezastapiony w pracy administratora generowanie statystyk, automatyzacja itd Perl nie jest martwy ale nie jest modny bo to jak napisal Niktoś magiel i czarna magia.
Ja próbowałem uruchomić perla poprzez fastCGI na IIS zajęło mi to dwa dni aby pojawił się napis is work na białej stronie.Dwa dni mi to zajęło, gdyż błędy wyświetlenia tylko napisów było spowodowane tym, że brakowało mi szeregu modułów, które musiałem ręcznie doinstalowywać w CPAN'ie -wybacz ale to tylko napisy, więc takie coś chyba powinno być obsługiwane standardowo przy instalacji perla. No właśnie skusiłem się na perla bo o statystyki mi chodziło, a wyszukałem sobie programik godny uwagi -cholewcia wie ile modułów musiałbym zainstalować aby go uruchomić,więc sobie darowałem.
Godnym zainteresowania w tym języku programowania jest studio programistyczne ActivePearl -niestety o dziwo płatne, zważywszy ,że tacy potentaci jak Microsoft, Java Microsystem, PHP i jego frameworki udostępniają swoje platformy za darmo.
Dlatego ten język(perl) jak i flash pójdą w zapomnienie gdyż są płatne.
MSP.... Autorze tematu. Pisałem CI, żebyś nl2br użył tylko na zmiennej add, wtedy nikt się do tego nie przyczepi
Co do filtrowania zmiennych - jest to wystarczające filtrowanie.
$sql = "INSERT INTO tabela SET id='null', arty=".http://www.php.net/nl2br($_POST['add']);
JA tam błędu nie widzę... ale na kij filtrujesz zmienną $add, ja potem dodajesz do bazy i tak $_POST['add']
To zapodaj te błędy
Jak robisz takie coś :
$add = $_POST['add']; $add - filtruj($add); $query = "INSERT INTO ...." . $_POST['add'];
Wrzcam caly kod bo zrobil sie balagan
Tresc bledu: Parse error: syntax error, unexpected ')' in /virtual/****/admin.php on line 10
<!DOCTYPE html><html lang="pl"> <head><title>****</title><meta charset="ISO-8859-2"></head> <body background="black" bgproperties="fixed"> <style type="text/css"> body {background-color:black;color:white;} </style> <center> <h1> <?php if(http://www.php.net/isset($_POST['submit'])&& $_POST['add'])){ $add = http://www.php.net/trim(http://www.php.net/addslashes(http://www.php.net/htmlspecialchars($_POST['add']))); $con = http://www.php.net/mysql_connect("localhost", "user", "pass") or http://www.php.net/die ('Nie mozna połączyć:' . http://www.php.net/mysql_error()); http://www.php.net/mysql_select_db("baza",$con); $sql = "INSERT INTO tabela SET id='null', arty=".http://www.php.net/nl2br($_POST['add']); if(!http://www.php.net/mysql_query($sql,$con)) { http://www.php.net/die('Bład:' . http://www.php.net/mysql_error()); } http://www.php.net/echo "Dodany"; } ?> <form action="admin.php" method="POST"> <textarea rows="10" cols="30" name="add"></textarea><br> <input type="submit" value="Dodaj" name="submit"> </form></h1>
W 10 lini za dużo o jedno zamknięcie nawiasu
tak wiem juz to poprawilem ale ma inne bledy jeszcze
wpisuje jeden wyraz i wyskakuje
Bład:Unknown column 'lol' in 'field list'
wpisuje 2 wyrazy i wywala
Bład:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2' at line 1
Żebyś się nie męczył:
<?php if((http://www.php.net/isset($_POST['submit']))&&(!http://www.php.net/empty($_POST['add']))){ $add = http://www.php.net/trim(http://www.php.net/addslashes(http://www.php.net/htmlspecialchars(http://www.php.net/nl2br($_POST['add'])))); $con = http://www.php.net/mysql_connect("localhost", "user", "pass") or http://www.php.net/die ('Nie mozna połączyć:' . http://www.php.net/mysql_error()); http://www.php.net/mysql_select_db("baza",$con); $sql =http://www.php.net/mysql_query("INSERT INTO tabela SET id='null', arty='$add'",$con) or http://www.php.net/die('Bład:' . http://www.php.net/mysql_error()); http://www.php.net/echo "Dodany"; } ?>
zmienilem ta linijke
$sql = "INSERT INTO tabela SET id='null', arty=".http://www.php.net/nl2br($_POST['add']);
$sql = http://www.php.net/nl2br("INSERT INTO tabela SET id='null', arty='$add'");
Wydaje mi się że brakuje apostrofów. Spróbuj czegoś takiego:
$sql = "INSERT INTO tabela SET id='null', arty='".http://www.php.net/nl2br($_POST['add'])."'";
Wyświetl sobie treść zapytania SQL (u Ciebie w zmiennej $sql). Z nami też możesz się podzielić
Teraz dziala.
$sql = "INSERT INTO tabela SET id='null', arty='".http://www.php.net/nl2br($_POST['add'])."'";
INSERT INTO tabela SET id='null', arty='dupa'Dodany
INSERT INTO tabela SET id='null', arty=dopa2Bład:Unknown column 'dopa2' in 'field list'
$sql = http://www.php.net/mysql_query("INSERT INTO tabela SET id='null', arty='".http://www.php.net/nl2br($_POST['add'])."'",$con) or http://www.php.net/die('Bład:' . http://www.php.net/mysql_error());
<?php if((http://www.php.net/isset($_POST['submit']))&&(!http://www.php.net/empty($_POST['add']))){ $add = http://www.php.net/trim(http://www.php.net/addslashes(http://www.php.net/htmlspecialchars($_POST['add']))); $con = http://www.php.net/mysql_connect("localhost", "user", "pass") or http://www.php.net/die ('Nie mozna połączyć:' . http://www.php.net/mysql_error()); http://www.php.net/mysql_select_db("baza",$con); $sql = http://www.php.net/mysql_query("INSERT INTO tabela SET id='null', arty='".http://www.php.net/nl2br($_POST['add'])."'",$con) or http://www.php.net/die('Bład:' . http://www.php.net/mysql_error()); http://www.php.net/echo "Dodany"; } ?> <form action="admin.php" method="POST"> <textarea rows="10" cols="30" name="add"></textarea><br> <input type="submit" value="Dodaj" name="submit"> </form></h1>
Nadal jest ten błąd o którym pisałem. $add jest przefiltrowana prawidłowo, a $_POST['add'] nie jest przefiltrowana. Powineneś dodać $add do bazy.
chodzi Ci o ta linie
$sql = mysql_query("INSERT INTO tabela SET id='null', arty='".nl2br($_POST['add'])."'",$con) or die('Bład:' . mysql_error());
tak
O to chodzi ? http://gettype
Wszytko co powinno Cie interesować z is_* w tym przypadku (art) http://php.net/is_string jak spełniają warunek, przesyłasz, jak nie http://php.net/unset ale to już inna bajka, są też inne opcje, ale to już byś musiał określić co chcesz wprowadzać do bazy.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)