24. maj 2010 - 20:54Der er
46 kommentarer og 1 løsning
PHP form self, ved ikke hvordan?!
Hej alle,
Jeg prøver at lave en form hvor man tilmelde sig til en mailing liste, og det virker når jeg submitter til "ekstern" php fil, altså når formen har action="submit.php". Problemet ligger dog i at, jeg gerne ville have at valideretingen forblev på samme side som formen - så min menu stadig er i venstre side etc. Jeg har ikke noget link, da det ligger offline! Hvad gør jeg forkert? Og kunne en løsning være at ligge den i et CSS "popup" layer?
Den gør nemlig ingenting - det er problemet ;-) Det skal dog siges at det er baseret i indexhibit og derfor laver den måske problemer? Det er jo en php fil, som bliver kaldt frem i et andet php dokument?
Jeg er ikke særlig skarp inden for php og mysql - så det mail=ok, forstår jeg desværre ikke så meget af ;-)
Hvorfor ikke bare lave if( isset( $_POST ) ) ?? Det er vel ligegyldigt, om der er tale om knappen eller felterne - bare formen er posted!? Ellers skal du som foreslået ovenfor lave noget ala dette: -------------------------------------
Og jeg tror ærligt talt heller ikke du behøver sætte noget i action i denne situation! Altså kan du lave flg. tag hvilket også vil få det til at virke: <form action="" method="post">
Det var maaske fremskridt - for foerste gang i traaden loefter du sloeret for hvad konkret problemet er. Siger du at det brugeren skriver i felterne ikke bliver gemt i databasen? Siger du saa (i dit oprindelige spoergsmaal) at naar du "submitter til 'ekstern' php fil, altså når formen har action="submit.php" saa bliver vaerdierne gemt i databasen som de skal? I saafald giv os lige den kode der virker. Siger du yderligere at du gerne vil have vaerdierne i formularens felter til at forblive der efter at formen er submittet? (Hvis du har brug for hjaelp er du nok noed til at goere en indsats i at specificere hvad det er du oensker, hvad du faar med 'ekstern' php fil, og hvad du faar med php form selv.)
Det virker altså! Men det jeg faktisk gerne ville have, var at når jeg submitter, så popper den op på den ene eller andet måde på samme side, så min menu etc. stadig er der. Derfor efterspurgte jeg også at løsningen måske lå et CSS layer popup? Håber I forstår!
det kan sagtens køre på den samme side, både som ledene efter $_POST eller ved at lave en variabel.
jeg ved ik hvordan du får det fucket op.
prøv igen:
<?php // bruger vi lige en post som rent faktisk blir sendt (user_mail) if(isset($_POST['user_mail'])) { $host="localhost"; $username="XXX"; $password="XXX"; $db_name="hlr"; $tbl_name="mailinglist";
// Connect to server and select database. mysql_connect("$host", "$username", "$password")or die("cannot connect"); mysql_select_db("$db_name")or die("cannot select DB");
Det samme sker, eller rettere intet sker! Felterne bliver tømt og intet er kommet ind i min mysql db. Kan det have noget at gøre med at det ligger i indexhibit (kender I det?) - det bliver jo tastet ind i et admin modul...
i din index fjerner du koden og tilføjer include("uploadedfil.php");
så burde det virke.
og hold op med at brug det setup du har gang i og få dig en text editor såsom notepad++ eller sådan, fordi det lyder ik som en holdbar løsning det du bruger.
har du et link til jeg kan se hva det er for noget?
Jeg bruger textmate til Mac og gennemgår alle filerne, men det er CMS system som jeg har downloaded (som er ret anerkendt inden for den grafiske branche). Min index.php skal indeholde include, men hvor og hvordan?
Jamen er du sikker på der ikke er en mysql fejl? det kunne jeg godt mistænke det for.. Og i øvrigt hader jeg at lave den med at have SQL'en til at stå i en variabel.. Så det ændrer jeg lige ;) -------------
Jeg skulle ikke mene at SQL'en fejler, da den virker som jeg skrev tidligere, når det er en seperat fil som den "post'er" til - men igen, så er jeg temmelig ny i det her ;-)
Hvad var du ændrede, så SQL'en ikke er i variablen? Tak
Jamen først blev $sql sat og så ind i en ny variabel for til sidst at blive ført ud i livet.. Jeg tror måske vi skal ændre det igen: ---------------------------------
Ingenting, men igen har det noget at gøre med at man sætter det ind i et admin module text field, som så sætter det automatisk ind? Jeg kan jo ikke sætte hele ovenstående kode ind i mit index.php, for så fremover formen på alle mine sider jo.
dit problem er 100% at du bruger en latterlig editor gennem noget cms frem for at arbejde direkte i kilden - og jeg kan ik hjælpe dig før du stopper med det.
Cool, men så kan du ikke hjælpe RexReptiles. Du bliver jo nødt til at forholde dig til den problemstilling jeg har, ellers nytter det jo ikke noget. Tak for hjælpen so far.
Jeg kan jo heller ikke ændre direkte i filen som jeg siger, da fil-outputtet bliver genereret at en index.php - og hvis jeg indsætter koden der, så forekommer det på alle sider der bliver genereraet. Hvis du ved hvordan man kommer udenom det, så er du velkommen til at byde ind.
if( !empty($user_name) && !empty($user_mail) && !empty($user_mobile) ) // EVERY FIELD HAS TO BE FILLED WITH SOMETHING { mysql_query( "INSERT INTO ".$tbl_name." (user_name, user_mail, user_mobile) VALUES( '".mysql_real_escape_string($user_name)."', '".mysql_real_escape_string($user_mail)."', '".mysql_real_escape_string($user_mobile)."' ) ") or die( mysql_error() ); echo "<h3>You're now a part of our mailing list! Thanks!</h3>"; } else { echo "Error - one or more fields is empty"; }
Kopierede lige det hele over i min editor og prøvede.. Kunne se jeg manglede et " i den mysql_query jeg fik lavet.. nu tror jeg rent faktisk det virker.. der er i hvert fald ingen fejl i koden - prøv lige :)
if( !empty($user_name) && !empty($user_mail) && !empty($user_mobile) ) // EVERY FIELD HAS TO BE FILLED WITH SOMETHING { mysql_query( "INSERT INTO ".$tbl_name." (user_name, user_mail, user_mobile) VALUES( '".mysql_real_escape_string($user_name)."', '".mysql_real_escape_string($user_mail)."', '".mysql_real_escape_string($user_mobile)."' ) ") or die( mysql_error() ); echo "<h3>You're now a part of our mailing list! Thanks!</h3>"; } else { echo "Error - one or more fields is empty"; }
så ville jeg google efter "known trouble with pasting php code in indexhibit"
alt efter om det din server eller cms'et som har problemer - ville jeg fixe min server eller kassere cms'et fordi det ik lever op til det jeg skulle bruge det til.
Nu har jeg taget det online og brugt følgende, men det virker stadig ikke... <?php if( $_POST['action'] == "submit") { $host = "localhost"; $username = "xxx"; $password = "xxx"; $db_name = "hlr"; $tbl_name = "mailinglist";
mysql_connect($host, $username, $password) or die("cannot connect"); // EDITED THIS LINE mysql_select_db($db_name) or die("cannot select DB");
mysql_query( "INSERT INTO ".$tbl_name." (user_name, user_mail, user_mobile) VALUES( '".mysql_real_escape_string($user_name)."', '".mysql_real_escape_string($user_mail)."', '".mysql_real_escape_string($user_mobile)."' ) ") or die( mysql_error() ); echo "<h3>You're now a part of our mailing list! Thanks!</h3>"; } else { echo "Error - one or more fields is empty"; }
Det må være systemet, da det virker når man linker til ekstern fil. Men har I så et forslag til hvordan man kan gøre det? Med det mener jeg, at brugerne skal have mulighed for at ryge tilbage på forsiden igen.
mysql_query( "INSERT INTO ".$tbl_name." (user_name, user_mail, user_mobile) VALUES( '".mysql_real_escape_string($user_name)."', '".mysql_real_escape_string($user_mail)."', '".mysql_real_escape_string($user_mobile)."' ) ") or die( mysql_error() ); echo "<h3>You're now a part of our mailing list! Thanks!</h3>";
// erstat url med sted de skal sendes hen.
redirect("url"); } else {
// erstat url med sted de skal hen når de trykker eller brug redirect som foroven.
echo "Error - one or more fields is empty<br /> <a href='url'>Go back</a>";
}
mysql_close(); }
?>
og din form action skal selvfølgelig pege på filen der indeholder dette.
mysql_query( "INSERT INTO ".$tbl_name." (user_name, user_mail, user_mobile) VALUES( '".mysql_real_escape_string($user_name)."', '".mysql_real_escape_string($user_mail)."', '".mysql_real_escape_string($user_mobile)."' ) ") or die( mysql_error() ); echo "<h3>You're now a part of our mailing list! Thanks!</h3>"; } else { echo "Error - one or more fields is empty"; }
mysql_close(); }
vardump($_POST); // skulle meget gerne udskrive alle dine data når du submitter.
krusnof, du maa nok se i oejnene at du ikke faar nogen loesning i denne traad. Jeg har testet den kode du viser i dit oprindelige spoergsmaal og i mit system virker koden efter hensigten: databasen bliver updatet med det der fyldes i formularen og jeg faar, paa samme side, beskedden "You're now a part of our mailing list! Thanks!"
Problemet ligger derfor IKKE i din kode (uanset hvor mange variationer kloge hoveder kan komme op med - jeg trak mig tilbage fordi jeg ikke kunne foelge med i, eller ikke havde energi til at foelge med i disse diversioner, og jeg kan ikke selv se hvad der er galt med "$_SERVER['PHP_SELF']" - det er det jeg selv bruger.)
Saa du skal soege hjaelp et andet sted end i et spoegsmaal med kategorien php. Jeg kan ikke sige dig hvor. Du siger at du bruger Indexhibit. Findes der maaske et Indexhibit forum eller user community eller helpdesk hvor du kan henvende dit? Du skal saa lukke dette spoergsmaal (og vel nok give dig selv points fordi du ikke fik en loesning - selv om en bruger har oprettet et svar tre gange.)
Hvis du rejser spoergsmaalet igen, paa eksperten i en anden kategori eller paa et Indexhibit forum, vil jeg foreslaa at du arbejder lidt med den maade du forklarer dig paa. I denne traad i dit oprindelige spoergsmaal sagde du: "Problemet ligger dog i at jeg gerne ville have at valideretingen forblev paa samme side...." Nej, det er ikke det der er dit problem. Dit problem er at koden ikke resulterer i update af databasen og i en besked til brugeren (og heller ikke en fejlmelding). Det tog syv indlaeg foer du forklarede det. Det at "der sker ingenting" hjaelper ikke nogen med at foreslaa en loesning. Du var ogsaa sen til at forklare at du bruger et cms system. Det kommer ikke mig ved, men du vil give dig selv en bedre chance for at faa en loesning hvis du proever at give svarerne bedre oplysninger.
Tak for kommentar, jeg lukker - men da der ikke var nogle som kunne løsne det, så beholder jeg pointene. Om det er cms systemets skyld eller ej, kan jeg jo ikke gøre for! Ellers havde jeg jo ikke spurgt.
Det skal siges at jeg nævnte Indexhibit i andet indlæg, så hvis det er for sent, sorry, men synes ikke at det er så sent.
Har desuden prøvet deres egne fora, men de svarer ikke.
Har fået en ven til at lave en jquery/ajax box, som kan løse problemet.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.