Interaktivitet i PHP utan att ladda om sidan

Permalänk
Medlem

Interaktivitet i PHP utan att ladda om sidan

Crappy rubrik, kom inte på något annat
Sidan är skriven i html/php, men lösningen jag efterfrågar kan mycket väl fixas med java eller liknande, vet dock inte vart jag ska börja

Nåväl, jag sminkar om lite formulär på sajten och har kört fast.

T.ex. såhär

Namn: <text input>
Företag: <text input>
Kontaktperson: <drop-down> lägg till ny | redigera

o.s.v.

Men, här är poängen.
Lägg till ny samt redigera är länkar, klickar man på dessa tänkte jag att det dyker upp två nya fält, Namn och telefon.
Fälten sparas sedan i POST när hela formuläret sänds och lagras i rätt tabell o.s.v., det har jag redan löst.

Där jag kör fast är själva rörligheten, utan att ladda om sidan.
Att få dessa formulär att ramla fram vid klick på "Lägg till ny"

Någon som kan sparka mig åt rätt håll att läsa mer om saken, eller har något konkret exempel ?

Visa signatur

Mitt modermodem är trimmat!

Permalänk
Medlem

Vill du ändra något utan att ladda om sidan så är det Javascript som gäller (inte Java, väldigt olika). PHP är Server-side.

jQuery är rätt mysigt när det kommer till javascript.
Du skulle lätt kunna göra show() å hide() på de element du vill dölja/visa t.ex.

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem

Jquery kan vara ett smidigt sätt att lösa problemet (Javascript bilbiotek).
Du lägger till fält i formen direkt och behandlar dem vid POST med PHP.
Finns mycket smidiga lösningar, här är ett exempel:

Exempel:
http://charlie.griefer.com/blog/jquery-dynamically-adding-for...

Kod:
http://charlie.griefer.com/blog/2009/09/17/jquery-dynamically...

Fler exempel:
http://www.google.com/search?q=jquery+add+fields

*lmgtfy-länk bortredigerad /Mod*

Added example2
Permalänk
Medlem

Tack för tipsen, använder Jquery nu för en datepicker, tänkte inte på att den kan göra lite mer också
Man lär sig något var dag!

Visa signatur

Mitt modermodem är trimmat!

Permalänk
Medlem

Fortsätter lite i samma stil, jag fick ordning på detta galant och kan nu expandera fälten som krävs.

Men.
Formuläret i sig sparas i en tabell, vi kallar den för FORM01
Medan infon om kontaktpersoner sparas i tabellen CONTACTS

I formuläret har jag ju insamling av den data som finns i formuläret i detta format (mitt är oerhört mycket större, men följer detta format)

$name=$_POST['name']; $email=$_POST['email']; $phone=$_POST['phone']; mysql_query("INSERT INTO `form01` VALUES ('$name', '$email', '$phone')") ;

Nu klurar jag på hur jag ska lösa detta, med att viss data ur formuläret postas till ena tabellen, och det andra till den andre tabellen.

Kan jag bara direkt efter den första sql-queryn köra liknande igen, såhär ?
Dessa fält är de som kommer ut om man klickar på "lägg till ny", enligt min första beskrivning i trådstarten.
(tänkte ha nån if-sats som kollar om fälten är ifyllda också innan)

$name2=$_POST['name2']; $phone2=$_POST['phone2']; mysql_query("INSERT INTO `contacts` VALUES ('$name2', '$phone2')") ;

Hoppas jag gjort mig förstådd, jag är verkligen ingen PHP-guru utan jag förstår vad jag läser rätt bra och kan editera hjälpligt.

Visa signatur

Mitt modermodem är trimmat!

Permalänk

Du kan köra 2st insert's efter varandra, ja.
Är väl bara att testa?

Permalänk
Medlem
Skrivet av Yxskaftet:

Du kan köra 2st insert's efter varandra, ja.
Är väl bara att testa?

Då jag inte kan programmera orkade jag inte testa och slösa massa tid på det innan jag visste att det funkade

Efter ditt inlägg bökade jag lite och nu lirar det perfekt, dock i två test-tabeller men nu är det bara att styra upp det jag ville ha.
tack för klargörandet så jag inte famlade i mörkret

Visa signatur

Mitt modermodem är trimmat!

Permalänk
Medlem

Vänder mig med förtroende till er igen i nästa fastkörning

Har ett formulär som ser ut såhär (mycket fler, men jag tar med några som exempel)
Namn: <textfield>
Email: <textfield>
Telefon: <textfield>
Kontaktperson <drop down> Lägg till
(drop down läser av tabellen contacts och listar de alternativ som finns där.

Lägg till, är en länk. Där ytterligare fält kommer fram, om man vill lägga till en ny kontaktperson. (sname, scompany, sperson)

En del av koden... (kan säkert va nåt fel, då jag klippt ut det relevanta)

$name=$_POST['name']; $email=$_POST['email']; $phone=$_POST['phone']; $scontact=$_POST['scontact']; mysql_query("INSERT INTO `form01` VALUES ('$name', '$email', '$phone','$scontact', )") ; if(trim($_SESSION['sname']) == '') {}else{ $sql09 = sprintf("INSERT INTO contacts (name, company, cperson) VALUES (%s, %s, %s)", qs($_SESSION['sname']), qs($_SESSION['scompany']), qs($_SESSION['sperson'])); mysql_query($sql09) or die('Fel 02: ' . mysql_error());

Som ni ser, om fälten med NY kontaktperson inte är ifyllda, så sparas inte heller nåt till databasen.

Men om de är ifyllda, så sparas de helt korrekt till databasen.
MEN. Detta formulär skapar möten, så när man kör formuläret så sparas all info om mötet, den nya kontaktpersonen om den är ifylld.
Problemet jag har är att jag vill att den nya kontaktpersonen ska sparas, och inte den som är vald i drop-down listan ovan.

Koden för drop-down ser ut såhär

<select name="scontact" class="select"> <?php while ($row_contacts = mysql_fetch_assoc($result_contacts)) { echo '<option value="' . $row_contacts['id'] . '"'; if (isset($_SESSION['event_contact']) && $_SESSION['event_contact'] == $row_contacts['id']) { //lite luddig rad echo ' selected'; } echo '>' . $row_contacts['name'] . '</option>'; } ?>

Den luddiga raden kanske ni inte behöver bry er om så mycket, skulle behöva lasta in 300 rader kod för hela systemet, men försöker fokusera på det jag fastnat på

Och funktionen

<?php $sql_contacts = "SELECT id, name FROM contacts WHERE user = '{$_SESSION['id']}' ORDER BY name"; $result_contacts = mysql_query($sql_contacts) or die('Error _contacts: ' . mysql_error()); $rows_contacts = mysql_num_rows($result_contacts); if ($rows_contacts == 0) { $_SESSION['error'] = 114; header('Location: contacts.php?' . SID); exit(); } ?>

Någon som förstår vad jag försöker göra och kan hjälpa mig fatta nåt

Edit:
Det jag kommer på är nåt i stil med detta

select id, name from `contacts` where `id`=(select max(`id`) from contacts) and user = '{$_SESSION['id']}';

Och använda resultatet där för att uppdatera "form01" contact fält?

Visa signatur

Mitt modermodem är trimmat!

Permalänk

Hänger inte riktigt med på vad du vill göra.
Om en ny kontaktperson är skapad så vill du lägga till den som "scontact" i tabellen "form01" ?
Är "scontact" en nyckel till en annan tabell där kontaktpersonerna lagras?

Permalänk
Medlem
Skrivet av Yxskaftet:

Hänger inte riktigt med på vad du vill göra.
Om en ny kontaktperson är skapad så vill du lägga till den som "scontact" i tabellen "form01" ?
Är "scontact" en nyckel till en annan tabell där kontaktpersonerna lagras?

Precis, nu har jag löst det såhär. Kanske finns bättre sätt?
Varnings för fulkod (andra fält än tidigare)

Om man inte lagt till ny info, så gör den ingenting och tabellen EVENT får fältet MEET_INFO med vad som valts i drop-down. Ett ID kopplat mot tabellen MEET_INFO
Har man fyllt i fälten, så körs nedanstående. (meet_info sparas fortfarande med valt objekt i drop-down, men uppdateras senare med vad som just blev sparat som ny mötesinfo)

Svårt att förklara kanske, jag är insatt i koden så det kan va lite luckor i flödet

if(trim($_SESSION['meet_name']) == '') {}else{ $sql05 = sprintf("INSERT INTO meet_info (scene, name, info) VALUES ('{$_SESSION['id']}', %s, %s)", qs($_SESSION['meet_name']), qs($_SESSION['meet_info'])); mysql_query($sql05) or die('Fel 02: ' . mysql_error()); unset($_SESSION['meet_name']); unset($_SESSION['meet_info']); $sql_meetadd = "select id from `meet_info` WHERE scene = '{$_SESSION['id']}' ORDER BY id DESC LIMIT 1"; $result_meetadd = mysql_query($sql_meetadd) or die('Error _meetadd: ' . mysql_error()); $meetadd = mysql_result($result_meetadd, 0); $sql12 = sprintf("UPDATE events SET meet_info = $meetadd WHERE scene = '{$_SESSION['id']}' ORDER BY id DESC LIMIT 1", qs($_SESSION['meet_name'])); mysql_query($sql12) or die('Fel 02: ' . mysql_error()); }

Visa signatur

Mitt modermodem är trimmat!

Permalänk

Du kan få ut id med mysql_insert_id.

Permalänk
Medlem
Skrivet av Yxskaftet:

Du kan få ut id med mysql_insert_id.

Visste att det fanns nåt smartare, men hittade aldrig.
Tack för tipset, nu blev det mindre kod och mycket bättre

Visa signatur

Mitt modermodem är trimmat!