Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V   1 2 3 >  
Reply to this topicStart new topic
> [PHP][MySQL] Bład w kodzie
MSPM5
post 25.09.2012, 00:45:24
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 25.09.2012

Ostrzeżenie: (0%)
-----


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.
Kod
<?php
$con = mysql_connect("localhost", "user", "pass");
if (!$con)
{
   die('Nie mozna połączyć:' . mysql_error());
}
mysql_select_db("baza",$con);
$add = $_POST['add'];
$sql = nl2br("INSERT INTO tabela SET id='null', arty='$add'");
if(!mysql_query($sql,$con))
{
   die('Bład: ' . mysql_error());
}
   echo "Dodany";
mysql_close($con);
?>
<form action="admin.php" method="POST">
   <textarea rows="10" cols="30" name="add"></textarea><br>
   <input type="submit" value="Dodaj">
</form>

Go to the top of the page
+Quote Post
Damonsson
post 25.09.2012, 01:21:28
Post #2





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Musisz jakoś (if isset POST) sprawdzić, czy został kliknięty przycisk i dopiero wtedy wewnątrz tej zależności wysyłać zapytanie MySQL.
Go to the top of the page
+Quote Post
MSPM5
post 25.09.2012, 12:33:40
Post #3





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 25.09.2012

Ostrzeżenie: (0%)
-----


Też tak myślałem ale to nie działa...

Kod
<?php
if (isset($_POST['add'])){
   $add = $_POST['add'];    
}
$con = mysql_connect("localhost", "user", "pass");
if (!$con)
{
   die('Nie mozna połączyć:' . mysql_error());
}
mysql_select_db("baza",$con);
$sql = nl2br("INSERT INTO tabela SET id='null', arty='$add'");
if(!mysql_query($sql,$con))
{
   die('Bład: ' . mysql_error());
}
   echo "Dodany";
mysql_close($con);
?>
<form action="admin.php" method="POST">
   <textarea rows="10" cols="30" name="add"></textarea><br>
   <input type="submit" value="Dodaj">
</form>
Go to the top of the page
+Quote Post
nospor
post 25.09.2012, 12:36:24
Post #4





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




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 wink.gif
Temat: Jak poprawnie zatytulowac watek


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
prz3kus
post 25.09.2012, 12:42:26
Post #5





Grupa: Zarejestrowani
Postów: 260
Pomógł: 30
Dołączył: 22.01.2007

Ostrzeżenie: (0%)
-----


Prosty if i cieszy smile.gif
  1. <?php
  2.  
  3. if($_POST['add'])
  4. {
  5. $add = $_POST['add'];
  6. $con = mysql_connect("localhost", "user", "pass");
  7. if (!$con)
  8. {
  9. die('Nie mozna połączyć:' . mysql_error());
  10. }
  11. mysql_select_db("baza",$con);
  12. $sql = nl2br("INSERT INTO tabela SET id='null', arty='$add'");
  13. if(!mysql_query($sql,$con))
  14. {
  15. die('Bład: ' . mysql_error());
  16. }
  17. echo "Dodany";
  18. $_POST['add'] = null;
  19. }
  20. ?>
  21. <form action="admin.php" method="POST">
  22. <textarea rows="10" cols="30" name="add"></textarea><br>
  23. <input type="submit" value="Dodaj">
  24. </form>
Go to the top of the page
+Quote Post
MSPM5
post 25.09.2012, 13:10:43
Post #6





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 25.09.2012

Ostrzeżenie: (0%)
-----


Dzięki prz3kus teraz działa.
Go to the top of the page
+Quote Post
!*!
post 25.09.2012, 13:14:04
Post #7





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
MSPM5
post 25.09.2012, 21:49:18
Post #8





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 25.09.2012

Ostrzeżenie: (0%)
-----


  1. <?php
  2. if(isset($_POST['add'])){
  3. $add = addslashes(htmlspecialchars($_POST['add']));
  4. }
  5. if($_POST['add']){
  6. $add = $_POST['add'];
  7. $con = mysql_connect("localhost", "user", "root");
  8. if (!$con)
  9. {
  10. die('Nie mozna połączyć:' . mysql_error());
  11. }
  12. mysql_select_db("baza",$con);
  13. $sql = nl2br("INSERT INTO tabela SET id='null', arty='$add'");
  14. if(!mysql_query($sql,$con))
  15. {
  16. die('Bład: ' . mysql_error());
  17. }
  18. echo "Dodany";
  19. $_POST['add'] = null;
  20. }
  21. ?>
Go to the top of the page
+Quote Post
peter13135
post 25.09.2012, 21:55:57
Post #9





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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.

Ten post edytował peter13135 25.09.2012, 21:56:49


--------------------
:)
Go to the top of the page
+Quote Post
MSPM5
post 25.09.2012, 23:02:03
Post #10





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 25.09.2012

Ostrzeżenie: (0%)
-----


Poprawione.

  1. <?php
  2. if(isset($_POST['add']))
  3. {
  4. $add = addslashes(htmlspecialchars($_POST['add']));
  5. $con = mysql_connect("localhost", "user", "pass");
  6. if (!$con)
  7. {
  8. die('Nie mozna połączyć:' . mysql_error());
  9. }
  10. mysql_select_db("baza",$con);
  11. $sql = nl2br("INSERT INTO tabela SET id='null', arty='$add'");
  12. if(!mysql_query($sql,$con))
  13. {
  14. die('Bład: ' . mysql_error());
  15. }
  16. echo "Dodany";
  17. $_POST['add'] = null;
  18. }
  19. ?>
Go to the top of the page
+Quote Post
peter13135
post 25.09.2012, 23:21:34
Post #11





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


1. nl2br - wiesz co robi ta funkcja ?
2. po co robisz to : $_POST['add'] = null; ?
3. zauważ, że gdy warunek
  1. if(isset($_POST['add']))
nie jest spełniony, Twój kod wykonuje tą instrukcję :
ale nie wykonuje tej instrukcji :
  1. $con = mysql_connect("localhost", "user", "pass");


--------------------
:)
Go to the top of the page
+Quote Post
MSPM5
post 25.09.2012, 23:37:35
Post #12





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 25.09.2012

Ostrzeżenie: (0%)
-----


Cytat
1. nl2br - wiesz co robi ta funkcja ?

Dodaje mi <br /> po naciśnięciu enter.
Cytat
2. po co robisz to : $_POST['add'] = null; ?

Zapomniałem to wywalić późno jest ;D.
Cytat
3.

Hmm nie rozumiem dla czego to jest źle...Jeżeli nic nie dodaje chyba niema potrzeby łączyć sie z bazą questionmark.gif

Ten post edytował MSPM5 25.09.2012, 23:38:29
Go to the top of the page
+Quote Post
peter13135
post 25.09.2012, 23:44:22
Post #13





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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ś.

Ten post edytował peter13135 25.09.2012, 23:45:50


--------------------
:)
Go to the top of the page
+Quote Post
MSPM5
post 26.09.2012, 00:12:04
Post #14





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 25.09.2012

Ostrzeżenie: (0%)
-----


Cytat
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ś.

Chyba zaczynam rozumieć oczywiście moja pomyłka wziąłem to
za to


Zastanawiam się jeszcze czy takie filtrowanie jest wystarczające...

  1. <?php
  2. if(isset($_POST['add'])){
  3. $add = addslashes(htmlspecialchars($_POST['add']));
  4. $con = mysql_connect("localhost", "user", "pass");
  5. if (!$con)
  6. {
  7. die('Nie mozna połączyć:' . mysql_error());
  8. }
  9. mysql_select_db("baza",$con);
  10. $sql = "INSERT INTO tabela SET id='null', arty='$add'";
  11. if(!mysql_query($sql,$con))
  12. {
  13. die('Bład:' . mysql_error());
  14. }
  15. echo "Dodany";
  16. }
  17. ?>


Ten post edytował MSPM5 26.09.2012, 00:28:40
Go to the top of the page
+Quote Post
!*!
post 26.09.2012, 07:40:07
Post #15





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Powiedzmy. Sprawdź jeszcze na tej samej zasadzie czy formularz został wysłany, input/button musi mieć name. Zainteresuj się PDO zamiast mysql_* bo za jakiś czas wylecą z PHP. Aha no i teraz nie kończysz połączenia. dodaj też trim()

Ten post edytował !*! 26.09.2012, 07:41:10


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
MSPM5
post 26.09.2012, 13:58:18
Post #16





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 25.09.2012

Ostrzeżenie: (0%)
-----


  1. <?php
  2. if(isset($_POST['submit'])&& $_POST['add'] or mysql_close($con)){
  3. $add = trim(addslashes(htmlspecialchars($_POST['add'])));
  4. $con = mysql_connect("localhost", "user", "pass");
  5. if (!$con)
  6. {
  7. die('Nie mozna połączyć:' . mysql_error());
  8. }
  9. mysql_select_db("baza",$con);
  10. $sql = nl2br("INSERT INTO tabela SET id='null', arty='$add'");
  11. if(!mysql_query($sql,$con))
  12. {
  13. die('Bład:' . mysql_error());
  14. }
  15. echo "Dodany";
  16. }
  17. ?>
  18. <form action="admin.php" method="POST">
  19. <textarea rows="10" cols="30" name="add"></textarea><br>
  20. <input type="submit" value="Dodaj" name="">
  21. <input type='hidden' name='submit' />
  22. </form>

Cytat
Zainteresuj się PDO zamiast mysql_* bo za jakiś czas wylecą z PHP.

Juz mieli takie pomysły w perl6 żeby ułatwić prace i ten język jest martwy ludzie nie lubią zmian więc nigdy nie wiadomo smile.gif

Ten post edytował MSPM5 26.09.2012, 14:00:26
Go to the top of the page
+Quote Post
!*!
post 26.09.2012, 15:01:31
Post #17





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


W ogóle nie znasz podstaw PHP i zasad działania funkcji.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
MSPM5
post 26.09.2012, 15:42:35
Post #18





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 25.09.2012

Ostrzeżenie: (0%)
-----


Cytat
W ogóle nie znasz podstaw PHP i zasad działania funkcji.

W PHP bawie sie 3 dzień wiec sie zgodze, natomiast ty masz 6 lat doświadczenia na forum i wciąż masz problem z czytaniem ze zrozumieniem. Pytanie
Cytat
Zastanawiam się jeszcze czy takie filtrowanie jest wystarczające...

Twoja odpowiedź
Cytat
Powiedzmy.
niepotrzebny tekst który otwiera nowy temat o którym nie mam pojęcia po 3 dniach nauki
Cytat
Sprawdź jeszcze na tej samej zasadzie czy formularz został wysłany, input/button musi mieć name. Zainteresuj się PDO zamiast mysql_* bo za jakiś czas wylecą z PHP. Aha no i teraz nie kończysz połączenia. dodaj też trim()
później wstawiam kod zrobiony w 5min na kolanie i twoja odpowiedź
Cytat
W ogóle nie znasz podstaw PHP i zasad działania funkcji.
nabijaj posty dalej dobiesz do 3k przed końcem swiata pozdro wink.gif.
Go to the top of the page
+Quote Post
Niktoś
post 26.09.2012, 15:58:10
Post #19





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


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:
  1. $con = mysql_connect("localhost", "user", "pass");
  2. if (!$con)
  3. {
  4. die('Nie mozna połączyć:' . mysql_error());
  5. }


można użyć:
  1. $con = mysql_connect("localhost", "user", "pass") or die ('Nie mozna połączyć:' . mysql_error());

Cytat
$sql = nl2br("INSERT INTO tabela SET id='null', arty='$add'");

W ogóle te nl2br do niczego nie jest tam potrzebne-wywal to wraz z nawiasami-to ma być zwykły string.

Ten post edytował Niktoś 26.09.2012, 16:00:34
Go to the top of the page
+Quote Post
MSPM5
post 26.09.2012, 16:17:26
Post #20





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 25.09.2012

Ostrzeżenie: (0%)
-----


Cytat
W ogóle te nl2br do niczego nie jest tam potrzebne-wywal to wraz z nawiasami-to ma być zwykły string.

Dodaje mi <br /> po naciśnięciu enter.
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.04.2024 - 11:58