een record bijwerken dat ik zojuist heb gemaakt

Ik maak een website voor personeelswerving en heb problemen met het toevoegen van nieuwe gegevens aan een record dat op de vorige pagina is gemaakt.

Om het gebruiksgemak te vergroten, heb ik het formulier in een aantal stappen gesplitst (waarbij elke stap op een nieuwe pagina staat), waarbij stap 1 de record in de kandidaat-databasetabel creëert en de persoonlijke gegevens van de kandidaat invoegt (naam, achternaam, contactgegevens, geslacht, etc.) en stuurt de gebruiker naar de volgende pagina (stap 2), waar een profielfoto kan worden geüpload en het pad naar de afbeelding in een veld in de nieuw gecreëerde record wordt ingevoegd.

Het probleem komt doordat ik niet de code kan krijgen om de record-ID van het relevante record te bellen. Ik dacht erover om mysql_insert_id te gebruiken, maar het probleem daarmee is tweeledig. Ten eerste, ik weet niet zeker of ik weet hoe ik dit correct moet gebruiken en meerdere Google-zoekopdrachten hiernaar hebben me niet wijzer. Ten tweede, aangezien het bedrijf meerdere vestigingen in het hele land heeft, is de kans groot dat twee gebruikers tegelijkertijd kandidaten kunnen toevoegen en kan gebruiker A uiteindelijk de foto toevoegen aan de record die gebruiker B heeft gemaakt.

Ik heb geprobeerd om $ _POST te gebruiken om de record-ID te krijgen, maar de gegevens lijken niet de gegevens door te geven naar de volgende pagina nadat deze in de tabel is ingevoegd.

Ik ben niet bepaald nieuw voor PHP, maar dit is niet iets dat ik eerder heb gedaan omdat ik een vriend had die dit soort dingen zou behandelen, maar hij is helaas een paar maanden geleden overleden, dus ik moet leren hoe ik het moet doen dit terwijl ik meega, met weinig succes.

Ik hoop dat ik duidelijk genoeg over mijn probleem ben, omdat ik een beetje verlies heb.

Alle hulp wordt zeer op prijs gesteld.

2
welkom om overflow te stapelen! Zorg ervoor dat u ALLE antwoorden die u nuttig vindt, inclusief die op de vragen van anderen, bijwerkt. En controleer/accepteer het beste antwoord op uw eigen vragen.
toegevoegd de auteur Larry K, de bron

3 antwoord

Je zou beter af zijn met het gebruik van PHP PDO. Daarin is er een functie die de ID van de rij ingevoegd krijgt ( http://us3.php.net/manual/en/pdo.lastinsertid.php ). Wanneer u uw invoegcode uitvoert, voert u deze er direct achter in en krijgt u de ID van de rij die u zojuist hebt ingevoegd. Bevestig die ID nu aan koppelingen voor de gebruiker of een sessievariabele (of iets anders dat gebruikersspecifiek is) en u kunt eenvoudig de laatste rij bijhouden die elke persoon kan bewerken.

1
toegevoegd
Het is beter om het in een sessie op te slaan en het volledig onzichtbaar en serverzijdig te houden. Door het in links door te geven of als formulierinformatie beveiligingsproblemen oplevert.
toegevoegd de auteur Ilion, de bron
Yup, ik ben het volledig met je eens, maar het lijkt erop dat dit hoofdstuk vrij nieuw is voor programmeren of ten minste PHP en dat het waarschijnlijk gemakkelijker zou zijn om het via het netwerk te laten werken. Wanneer hij het heeft die werkt en de concepten begrijpt, dan zou ik zeggen dat hij terug kan gaan en de code kan verharden tegen beveiligingsproblemen. Nogmaals, het is echter niet oneens met uw opmerking.
toegevoegd de auteur Fluffeh, de bron
Bedankt voor de feedback. @Fluffeh, je hebt gelijk dat ik nieuw ben. Mijn PHP-vaardigheden hebben tot nu toe alleen me gevraagd om het absolute minimum te doen, zodat mijn partner kon binnenkomen en doen wat er moest gebeuren om de code te laten werken zoals het hoort. Zoals gezegd stierf hij halverwege dit project, dus ik zoek hier wat rond in het donker terwijl ik mijn voeten vind.
toegevoegd de auteur UbuntuElphie, de bron

Eerste,

op uw pagina die de record in de database invoegt, moet u de id van de nieuw gecreëerde record opvragen. Gebruik mysqli :: insert-id Er zijn ook andere manieren om doe het.

Tweede,

Sla de record-ID op in de sessie van de gebruiker en gebruik deze op de volgende pagina's om de record bij te werken. Het is om veiligheidsredenen belangrijk om de id in de sessie op te slaan, niet als een GET-waarde voor de URL of als een "verborgen" veld.

0
toegevoegd
Bedankt voor de feedback. Ik zal zeker sessies gebruiken in plaats van een verborgen veld (ik ben eerder afgekeurd van een url GET Value, maar tot nu toe heb ik, na het lezen van de feedback die ik heb ontvangen, de kwetsbaarheid van een verborgen veld niet begrepen)
toegevoegd de auteur UbuntuElphie, de bron

Allereerst zou ik PDO (of mysqli) gebruiken in plaats van de verouderde mysql_ * -extensies.

Met behulp van PDO, nadat u uw statement hebt uitgevoerd, kunt u twee functies gebruiken om de ID te verkrijgen die u nodig hebt:

$stmt->execute($values);    //$stmt contains the prepared statement

$return_code = $stmt->rowCount();
// $return_code = 1 : new record
// $return_code = 2 : updated record

if ($return_code == 1)
{
    $ID_YOU_NEED = $db->lastInsertId();   //$db is the database connection
}

Trouwens, ik gebruik rowCount() omdat ik normaal gesproken OP DUPLICATE KEY UPDATE gebruik voor de meeste van mijn insertquery's, je kunt die stap mogelijk overslaan.

Vervolgens zou ik de ID opslaan in een sessie of toevoegen als een verborgen veld voor het volgende formulier .

Trouwens, afhankelijk van de vereisten, zou ik nog niets in een db opslaan totdat alle benodigde informatie binnen is gekomen.

0
toegevoegd
-1 Bewaar de dbms-id nooit als een verborgen veld, aangezien er geen beveiliging is. Iedereen kan de waarde wijzigen en daardoor toegang krijgen tot de records van andere personen in de database.
toegevoegd de auteur Larry K, de bron
@ Larry K Ik denk dat je gelijk hebt, in dit geval zou dat een slecht idee zijn; Ik werk momenteel veel aan een systeem waarbij alleen de beheerder gegevens kan bewerken en de vraag niet grondig heeft gelezen (hoewel ik waarschijnlijk toch een verborgen variabele zou hebben die overeenkomt met een andere sessievariabele) ...
toegevoegd de auteur jeroen, de bron
@UbuntuElphie Dat is waarschijnlijk ook wat ik zou doen.
toegevoegd de auteur jeroen, de bron
Nogmaals, nu voor de feedback. Uw laatste advies ("Ik zou nog niets in een database opslaan totdat alle benodigde informatie binnen is gekomen") zette me aan het denken. Ik denk dat ik een probleem heb gerealiseerd met mijn probleem. Ik heb in deze fase van het project eigenlijk geen tijd meer en het is tijdrovend om dit laatste onopvallende ding te krijgen (ik denk dat slaapgebrek zijn tol eist). Ik ken sessies en, door sessies te gebruiken, hoef ik niet de laatste ID te bellen omdat ik alle gegevens verzamel en vervolgens de record aan het einde van het hele proces invoeg. Zou je zeggen dat mijn logica hier klopt?
toegevoegd de auteur UbuntuElphie, de bron