Wątek przeniesiony 2014-12-13 15:41 z PHP przez dzek69.

Mój plugin do wordpressa nie zapisuje nowych danych do bazy, odczyt ok

0

Witam.

Nie wiem w czym dokładnie jest problem, tworzę nową wtyczke do wordpressa i chcę aby dane z formularza zostały zapisane w bazie.

Kod:

<form action="dodaj_do_bazy()" method="POST">

<INPUT TYPE = "Text" VALUE ="Napis 1" NAME = "napis1"/>
<INPUT TYPE = "Text" VALUE ="Napis 2" NAME = "napis2"/>
<INPUT TYPE = "Text" VALUE ="Napis 3" NAME = "napis3"/>
<INPUT TYPE = "Text" VALUE ="Napis 4" NAME = "napis4"/>
<INPUT TYPE = "Text" VALUE ="Napis 5" NAME = "napis5"/>
<INPUT TYPE = "Text" VALUE ="Link obrazka 1920X599" NAME = "obrazek"/>
<INPUT TYPE = "Text" VALUE ="Numer (1-4)" NAME = "munerek"/>
<INPUT TYPE = "Button" VALUE ="Dodaj" NAME = "dodaj"/>

</form>

To formularz. I z niego po kliknięciu ma się wywołać funkcja dodaj_do_bazy() z tego samego pliku.

Funkcja wygląda następująco:

function dodaj_do_bazy(){

global $wpdb; 
$napis1 = $_POST['napis1'];
$napis2 = $_POST['napis2'];
$napis3 = $_POST['napis3'];
$napis4 = $_POST['napis4'];
$napis5 = $_POST['napis5'];
$obrazek = $_POST['obrazek'];
$numer = $_POST['numerek'];
$a = (int) $numer;
$zapytanie = "INSERT INTO wp_slider ('id', 's1n1', 's1n2', 's1n3', 's1n4', 's1n5', 's1o', 'numer')  VALUES (DEFAULT,'$napis1' , '$napis2','$napis3','$napis4','$napis5','$obrazek','$a') ";
$wpdb->query($zapytanie);
}

Wordpressa mam zainstalowanego u siebie na komputerze. To pierwsza moja wtyczka i nie wiem gdzie jest błąd. Baza danych ma nazwę wp_slider.

odczytanie z bazy działa mi

Kod:

<tbody>
<?php 

global $wpdb;  

$mytestdrafts = $wpdb->get_results(
"
SELECT s1n1,s1n2,s1n3,s1n4,s1n5,s1o,numer FROM wp_slider 
"
);
?>

<?php 
foreach($mytestdrafts as $mytestdraft)
{
?>
<tr>
<?php
 echo "<td>".$mytestdraft->s1n1."</td>";
 echo "<td>".$mytestdraft->s1n2."</td>";
 echo "<td>".$mytestdraft->s1n3."</td>";
 echo "<td>".$mytestdraft->s1n4."</td>";
 echo "<td>".$mytestdraft->s1n5."</td>";
 echo "<td>".$mytestdraft->s1o."</td>";
 echo "<td>".$mytestdraft->numer."</td>";
?>
</tr>
<?php 
}
?>

</tbody>

No i nie dodaje do bazy.

0

Dziura, dziura, dziura.
Czy wy wszyscy naprawdę czytacie tylko pierwszą podstronę kursu MySQL+PHP, czy skąd czerpiecie swoją wiedzę?
KAŻDY nowy na forum robi ten sam błąd i robi SQL Injection - a w sumie nawet nie trzeba czytać tutoriali, by logiką zauważyć, że potencjalnie coś tu jest nie tak.

A żeby dowiedzieć się czemu nie działa zaczął bym od analizy tego, co zwraca metoda query();

0

no zapytanie wysyła do bazy chyba. Jak pisałem pierwszy raz robię wtyczkę do wordpressa, w php jeszcze nic nie programowałem, tylko c++, java, c#. I tak to co już zrobiłem to dużo (nie będę pisał co ale sporo tego) tylko tą wtyczkę muszę zrobić koniecznie, bo chce się tego nauczyć. Szukam wszędzie wiadomości i dalej nie wiem, coś z zapytaniem? czy w ogóle mi z tych pól tekstowych nie czyta? Wiem pewnie ktoś to czyta i myśli co za de*il, ale jak byś pierwszy raz robił jakiś projekt w czymś czego nie umiesz to wiesz. Nie chce oglądać po kolei tutoriali i szukać w nich informacji które potrzebuje bo to zajmie sporo czasu. Chcę sie dowiedzieć konkretnych rzeczy i dlatego tu napisałem. Mam nadzieję, że ktoś pomoże.

Nie wchodzi mi do tej funkcji dodaj_do_bazy(). Bo dałem alerta w funkcji i go nie wywołało. Ktoś wie jak poprawić?

`dodanie znacznika ``` - @furious programming

0

dobra idiota ze mnie zmieniłem type="button" na type="submit" ale to też nie rozwiazało problemu bo przekierowuje mnie do takiego linku http://127.0.0.1:8080/wordpress/wordpress/wp-admin/dodaj_do_bazy()
I dalej nie dodaje funkcja jest w tym samym pliku co <form>
Mam utworzyć nowy plik .php i tam dać moją funkcję? Bo chciałem z tego samego pliku żeby dodało.

`dodanie znaczników ``` - @furious programming

0

Hmm..
Wpisałeś w action dodaj_do_bazy(), więc przekierowuje cię do http://127.0.0.1:8080/wordpress/wordpress/wp-admin/dodaj_do_bazy(). Nigdy nie tworzyłem pluginów do Wordpressa, ale może zadziała. Zostaw action puste action="". I zamiast funkcji użyj instrukcji warunkowej if.

if(isset($_POST)) { 
	$napis1 = mysql_real_escape_string($_POST['napis1']);
	$napis2 = mysql_real_escape_string($_POST['napis2']);
	$napis3 = mysql_real_escape_string($_POST['napis3']);
	$napis4 =mysql_real_escape_string($_POST['napis4']);
	$napis5 = mysql_real_escape_string($_POST['napis5']);
	$obrazek = mysql_real_escape_string($_POST['obrazek']);
	$numer = mysql_real_escape_string($_POST['numerek']);
	$a = (int) $numer;
	$zapytanie = "INSERT INTO wp_slider 
		('id', 's1n1', 's1n2', 's1n3', 's1n4', 's1n5', 's1o', 'numer')  VALUES
		(DEFAULT,'$napis1' , '$napis2','$napis3','$napis4','$napis5','$obrazek','$a') ";
	$wpdb->query($zapytanie);
}

dodanie znacznika <code class="php"> - @furious programming

0

Dobra dodaje już tylko ta zmienna ostatnia cały czas jest jako 0;
A musi być numerek z pola moze z rzutowaniem na inta coś źle?

if(isset($_POST)) { 
    $napis1 = mysql_real_escape_string($_POST['napis1']);
    $napis2 = mysql_real_escape_string($_POST['napis2']);
    $napis3 = mysql_real_escape_string($_POST['napis3']);
    $napis4 =mysql_real_escape_string($_POST['napis4']);
    $napis5 = mysql_real_escape_string($_POST['napis5']);
    $obrazek = mysql_real_escape_string($_POST['obrazek']);
    $numer = mysql_real_escape_string($_POST['numerek']);
    $a = (int) $numer;
    $zapytanie = "INSERT INTO wp_slider 
        ('id', 's1n1', 's1n2', 's1n3', 's1n4', 's1n5', 's1o', 'numer')  VALUES
        (DEFAULT,'$napis1' , '$napis2','$napis3','$napis4','$napis5','$obrazek','$a') ";
    $wpdb->query($zapytanie);
}

A i jeszcze jest jeden bład przy wejściu w plugin dodaje rekord z wartosciami null.

0

To sprawdź przed dodaniem czy przesyłane wartości nie są nullami albo jeszcze lepiej sprawdź czy został przesłany formularz.

if(isset($_POST['nazwa_submita'])){}
0

Dobra wszystko działa ładnie pięknie, dzięki wielkie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1