PHP update statement fungerar inte

Permalänk
Medlem

PHP update statement fungerar inte

Jag håller på att bygga en väldigt simpel adressbok i php/mysql som ett projektarbete i webbprogrammering(Vill inte att ni gör mitt arbete, vill bara veta vad jag gör fel) . Jag har dock väldigt dålig koll på update statement och lyckas inte få det att fungera och förstår inte heller vart jag gjort fel. Det kodstycket ska göra är att uppdatera en 1:m relation. Man ska få fylla i ett formulär där man skriver in person id och bostads id. Sen ska formuläret skicka den informationen till en php sida där person id ska uppdateras med det nya person id:t på bostaden med det id man matade in som bostads id. Problemet som uppstår är att det kommer upp att alla fält inte är ifyllda även fast de är det.

Jag lyckas inte hitta någon bra guide för denna typ av update och därför får jag tyvärr störa detta delforum med denna fråga.
p_id är person id och b_id är bostads id(vilken rad bostaden är på)

Är jag blind och missar ett enkelt fel, eller har jag bara gjort helt fel i koden?
Formuläret som skickar

<form id="intag" action="nyadress.php" method="post" enctype="application/x-www-form-urlencoded" > <strong> Bostads ID:</strong><br/> <input type="text" name="b_id" /> <br/> <strong> Persons ID:</strong><br/> <input type="text" name="p_id" /> <br/> <input type="submit" value="Lägg till"> </form>

Dold text

Update statement

<?php require_once 'baksida.php'; //for log in $intag = array($_POST['p_id'],$_POST['b_id']); $isokay = TRUE; //a boolean variable that is true foreach ($intag as $intag){ //for each sak as sak if (empty($_POST[$intag])) { //if posted sak is empty isokay is false $isokay = FALSE; } } if ($isokay){ mysql_real_escape_string(extract($_POST)); if( mysql_real_escape_string(mysql_query("UPDATE houses SET p_id = $intag[p_id] WHERE id = $intag[b_id]"))){ header("Location: adressbok.php"); //send back to personer.php if the query worked } else { //or else print couldn't reach database echo " Kunde inte nå databasen!"; } } else { //or else one or more fields are empty. echo "Ett eller fler fält är tomma"; } ?>

Dold text
Visa signatur

Speldator: i5 4670k stock | 8GB ram | Asus Z87-plus | Xonar Essence STX | SSD: Intel g2 , Samsung 830 256gb | R9 290 Tri-x | Define R4| Win 8 | Noctua nh-u12p | Qpad Mk-50
marinlik.wordpress.com/ Min blogg för nedbrytning av spel och diverse andra artiklar om NFL
500px.com/niclasbrundell

Permalänk
Inaktiv

mysql_real_escape_string(extract($_POST));

Vad händer här? mysql_real_escape_string tar en sträng. Extract returnerar inget, så funktionen tar inte emot något. mysql_real_escape_string returnerar den escapade strängen, du tar inte emot den i din kod.

Permalänk
Medlem

Jadu, varför har du databas queryn i en IF-sats?

Du escapar såhär, INNAN if-satsen.

$b_id = mysql_real_escape_string($_POST['b_id']);

Sen använder du bara $b_id variabeln

Din UPDATE bör ligga innanför if-satsen.
En If-sats kollar bara om något är true eller false.

Du bör sätta ett namn på din "submit" också så att PHP kan lyssna efter den.

För att inte göra det för enkelt för dig.

OM ( isokayy = TRUE) { QUERY header("Location: adressbok.php"); } ANNARS { error, du har tomma fält. }

Visa signatur

Canon 70D | 2x Dell Ultrasharp 24" | Ryzen 3700X | 32B | GTX 1080Ti

Permalänk
Medlem
Skrivet av FlorrpaN:

Jadu, varför har du databas queryn i en IF-sats?

Du escapar såhär, INNAN if-satsen.

$b_id = mysql_real_escape_string($_POST['b_id']);

Sen använder du bara $b_id variabeln

Din UPDATE bör ligga innanför if-satsen.
En If-sats kollar bara om något är true eller false.

Du bör sätta ett namn på din "submit" också så att PHP kan lyssna efter den.

För att inte göra det för enkelt för dig.

OM ( isokayy = TRUE) { QUERY header("Location: adressbok.php"); } ANNARS { error, du har tomma fält. }

Tackar, med variabeltipset så började det fungera

Edit: Om jag vill se till att p_id som jag skriver in är ett id som existerar i person tabellen, finns det någon bra lösning för det? Vad bör jag söka på?

Visa signatur

Speldator: i5 4670k stock | 8GB ram | Asus Z87-plus | Xonar Essence STX | SSD: Intel g2 , Samsung 830 256gb | R9 290 Tri-x | Define R4| Win 8 | Noctua nh-u12p | Qpad Mk-50
marinlik.wordpress.com/ Min blogg för nedbrytning av spel och diverse andra artiklar om NFL
500px.com/niclasbrundell

Permalänk
Medlem
Skrivet av flyawaynille:

Tackar, med variabeltipset så började det fungera

Edit: Om jag vill se till att p_id som jag skriver in är ett id som existerar i person tabellen, finns det någon bra lösning för det? Vad bör jag söka på?

http://www.php.net/manual/en/mysqli.affected-rows.php

Permalänk
Medlem

Varför använder du mysqli istället för PDO?

Permalänk
Medlem

Problemet med att användare får skriva in vad de vill som id försöker jag nu att lösa genom att göra listboxar som automatiskt radar upp ID från databasen. Det jag dock inte förstår hur man gör är att sen skicka datan från dessa listboxar till min nyadressbok.php sida för att använda dem på samma sätt som användarinmatningen gjordes i koden ni hjälpte mig med. Går det att lösa?

Jag tänker att jag inte vill att användare själva ska få skriva in id då det välidgt lätt blir fel, så detta borde väl vara en bra lösning väll?
Listbox bostads id

$sql = "SELECT id FROM houses"; $result = mysql_query($sql); echo "Bostadens ID"; echo "<select id='b_id' name='b_id'>"; while ($row = mysql_fetch_array($result)) { echo "<option value='" . $row['id'] . "'>" . $row['id'] . "</option>"; } echo "</select>";

Dold text

Listbox person id

$sql = "SELECT id FROM person "; $result = mysql_query($sql); echo "Personens ID"; echo "<select id='p_id' name='p_id'>"; while ($row = mysql_fetch_array($result)) { echo "<option value='" . $row['id'] . "'>" . $row['id'] . "</option>"; } echo "</select>";

Dold text

Edit: Jag kom på att jag är korkad. Det var ju bara att sätta form runt php så fungerade det. Nu är det bara att klura ut hur jag skriver ut en hel persontabell och sen bostaden som hör till b_id(i persontabellen.) Så att man får information om vart personen bor sen är baksidan av systemet klart

Visa signatur

Speldator: i5 4670k stock | 8GB ram | Asus Z87-plus | Xonar Essence STX | SSD: Intel g2 , Samsung 830 256gb | R9 290 Tri-x | Define R4| Win 8 | Noctua nh-u12p | Qpad Mk-50
marinlik.wordpress.com/ Min blogg för nedbrytning av spel och diverse andra artiklar om NFL
500px.com/niclasbrundell

Permalänk
Medlem

Hur gör du när du ska uppdatera sen då?