Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]
Forum PHP.pl > Forum > Przedszkole
pjachim
Witam,
Na początek powiem że jestem nowicjuszem jeśli chodzi o PHP i się dopiero uczę. Napotkałem jeden problem podczas tworzenia formularzy i łączenia się z baza którego niestety nie moge obejść.
Może Wasze oko dostrzeże błąd, który popełniam. Generalnie wydaje mi się że jest wszystko ok. Nie wiem dlaczego nie działa skrypt dodawania do bazy MySQL. Po wpisaniu danych w formularzu pojawia mi się następna strona skryptu, ale pusta bez żadnych wyników i do bazy nic się nie dodaje. Nie mam nawet błędu, żeby określić co jest nie tak.

Kod tworzenia bazy:
Kod
   <?
  
   $baza = "zwierzak";
   $connection = mysql_connect("localhost", "root", "")
   or die("polaczenie z baza danych nie powiodlo sie");
  
  
   $test = mysql_select_db($baza, $connection );
   if ($test) {
       echo "nie utworzono bazy, poniewaz baza $baza juz istnieje";
   }
   else {
   $tworzenie = "CREATE DATABASE $baza";
  
   $rezultat = mysql_query($tworzenie, $connection)
   or di("nie udalo sie utworzyc bazy danych");
   echo "baza $baza zostala utworzona";
   mysql_close($connection);    
   }
   ?>



Następnie utworzyłem Tabele:

Kod
<?
  
   $baza = "zwierzak";
   $tabela = "koty";
   $connection = mysql_connect("localhost", "root", "");
  
   $sprawdzenie1 = mysql_select_db($baza, $connection )
   or die("wybor bazy danych zakonczony niepowodzeniem");
  
   $pomocnicza = mysql_query("SHOW TABLE STATUS LIKE '$tabela'")
   or die(mysql_error());
   $sprawdzenie2= mysql_num_rows($pomocnicza) == 1;
   if ($sprawdzenie2){
   echo "nie utworzono tabeli, poniewaz tabela $tabela juz istnieje";
   }
   else {
   $tworzenie = "CREATE TABLE $tabela (
   `numer` INT NOT NULL AUTO_INCREMENT,
   `nazwa` TEXT NOT NULL ,
   `rasa` TEXT NOT NULL ,
   `wiek` TEXT NOT NULL ,
   `plec` TEXT NOT NULL ,
   `kolor` TEXT NOT NULL ,
   PRIMARY KEY ( `numer` )
   ) ENGINE = MYISAM";
   $rezultat = mysql_query($tworzenie, $connection);
   if ($rezultat){
   echo "tabela <b>$tabela</b>, zostala utworzona";
   }    
   }
  
   ?>


Formularz:

Kod
<?

echo'
<B>Wprowadz dane</B>

<FORM NAME="" ACTION="dodaj_dane.php" METHOD="POST">
Nazwa:<BR><INPUT TYPE="text" NAME="nazwa" VALUE=""><BR>
Rasa:<BR><INPUT TYPE="text" NAME="rasa" VALUE=""><BR>
Wiek:<BR><INPUT TYPE="text" NAME="wiek" VALUE=""><BR>
Plec:<BR><INPUT TYPE="text" NAME="plec" VALUE=""><BR>
Kolor:<BR><INPUT TYPE="text" NAME="kolor" VALUE=""><BR>

<INPUT TYPE="submit" VALUE="Dodaj kota">
</FORM>
';
?>


Skrypt dodający do bazy dane.

Kod
<?

$baza = "zwierzak";
$tabela = "koty";
$connection = mysql_connect("localhost", "root", "");
$wybierz = mysql_select_db($baza, $connection)
or die("wybor bazy zakonczyl się niepowodzeniem");

$wstaw = "INSERT INTO $tabela ( `numer` ,`nazwa` , `rasa` , `wiek` , `plec`, 'kolor' )
VALUES (
NULL, '$_POST[nazwa]', '$_POST[rasa]', '$_POST[wiek]', '$_POST[plec]','$_POST[kolor]'
)";



$rezultat = mysql_query($wstaw, $connection);

if ($rezultat) {
echo "<h2>Do tabeli zostaly dodane nastepujace dane:</h2>

<b>Nazwa:</b>&nbsp;<i>$_POST[nazwa]</i>

<b>Rasa:</b>&nbsp;<i>$_POST[rasa]</i>

<b>Wiek:</b>&nbsp;<i>$_POST[wiek]</i>

<b>Plec:</b>&nbsp;<i>$_POST[plec]</i>

<b>Kolor:</b>&nbsp;<i>$_POST[kolor]</i>

";
}
?>



Kod PHP nie jest mój (jak wspomniałem dopiero się uczę). Pierwowzór działa. Zmiany jakie dokonałem to dodałem 2 atrybuty do tabeli i zmieniłem nazwy. Jak zmieniam tylko nazwy atrybutów bez dodawania to jest wszystko ok więc tutaj musi być problem.Niestety ja go nie dostrzegam. Proszę o pomoc.
ziqzaq
Czyżby brak apostrofów?
  1. <?php
  2. $_POST[nazwa]; // Zle
  3. $_POST['nazwa']; // Dobrze
  4.  
  5. // I jeszcze przyklad jak napisac zapytanie:
  6. $sql = "insert into `tabela` (`kolumna`,`kolumna2`) values ('".$_POST['raz']."','".$_POST['dwa']."')";
  7. ?>

Dodatkowo możesz sobie wyświetlać błędy mysql:
  1. <?php
  2. // ...
  3. $rezultat = mysql_query($wstaw, $connection);
  4. if ($rezultat) {
  5.    // ...
  6. }
  7. ?>
pjachim
Dzięki za opowiedz. Wyświetliłem błąd MySql. Widzę że jest problem z zapisem do bazy.
Nie wiem czy to jest problem apostrofów. Wydaje mi się że nie tutaj jest problem.
Przedstawię skrypt przed moją modyfikacją i który działa. Można będzie porównać. Jedyną zmiana jaką zrobiłem to dodałem atrybuty do tabeli tylko że na swojej bazie.
Pomijam skrypt tworzenia bazy.


TABELA:

Kod
<?

$baza = "test";
$tabela = "testowa";
$connection = mysql_connect("localhost", "root", "");

$sprawdzenie1 = mysql_select_db($baza, $connection )
or die("wybor bazy danych zakonczony niepowodzeniem");

$pomocnicza = mysql_query("SHOW TABLE STATUS LIKE '$tabela'")
or die(mysql_error());
$sprawdzenie2= mysql_num_rows($pomocnicza) == 1;
if ($sprawdzenie2){
echo "nie utworzono tabeli, poniewaz tabela $tabela juz istnieje";
}
else {
$tworzenie = "CREATE TABLE $tabela (
`numer` INT NOT NULL AUTO_INCREMENT,
`imie` TEXT NOT NULL ,
`nazwisko` TEXT NOT NULL ,
`ulica` TEXT NOT NULL ,
`miasto` TEXT NOT NULL ,
PRIMARY KEY ( `numer` )
) ENGINE = MYISAM";
$rezultat = mysql_query($tworzenie, $connection);
if ($rezultat){
echo "tabela <b>$tabela</b>, zostala utworzona";
}    
}
?>


Formularz:

Kod
<?
// formularz do wprowadzania nowych danych do bazy,  w tym wypadku rejestracjanowego uzytkownika
echo'
<B>Wprowadz dane</B>

<FORM NAME="" ACTION="dodaj_dane.php" METHOD="POST">
Nazwisko:<BR><INPUT TYPE="text" NAME="imie" VALUE=""><BR>
Imie:<BR><INPUT TYPE="text" NAME="nazwisko" VALUE=""><BR>
Ulica:<BR><INPUT TYPE="text" NAME="ulica" VALUE=""><BR>
Miasto:<BR><INPUT TYPE="text" NAME="miasto" VALUE=""><BR>


<INPUT TYPE="submit" VALUE="Dodaj dane">
</FORM>
';
?>



Skrypt dodający do bazy(działający):


Kod
<?

$baza = "test";
$tabela = "testowa";
$connection = mysql_connect("localhost", "root", "");
$wybierz = mysql_select_db($baza, $connection)
or die("wybor bazy zakonczyl się niepowodzeniem");

$wstaw = "INSERT INTO $tabela ( `numer` ,`imie` , `nazwisko` , `ulica` , `miasto` )
VALUES (
NULL, '$_POST[imie]', '$_POST[nazwisko]', '$_POST[ulica]', '$_POST[miasto]'
)";

$rezultat = mysql_query($wstaw, $connection);

if ($rezultat) { //i wyswietlamy rezultaty
echo "<h2>Do tabeli zostaly dodane nastepujace dane:</h2><br>
<b>Nazwisko:</b>&nbsp;<i>$_POST[nazwisko]</i><br>
<b>Imie:</b>&nbsp;<i>$_POST[imie]</i><br>
<b>Ulica:</b>&nbsp;<i>$_POST[ulica]</i><br>
<b>Miasto:</b>&nbsp;<i>$_POST[miasto]</i><br>
";
}
ziqzaq
Cytat
Nie wiem czy to jest problem apostrofów. Wydaje mi się że nie tutaj jest problem.

A sprawdziłeś czy ci się tylko "wydaje"? dry.gif
Po to ktoś daje ci rady żebyś się do nich stosował i sam coś zrobił.
Kombinuj z tym zapytaniem (zmiennymi w zapytaniu) skoro masz je błędne.
Zrób:
  1. <?php
  2. $wstaw = "INSERT INTO $tabela ( `numer` ,`nazwa` , `rasa` , `wiek` , `plec`, 'kolor' )
  3. VALUES (
  4. NULL, '$_POST[nazwa]', '$_POST[rasa]', '$_POST[wiek]', '$_POST[plec]','$_POST[kolor]'
  5. )";
  6.  
  7. echo $wstaw;
  8. ?>

i zobacz czy zapytanie jest poprawne.

Cytat
Wyświetliłem błąd MySql.

Jaki błąd? Nie widzę go. dry.gif

Edit:
Teraz zauważyłem błąd w twoim zapytaniu.
Daję głowę że dostałeś coś takiego:
Cytat
#1064 - 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 ''kolor') values (...)' at line 1

wyciągnij wnioski co jest nie tak i gdzie jest nie tak (masz to jak byk wypisane). I to ' (apostrof) nie równa się temu `(gravis).
erix
~pjachim, podaj sensowny tytuł tematu opisujący problem i używaj odpowiedniego bbcode.

Inaczej zamknę.
pjachim
Dzięki ziqzaq. To był problem z gravisami. Przeklepałem jeszcze raz kod i śmiga. Zamykam temat.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.