• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

ausschließen, dass leere felder übergeben werden

heaven

New member
hallöli ihrs,

ich hätte da mal wieder gern ein php-problem...

ich habe via formular den usern die möglichkeit gegeben, eigene datensätze in eine tabelle einzutragen. dazu hab ich analog eines älteren beitrages hier im forum zwei dateien erstellt. zum einen die mit den form-fields, zum anderen die mit dem aufruf des insert-queries.

wie kann ich nun verhindern, dass leere felder (z.b. beim aktualisieren der seite im browser oder absichtlich nicht ausgefüllte felder) ebenfalls als datensatz eingetragen werden? also die id wird automatisch eingetragen, daher müsste ich vermutlich (??) bei den anderen feldern einen leereintrag ausschließen, oder? irgendwie hab ich dazu in meinen anfängerbüchern nix gefunden (ich weiß aber auch nicht so genau, wonach ich da suchen müsste)...

danke schonmal im voraus für eure hilfe. anbei noch der quelltext des mysql-query-aufrufes. ich vermute mal, dass ich da noch irgendwas ala "wenn eintrag nicht null ist" oder so eintragen müsste (?????)


<?
mysql_connect("hostname","username","password");
mysql_select_db("db_name");
$eintrag = "INSERT INTO songtexte (name,titel,text) Values ('$name','$titel','$text')";
$eintragen = mysql_query($eintrag);
?>
 
beim definieren der mysql datenbanktabellen den Wert NOT NULL mitübergeben, zum einen und zum anderen im Script danach suchen

if ($name == " "){
echo...
 
hi wagi,

die not nulls stehen in der tabelle. wie würde ich das ins script einfügen? ungefähr so?

<?
mysql_connect("hostname","username","password");
mysql_select_db("db_name");
$eintrag = "INSERT INTO songtexte (name,titel,text) Values ('$name','$titel','$text')";
if ($name == " "){
echo "Bitte gib Text ein";
}
else
{
$eintragen = mysql_query($eintrag);
}
?>
 
also wenn die not nulls in der mysql datei angegeben wurde und dann beim übertragen der felder ein leeres feld übertragen wurde gibt mysql automatisch nen fehler aus!
Ansonsten musst du das beim Script beim übertragen überprüfen:

Datas werden gesendet

if (isset ($name) {
mysql_query( "INSERT INTO blablabla")
}
else echo "Fehler";

Wahlweise kannst du auch if ($name != " ") schreiben!

oder so wie dus gemacht hast :)
 
Zuletzt bearbeitet:
ähm... ich hatte dich so verstanden, dass ich das dennoch auch im übergabe-skript mit abfragen muss. falls das auch richtig verstanden ist, hab ich das dann von der syntax her im vorherigen post richtig reingeschrieben? ich bin da noch nicht so fit...
 
Also die Einzelabfrage ob das und das leer ist ist deshalb wichtig, da es nur bei der NOT NULL MySQL Angabe auch ein MySQL Fehler ausgegeben wird. Da du die auch so direkt nicht beeinflussen kannst ist die Einzelabfrage nötig, damit du deinen Usern sagen kannst was sie tun sollen

PS: Les auch nochmal meinen letzten Thread, den hab ich 3 mal editiert *grins*
 
vor dem doppeltem Abschicken beim Aktualisieren der Ergebnisseite schützt aber die Prüfung auf einen Leerstring nicht.... Denn wenn jemand gepostet hat und dabei einen gültigen Datensatz erzeugen konnte, dann wird ein Refresh im Browser zu einem neuen gültigen Datensatz führen, mit neuer id!!

Ich umgehe das immer durch Einfügen eines Redirects ala Header ("Location: index.php"); am Ende des Auswerteskriptes. Dadurch wird der POST Request mit den ganzen Parametern in ein GET umgewandelt, ohne Parameter und der Benutzer kann Refreshen bis er schwarz wird.....
 
puuuh, ne schwere geburt - reichlichst trial and error, bis mir ein fehlendes gleichheitszeichen zwischen die finger kam (darfst nochmal editieren, wagi *g*). also ich bin jetzt soweit, dass das ding mir jeweils die korrekten fehlermeldungen ausgibt, wenn ich eins der felder leer lasse:

...
$eintrag = "INSERT INTO songtexte (name,titel,text) VALUES ('$name','$titel','$text')";
if (!$name == " ")
{
echo "Bitte betätige den Zurück-Button Deines Browsers und gib den Namen ein!";
}
elseif (!$titel == " ")
undsoweiter......

allerdings hat das ganze einen haken:
sobald ich in ein feld zwar keinen text, aber dafür leerzeichen eintrage, bekomme ich die fehlermeldung nicht mehr, der datensatz wird geschrieben.

gibt's da irgendne möglichkeit, die leerzeichen ebenfalls auszuschließen, ohne natürlich erforderliche leerzeichen im text oder zwischen vor- und nachname zu killen? also sowas wie "wenn das erste zeichen ein leerzeichen ist, dann trag nix ein" oder so?


ähm, albu, wenn ich dich richtig verstanden hab, leitest du nach der eingabe direkt auf irgendeine andere seite weiter? wo zeigst du denn dann den fehlertext an? und wie machst du das befehlsmäßig mit dem "Location:datei.php"? oder hab ich da etwas grundsätzlich falsch verstanden?
 
Also prinzipiell hast Du mich schon richtig verstanden. Fehlertexte zeige ich immer im Formular an, d.h. ich schaue, ob die Datensätze angelegt werden konnte und sende den Benutzer in die Listenansicht zurück, oder stelle fest, daß ein Fehler vorlag und dann sende ich den Benutzer in das Formular zurück. Dort bekommt er seine Eingaben wieder vorgekaut und dazu die Fehlermeldung in fetten roten Lettern (oder so).... dann kann er den Fehler korrigieren und das Ganze erneut abschicken...


mit $name = trim ($name) schnippelst Du führende und abschliessende Leerzeichen (und Tabs) aus einem String raus....
 
wow, das macht ja viel mehr sinn als das, was ich da in meiner echo-meldung ausgebe von wegen "bitte betätige den zurück-button und ..." !!

wie bitte geht sowas? stehen müsste es dann ja irgendwo bei dem

if (!$name == " ")
{
echo "Bitte betätige den Zurück-Button Deines Browsers und gib den Namen ein!";
}
else
{
$eintragen = mysql_query($eintrag);
echo "Der Songtext wurde in die Datenbank eingetragen. Vielen Dank!";
}

oder? ach ja, das mit dem trim hat prima geklappt (nachdem ich das ; dahintergepackt hab *outet sich als absoluten dussel*). danke dafür!
 
hmm naja im Grunde irgendwie so:

PHP:
if ($allesOK)
{
   mysql_query (blahblahbla....);
   $newLocation = "index.php";
}
else
{
   $newLocation = "form.php?Err=$ErrorText&name=$name&titel=$titel&text=$text";
}
Header ("Location: ".$newLocation);
ErrorText mußt Du vorher auf was Sinnvolles setzen....
 
ui, danke! ich werde mal damit rumbasteln. vielleicht klappts ja. ist echt ne viel sinnvollere lösung als die, die ich jetzt gebastelt hab.

ähm: danke an euch beide für die schnelle und gute hilfe!
 
Zurück
Oben