Šta je novo?

PHP: Preneti podatke na drugu stranicu radi dalje obrade

shone83

Poštovan
Učlanjen(a)
04.11.2015
Poruke
49
Poena
54
Postavicu uproscen kod (bez sql injection, pdo i slicno) da bi lakse razumeli sta mi treba...

Imam na jednoj stranici pretragu koja prikazuje red iz mysql baze i ona radi i jos jedan submit gde me redirektuje na drugu stranicu, gde bi trebalo da pokupim podatke iz pretrage i dalje da ih obradjujem. Izgleda ovako:

search.php
Kod:
<form action="" method="post">

<label for=""><h4>Insert number</h4></label>
<div>
    <input name="search_number" type="number">
<button name="submit" type="submit" value="Find">Submit</button>
<hr>
</div>

<table>
    <thead>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>LName</th>
            <th>Number</th>
            <th>Street</th>

        </tr>
    </thead>

    <tbody>

    </tbody>


    <?php

if(isset($_POST['search_number'])) {

$number = $_POST['search_number'];

mysqli_set_charset($connection, "utf8");

$query = "SELECT * FROM b_spisak WHERE jmbg = '$number' LIMIT 1";
$search_number_query = mysqli_query($connection, $query);

if(!$search_number_query) {

    die("Query Failed" . mysqli_error($connection));

}

if(mysqli_num_rows($search_number_query) > 0) {

    while($row = mysqli_fetch_assoc($search_number_query)) {

            $b_id = $row['id'];
            $b_name = $row['ime'];
            $b_lname = $row['prezime'];
            $b_number = $row['jmbg'];
            $b_street = $row['ulica'];

            echo "<tr>";
            echo "<td>{$b_id}</td>";
            echo "<td>{$b_name}</td>";
            echo "<td>{$b_lname}</td>";      
            echo "<td>{$b_number}</td>";
            echo "<td>{$b_street}</td>";

        }

    } else {

        echo "Number does not exist!";

    }

} 
    ?>

    </table>
    <button type="submit" name="add" formaction="add.php" >Add</button>
    <hr>

</form>

i to me redirektuje na sledecu stranicu:

add.php
Kod:
<?php 
                                                        
if(isset($_POST['add'])) {
    
    $b_id = $_POST['add'];
    
    $b_name = $_POST['ime'];
    $b_lname = $_POST['prezime'];
    $b_number = $_POST['jmbg'];
    $b_street = $_POST['ulica'];

    
    $query = mysqli_query($connection, "set names utf8");
    $query = "SELECT * FROM b_spisak WHERE id = '$b_id'";
    $add_query = mysqli_query($connection, $query);
    
    if(!$add_query) {
        
        die("QueryFailed" . mysqli_error($connection));
        
    }
    
    while($row = mysqli_fetch_assoc($add_query)) {
        
        $id_b = $row['id'];
        $name_b = $row['ime'];
        $lname_b = $row['prezime'];
        $number_b = $row['jmbg'];
        $street_b = $row['ulica'];
        
    } 
    
}
                                                        
?>
                        
<form action="" method="post">

    <div>
        <div>
            <input type="text" name="name" placeholder="Name" value="<?php echo $name_b; ?>">
        </div>
    </div>

    <div>
        <div>
            <input type="text" name="lname" placeholder="LName" value="<?php echo $lname_b; ?>">
        </div>
    </div>

    <div>
        <div>
            <input type="text" name="jmbg" placeholder="JMBG" value="<?php echo $number_b; ?>">
        </div>
    </div>
    <div>
        <div>
            <input type="text" name="name" placeholder="Name" value="<?php echo $street_b; ?>">
        </div>
    </div>


    <button type="submit" name="submit2">Add</button>

</form>

Medjutim tu umesto da mi u formi izbaci ono iz tabele na prvoj stranici, izbacuje mi ovo:

Notice: Undefined index: ime in C:\xampp\htdocs\test\add.php on line 23

Notice: Undefined index: prezime in C:\xampp\htdocs\test\add.php on line 24

Notice: Undefined index: jmbg in C:\xampp\htdocs\test\add.php on line 25

Notice: Undefined index: ulica in C:\xampp\htdocs\test\add.php on line 26

i u formi:

<br /><b>Notice</b>: Undefined variable: name_b in <b>C:\xampp\htdocs\test\add.php</b> on line <b>57</b><br />
<br /><b>Notice</b>: Undefined variable: lname_b in <b>C:\xampp\htdocs\test\add.php</b> on line <b>63</b><br />
<br /><b>Notice</b>: Undefined variable: number_b in <b>C:\xampp\htdocs\test\add.php</b> on line <b>69</b><br />
<br /><b>Notice</b>: Undefined variable: street_b in <b>C:\xampp\htdocs\test\add.php</b> on line <b>74</b><br />

Znam da je greska u drugoj stranici gde nisam lepo variable odradio ali ne mogu da ukapiram kako...?
 
Da li b_spisak uopšte sadrži polja ime, prezime, JMBG i ulica?

Sent from my Nexus 6P using Tapatalk
 
Pokusavam i na ovaj nacin:

add.php
Kod:
<?php 
                                                        
if(isset($_POST['add'])) {
    
    $b_id = $_POST['add'];
  
    $query = mysqli_query($connection, "set names utf8");
    $query = "SELECT ime, prezime, jmbg, ulica FROM b_spisak WHERE id = '$b_id'";
    $add_query = mysqli_query($connection, $query);
    
    if(!$add_query) {
        
        die("QueryFailed" . mysqli_error($connection));
        
    }
    
    if(empty($add_query)) {
        
        echo "Field is empty";
        
    } else {
        
        if($row = mysqli_fetch_assoc($add_query)) {
        
        $id_b = $row['id'];
        $name_b = $row['ime'];
        $lname_b = $row['prezime'];
        $number_b = $row['jmbg'];
        $street_b = $row['ulica'];
        
    } else {
        
        echo "<br>";
        echo "Something is wrong";
            
        }
        
    }
    
}
                                                        
?>
                        
<form action="" method="post">

    <div>
        <div>
            <input type="text" name="name" value="<?php if(isset($name_b)) { echo $name_b; } ?>">
        </div>
    </div>

    <div>
        <div>
            <input type="text" name="lname" value="<?php if(isset($lname_b)) { echo $lname_b; } ?>">
        </div>
    </div>

    <div>
        <div>
            <input type="text" name="jmbg" value="<?php if(isset($number_b)) { echo $number_b; } ?>">
        </div>
    </div>
    <div>
        <div>
            <input type="text" name="name" value="<?php if(isset($ulica_b)) { echo $ulica_b; } ?>">
        </div>
    </div>


    <button type="submit" name="submit2">Add</button>

</form>

ali mi izbacuje poruku Something is wrong.
 
Ovo drugo imas gresku, imas 2x else a to ne moze tako. Moras koristili else if.
Onda u vezi ovoga
Notice: Undefined index: ime in C:\xampp\htdocs\test\add.php on line 23
Kako mislis da dobijes tu promenjivu ako se ona inicijalizuje tek submitujes formu. Tj kad ti se ucita strana nemas to inicijalizovano i zato ti vraca sve te Undefined index.
Tebi se to puni tek kad se odradi POST
if(isset($_POST['add'])) i zato pri otvaranju strane imas tu gresku

Znaci prvo odradi da ti se

while($row = mysqli_fetch_assoc($add_query)) {

$id_b = $row['id'];
$name_b = $row['ime'];
$lname_b = $row['prezime'];
$number_b = $row['jmbg'];
$street_b = $row['ulica'];

}
Puni pri ucitavanju strane. Ako sam dobro razumeo ponetu da u formi izlistas te podatke iz baze.
 
Poslednja izmena:
Drugi deo greške je u tome što je definisao te 4 varijable unutar while petlje a potom ih koristi kasnije. Varijable važe unutar {} zagrada.
Definiši ih na početku pa im onda dodeli vrednosti u while petlji, ili premesti popunjavanje firme unutar while petlje.
Ako očekuješ samo jedan red iz baze, onda ti ne treba while nego samo if.

Sent from my Nexus 6P using Tapatalk
 
@athlon87

Da, za dva else sam video i sam ali posle postavljanja krastavac...
Za ovaj drugi deo, ako dobro razumem, mogu da iskoristim onaj while na prvoj strani tj. njegove variable (jer su izmenjene). Pretpostavljam da lupam jer mi taj deo retko kad razumljiv kako da kolumne iz mysql postavim kao variable i da dalje koristim u formi.

@yooyo

Razumem sta mi objasnjavas, to sam i pokusao u prvom postu ali isto dobijam gresku, samo ne kapiram zasto. A onda sam u drugom postu umesto while stavio if ali ne fercera, jednostavno ne razumem kako funkcionise...

U silnim tutorijalima sto sam presao izgleda da nisam detaljno neke delove prosao...
 
Sve što je definisano u nekom paru { i } važi samo unutar tih zagrada. Van zagrada ne postoji. Ti si dodelio neke vrednosti promenljivima unutar { i } while petlje. Kada se while petlja završi, promenljive više ne postoje... A ti ih kasnije koristiš u generisanju html-a.

Sent from my Nexus 6P using Tapatalk
 
A moze li pomoc kako to ustvari treba da izgleda?
 
Ovako nekako...

Kod:
<?php 

// definises varijable za formu ovde. mozes da im dodelis i pocetne vrednosti po zelji
$name_b = "";
$lname_b = "";
$number_b = "";
$street_b = "";
                                                        
if(isset($_POST['add'])) {
    
    $b_id = $_POST['add'];
    
    $b_name = $_POST['ime'];
    $b_lname = $_POST['prezime'];
    $b_number = $_POST['jmbg'];
    $b_street = $_POST['ulica'];

    
    $query = mysqli_query($connection, "set names utf8");
    $query = "SELECT * FROM b_spisak WHERE id = '$b_id'";
    $add_query = mysqli_query($connection, $query);
    
    if(!$add_query) {
        
        die("QueryFailed" . mysqli_error($connection));
        
    }
    
    while($row = mysqli_fetch_assoc($add_query)) {
        
        $id_b = $row['id'];
        $name_b = $row['ime'];
        $lname_b = $row['prezime'];
        $number_b = $row['jmbg'];
        $street_b = $row['ulica'];        
    }     

    // ovo mozda i nije obavezno... zavisi koju verziju PHP-a koristis. 
    mysql_free_result($add_query);
}
                                                        
?>
                        
<form action="" method="post">

    <div>
        <div>
            <input type="text" name="name" placeholder="Name" value="<?php echo $name_b; ?>">
        </div>
    </div>

    <div>
        <div>
            <input type="text" name="lname" placeholder="LName" value="<?php echo $lname_b; ?>">
        </div>
    </div>

    <div>
        <div>
            <input type="text" name="jmbg" placeholder="JMBG" value="<?php echo $number_b; ?>">
        </div>
    </div>
    <div>
        <div>
            <input type="text" name="name" placeholder="Name" value="<?php echo $street_b; ?>">
        </div>
    </div>


    <button type="submit" name="submit2">Add</button>

</form>
 
Poslednja izmena:
E pa i ja sam tako pokusao, da imam prvo kao neki $output koji cu posle da upotrebim, ali ni to mi nije upalilo :) Evo sad sam uradio i opet mi izbacuje:

Notice: Undefined index: ime in C:\xampp\htdocs\test\add.php on line 28

Notice: Undefined index: prezime in C:\xampp\htdocs\test\add.php on line 29

Notice: Undefined index: jmbg in C:\xampp\htdocs\test\add.php on line 30

Notice: Undefined index: ulica in C:\xampp\htdocs\test\add.php on line 31
 
Ubij me ako ja znam sta ti hoces :)
 
Ajde okači ovde kako ti izgleda baza. Greške koje dobijaš ukazuju da je query vratio ko zna šta. Ubaci
Kod:
print_r ($row);
... da bude prvi red u while bloku. Treba da dobiješ sadržaj niza.

Sent from my Nexus 6P using Tapatalk
 
Baza izgleda:

idimeprezimejmbgulica
1petarpetrovic1313131313131petrovacka

Kad ubacim
Kod:
print_r ($row);
u prvi red u while bloku ne izlazi mi nista, osim onih gresaka sto sam ispisao ;)

Mozda sam bio nerazumljiv, ako jesam izvinite, evo pokusacu ponovo:

- na stranici search.php u formi pretrage ukucam i izadje mi trazeni pojam u vidu tabele
- kad sam nasao ispod njega kliknem na submit tj. add i to me odvede na sledecu stranicu
- na sledecoj stranici mi treba forma u kojoj bi izaslo to iz tabele u prethodnoj stranici u vidu forme: ime, prezime i tako dalje...

To je sve, tj. nije sve ali dalje znam kako cu ali ovde imam zabunu... Eto, mozda sam sad bolje objasnio, desava se da sam nejasan :)
 
Greška Notice: Undefined index:... prosto znači da u tom nizu ne postoji element sa tim imenom. To dalje znači da sql upit iz nekog razloga nije vratio to što očekuješ. Probaj da pre while petlje ubaciš:
$row =[ ];

Sent from my Nexus 6P using Tapatalk
 
Idi u phpmyadmin i copy paste strukturu tabele ovde. Pokušaj da izvrsis sql upit i vidi da li ti vraća očekivane rezultate. Dalje... Gde ti je definisan connection? Ako direktno usmeravaš korisnika na add.php, connection ne postoji.

Sent from my Nexus 6P using Tapatalk
 
Name:
id
ime
prezime
jmbg
ulica

(ovo je copy/paste samo sam izbacio type, collation, attributes, action i ostalo)

$connection je definisan na vrhu obe strane ovako:

Kod:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$db = "test";

// Create connection
$connection = new mysqli($servername, $username, $password, $db);

// Check connection
if ($connection->connect_error) {
    die("Connection failed: " . $connection->connect_error);
} 
echo "Connected successfully";
?>

i to radi tj ima kontakt sa bazom.

E sad, ovo sto pitas kako ga usmeravam, jedino preko ovog koda:

Kod:
formaction="add.php"

mozda je tu greska. Jer, kad sam u action (pored method-a) stavio putanju za stranicu add.php onda mi je islo tamo i kada kucam pretragu a to mi ne valja...
 
Ovo ne valja...
"SELECT * FROM b_spisak WHERE id = '$b_id'";

Treba

"SELECT * FROM b_spisak WHERE id = ".$b_id;

Sent from my Nexus 6P using Tapatalk
 
Da nisi negde pogresio u kucanju?
Ovo mi izbaci:

QueryFailedYou have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1
 
U php-u stringovi se spajaju sa . Probaj da echo ispises tvoj query. Da li se umesto $b_id nalazi broj ili nešto drugo.

Sent from my Nexus 6P using Tapatalk
 
Izgleda da se ne nalazi nista, ovo mi izbacuje:
SELECT * FROM b_spisak WHERE id = ''

Znaci, verovatno ne nalazi ID?
 
Uhh.. tek sad vidim.. na search strani, u formi imas input polje koje se zove search_number. Kada kliknes na submit, browser ce dodeliti imenu search_number vrednost koju si upisao u input polje forme a potom ce pozvati stranu add.php.

Na pocetku strane add.php imas gresku.. treba da stoji $b_id = _POST["search_number"]; .
Tek tada ce php dobiti broj koji si uneo.

Dalje, u PHP-u se stringovi spajaju sa . tako da reba da stoji:
$query = "SELECT * FROM b_spisak WHERE id = " . $b_id;

Pogledaj i upit na search strani. I tamo si lose napravio search sql string.
 
Cekaj, ja sam search_number koristio za pretragu a ne za prelazak na sledecu stranu. Za prelazak je drugi submit ispod sa imenom add.

I sto se ovoga tice:
$query = "SELECT * FROM b_spisak WHERE id = " . $b_id;

uopste mi nije jasno i stalno mi izbacuje gresku. Jos nisam video ovakvu SQL liniju gde . $b_id ide posle zatvorenih navodnika...

SQL string na search.php strani radi jer izvlaci podatke iz baze bas kako hocu. Da li je moguce da se opet nismo razumeli?
 
Pogledaj search.php sa prve strane. Otvorio si form na pocetku i zatvorio na kraju. Pred kraj imas submit button koji ima formaction add.php. Osim ako nisi nesto izostavio, klikom na submit se otvara add.php, a u headere se pakuje samo search_number = uneta vrednost TO JE JEDINO INPUT POLJE NA STRANI!

$b_id = $_POST['add']; add iz ovog reda nige ne postoji te $b_id nema nikakvu vrednost. Zbog toga ti sql query izgleda ovako:

SELECT * FROM b_spisak WHERE id = '' << ovde su dva apostrofa, a ne jedan znak navoda

Ako odes u phpmyadmin da testiras ovaj upit videces da je query ispravan, ali ne vraca nista, tj vraca prazan set.

PHP se nece buniti zbog toga (nije greska) a fetch row nece vratiti nista, tj verovatno ce biti prazan niz.

Prazan niz nema nikakve elemete u sebi i zato dobijas one poruke Notice: Undefined variable:

Proverio sam.. stvano moze da se sastavi string na nacin koji si uradio, ali postoji izvesna razlika u rezultatu spajanja.
Kod:
<?php
$b_id = 1234;

$query1 = "SELECT * FROM b_spisak WHERE id = " . $b_id;
$query2 = "SELECT * FROM b_spisak WHERE id = '$b_id'";

echo $query1;
echo "\n";
echo $query2;

rezultat je:
SELECT * FROM b_spisak WHERE id = 1234
SELECT * FROM b_spisak WHERE id = '1234'

Oba nacina su ok, mada '1234' tera sql engine da konvertuje string u broj pre poredjenja. To jeste brza operacija, ali potencijalno moze biti problema sa drugim tipovima podataka.

Ajde zipuj sve to pa okaci negde. Ovako necemo daleko stici.
 
Poslednja izmena:
Poslao sam ti na pp. Sad verovatno izgleda drugacije malo od prve verzije jer sam pokusavao na zilion nacina sa ovim sto si mi ti pisao, ali to je to...

Malo cu i ja da prostudiram ovo sto si mi napisao i da vidim da procitam nesto o tome jer sam bas supalj krastavac...
 
Uhhh svasta si ovde napravio :)
Ako uneses neki broj gore i kliknes na submit on treba da reloaduje stranu i ispise sta je nasao sa tim JMBG.
Dole se nalazi jos jedna forma gde upisujes id korisnika. Input polje ima name="id". Kad kliknes na Add, dugme te vodi na add.php stranu.
Na add.php strani proverava se da li u posto postoji id i ako postoji procita ga i generise query string, itd...
U postu se ne nalaze ime, prezime, jmbg i ulica... to sam maknuo. Ti redovi su pokazivali gresku.
Code koji si copy/paste u forum nije imao redove sa pocetka pa se potrefilo da redovi 28-31 pokazuju na promenljive unutar while petlje.

Inace ovo je potpuno bzvz pokusaj.. nesto radi ali je ovo totalno van standarda. Moras da odvojis php code od html-a. Ideja je jednostavna:
nekifile1.php neka sadrzi cist php code u kome setujes nekim promenljivama ili nizu podatke. Na kraju uradis require_once('nekihtml.php') koji je html sa primesama php-a na mestima gde treba da se ispise neka php varijabla.

U stvari i to ne valja... prodji ovo http://gilbitron.github.io/PIP/

pa kad skapiras MVC koncept vise nikad neces pisati ovakav code.
 

Prilozi

  • shone83.zip
    1.5 KB · Pregleda: 11
Da, jasno mi je da za nekog ko ovo ozbiljno radi ovo ne lici ni na sta. Znam i da treba da se bacim na OOP programiranje, ali je problem sto ja ucim preko tutorijala sto nadjem i nemam nikog blizu koji ce da mi pomogne kad negde zapnem krastavac, tako da ovo malo sporije ide. U nekom projektu sto radim za sebe, ovo sam resio na drugi nacin pomocu nekog tutorijala, ali me zivciralo sto nisam mogao ovako kako sam zamislio, tako da cu sad da prostudiram ovo da bi ukapirao kako to sve funkcionise. Pa se nadam da ce mi to pomoci kad uradim upgrade svog nacina programiranja :)

Hvala ti za strpljenje i za pomoc ;)
 
Kupio sam neke tutorijale na udemy, ali videcu i to, hvala.
 
Nazad
Vrh Dno