Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php/SQL] Błędna infoormacja skryptu
free
post 17.08.2006, 15:07:35
Post #1





Grupa: Zarejestrowani
Postów: 269
Pomógł: 0
Dołączył: 6.02.2006

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


Oto kod z ktorym walczylem pół dnia.

Formularz wysylania komentarza:
  1. <?
  2. if(isset($_GET['news_id'])){
  3.  $news_id=$_GET['news_id'];
  4. if(!empty($_SESSION['user_id'])){
  5. echo " dodaj komentarz";
  6. echo("
  7. <form action=akcja.php method="post">
  8. <input type=hidden name=news_id value=$news_id>
  9. Tytuł:<input type=text size=25 name=tytul value=tytul><br>
  10. Tresc krótka:<TEXTAREA name=txt COLS=30 ROWS=10>tresc</textarea><br></td></tr>
  11. <input type=submit name="dodaj komentarz" value=wyslij></form>
  12. ");
  13. }
  14. else {
  15. echo 'Dostęp zabroniony.<br><a href="index.php?page=login">Zaloguj (zarejestruj) się, aby dodawać komentarz.</a>';
  16. } }
  17. ?>


Kod odpowiedzialny za przesłanie danych do bazy MySQL
akcja.php --->> to on wyswietla niepoprawna informacje /błą zamiast ok/
  1. <?php
  2. require_once 'http.php';
  3. require("config.php");
  4. $conn=mysql_connect($host,$bazalogin,$bazahaslo);
  5. if(!empty($_SESSION['user_id'])){
  6. $tytul = $_POST['tytul'];
  7. $txt = nl2br($_POST['txt']);
  8.  
  9. if(!$tytul){ echo "Nie wypełniono pola "Tytuł"<br>";exit; }
  10. if(!$txt) { echo "Nie wypełniono pola "Komentarz"";exit; }
  11. else{
  12.  
  13. $sql = "INSERT INTO koment (id, news_id, tytul, txt, ksywa, ip, data)
  14. VALUES ('', '" . $_POST['news_id'] . "', '$tytul', '$txt', '".$_SESSION['ksywa']."' , '127.0.0.1', '2006-07-06' )";
  15. $wykonaj = mysql_query($news);
  16. if($wykonaj){
  17. echo 'ok';
  18. }else{
  19. echo 'blad';}
  20. }
  21.  
  22. }else{
  23. echo '<p>Brak autoryzacji.</p> <a href="index.php">Zaloguj</a>';
  24. }
  25. ?>

Skrypt po długiej walce dodaje poprawnie komentarze, ale zamiast informacji ok z kodu echo 'ok'; wykonuje instrukcje else i wypisuje bład pomimo ze dane są poprawnie przesylane do bazy.

Ten post edytował free 17.08.2006, 15:09:27
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Cysiaczek
post 17.08.2006, 15:12:33
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




  1. <?php
  2. if(mysql_query($news)){
  3. echo 'ok';
  4. }else{
  5. echo 'blad';}
  6. }
  7. ?>


Może tak zadziała.

Ten post edytował Cysiaczek 17.08.2006, 15:12:48


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
free
post 17.08.2006, 18:41:23
Post #3





Grupa: Zarejestrowani
Postów: 269
Pomógł: 0
Dołączył: 6.02.2006

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


Niestety to samo. Zamiast ok pojawia sie błąd, pomimo ze skrypt poprawnie dodaje komentarz do bazy.
Go to the top of the page
+Quote Post
UDAT
post 17.08.2006, 19:23:05
Post #4





Grupa: Zarejestrowani
Postów: 442
Pomógł: 0
Dołączył: 27.12.2005

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


Spróbuj na odwrót, tzn.:
  1. <?php
  2. if(mysql_query($news) == false){
  3. echo 'blad';
  4. }else{
  5. echo 'ok';}
  6. }
  7. ?>


albo użyj mysql_num_rows()" title="Zobacz w manualu php" target="_manual
Go to the top of the page
+Quote Post
dawhol
post 17.08.2006, 19:40:04
Post #5





Grupa: Zarejestrowani
Postów: 256
Pomógł: 0
Dołączył: 19.07.2006
Skąd: Ostrów Wielkopolski

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


gdzie masz zmiennna news ? zdefiniownaa ? bo jak moze ja sprawdzic skoro jej nie ma ? i to tu tkwi bład ;p

zamiast $news w mysql_query powinno byc $sql ;p

Tak to powinno wyglądac ;p
  1. <?php
  2. $sql = "INSERT INTO koment (id, news_id, tytul, txt, ksywa, ip, data)
  3. VALUES ('', '" . $_POST['news_id'] . "', '$tytul', '$txt', '".$_SESSION['ksywa']."' , '127.0.0.1', '2006-07-06' )";
  4. $wykonaj = mysql_query($sql);
  5. if($wykonaj){
  6. ?>


Ten post edytował dawhol 17.08.2006, 19:43:19


--------------------
Go to the top of the page
+Quote Post
free
post 17.08.2006, 19:54:52
Post #6





Grupa: Zarejestrowani
Postów: 269
Pomógł: 0
Dołączył: 6.02.2006

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


Dzieki za zainteresowanie tematem i pomoc.
Skorzystałem z mysql_num_rows() jak napisal UDAT.

Dawhal słuszna uwaga tez zauwazylem to ze nie mam zmiennej $news=...
Dodalem ją ale i tak nie działało poprawnie tzn wyskakiwal "bląd" zamiast "ok"
zobacze jeszcze twoja poprawke dawhol i dam znac czy tez jest dobra.
Poki co poprawilem tak: i działa poprawnie


  1. <?php
  2. $sql = "INSERT INTO koment88 (id, news_id, tytul, txt, ksywa, ip, data)
  3. VALUES ('', '" . $_POST['news_id'] . "', '$tytul', '$txt', '".$_SESSION['ksywa']."' , '127.0.0.1', '2006-07-06' )";
  4.  
  5.  mysql_query($sql)
  6. or die('Nie wysłano komentarza: ' . mysql_error());
  7.  
  8. }
  9. adres('news.php?page='.$_POST['news_id']. '');  }
  10. else
  11. {
  12. echo '<p>Brak autoryzacji.</p> <a href="index.php">Zaloguj</a>';
  13. }
  14. ?>
Go to the top of the page
+Quote Post
dawhol
post 17.08.2006, 19:59:13
Post #7





Grupa: Zarejestrowani
Postów: 256
Pomógł: 0
Dołączył: 19.07.2006
Skąd: Ostrów Wielkopolski

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


Podejrzewam ze wyskakiwał ci błąd ponieważ dwukrotnie wykonywałes zapytanie sql. byc moze to dlatego.

  1. <?php
  2. $wykonaj = mysql_query($sql);
  3. ?>


Wersja w poscie wyzej wydaje sie byc ok na pierwszy zut oka smile.gif a moja wersja działa na 99,9 % bo nie sprawdzałem smile.gif

PS. Moja ksywka dawhol a nie dawhal smile.gif

Ten post edytował dawhol 17.08.2006, 20:00:54


--------------------
Go to the top of the page
+Quote Post
free
post 17.08.2006, 20:07:43
Post #8





Grupa: Zarejestrowani
Postów: 269
Pomógł: 0
Dołączył: 6.02.2006

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


Moim jubileuszowym 100 poście biggrin.gif zgadzam sie z Tobą dawhol.

błąd wyskakiwal bo dwókrotnie sie odwoływalem do zmiennej sql. Dziwi mnie tylko ze skrypt poprawnie wykonywal dodanie danych do bazy.

Najwazniejsze, ze obie wersje działaja poprawnie.
A po dodaniu do Twego kodu mojej funkcji
  1. <?php
  2. adres('news.php?page='.$_POST['news_id']. '');
  3. ?>
przekierunkowuje mnie na strone z danymi komentarzami :-0

Nasuwa mi si epytanie która wersja jest lepsza tzn wydajniejsz. Czy w zasadzie mozna uzywac dowolnie ?

I jeszcze taka uwaga jak zrobic by system poczekal np 3 sek i dopiero przeniosl mnie na strone wywolana z funkcji adres ();

Ten post edytował free 17.08.2006, 20:10:22
Go to the top of the page
+Quote Post
dawhol
post 17.08.2006, 20:16:29
Post #9





Grupa: Zarejestrowani
Postów: 256
Pomógł: 0
Dołączył: 19.07.2006
Skąd: Ostrów Wielkopolski

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


dodawał komenty poniewaz wykonywał pierwsze zapytanie mysql_query smile.gif a gdy chciał wykonac drugie no to ju mu nieszlo a zapytanioe o blad bylo do drugiego dodawania do bazy smile.gif

a co do wydajnośći winksmiley.jpg to nie powiem ci które lepsze winksmiley.jpg kazde ma swoje zalety smile.gif i wady smile.gif

Ale mysle ze to w sumie obojetne smile.gif ja na twoim miejscu dane które sa dodawane obioł bym funkcja addslashes uchroni cie ona przed dodaniem np. kodu html czy php do bazy smile.gif któy mógł by byc grożny dla strony smile.gif

a co do tego czekania to po co to ;p ? jak juz musi byc to chyba najlepiej za pomoca javy smile.gif

Ten post edytował dawhol 17.08.2006, 20:22:46


--------------------
Go to the top of the page
+Quote Post
free
post 18.08.2006, 12:41:22
Post #10





Grupa: Zarejestrowani
Postów: 269
Pomógł: 0
Dołączył: 6.02.2006

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


Zabezpiecze się przed kodem html przy pomocy funkcji htmlspecialchars. Czy addslashes bedzie lepsza ?
Zastanawiam sie jak w prosty sposobmozna ograniczyc niektore komendy html typu <b> <i> <a..> itp
Go to the top of the page
+Quote Post

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: 14.08.2025 - 04:47